DPDK中重新排序库和IP分段的目的

时间:2018-09-15 23:58:26

标签: dpdk

您好Stackoverflow专家

我正在尝试通过将消息分成4个数据包来发送4096字节的消息。

但是,仅以突发方式发送消息并不能保证将按顺序接收消息。 因此,我很难找出哪个库(重新排序库或IP碎片)可以帮助我保证将按顺序接收消息。

https://doc.dpdk.org/guides/prog_guide/reorder_lib.html https://doc.dpdk.org/guides/sample_app_ug/ip_frag.html

例如,如果我分3次发送3条消息 我在下面收到这样的消息

ex)发送(3次猝发) [1111111] [22222] [33333]

ex)修订版 [33333] [22222] [1111111]

因此,为了解决此问题,在l3fwd示例中,我在重排序库和ip碎片方面苦苦挣扎。 为了达到如下所示的结果,我必须使用哪个库? (IP碎片或重新排序库)

ex)发送(3次猝发) [1111111] [22222] [33333]

ex)修订版 [1111111] [22222] [33333]

1 个答案:

答案 0 :(得分:1)

您是对的,我们使用rte_ipv4_fragment_packet()对数据包进行分段。

要重组碎片包,我们应该使用rte_ip_frag_table_create()创建一个碎片表,然后使用rte_ipv4_frag_reassemble_packet()函数。

请看看at Programmer's Guide,这里是a reassembly sample application

您提到的重新排序库旨在根据序列号而不是片段偏移进行重新排序。换句话说,工作流程如下:

  1. 我们为mbuf分配序列号。
  2. 我们在不同的线程上处理这些mbuf,即现在混合了顺序。
  3. 我们使用重新排序库对这些mbuf重新排序。

所以它很相似,但是与IP数据包重组不同。