7

在我正在进行的一个项目中,当我们从网络读取 UDP 流时,我们在 SMP 系统上的某些情况下看到了乱序问题。通过嗅探发送方和接收方之间连接的集线器,我们可以看到它按顺序从网络到达。但是,有时从套接字读取时它似乎无序到达。在这种情况下对 UDP 数据包是否有任何保证,或者应用程序是否应该实现重新排序缓冲区?我们没有在这里设置 CPU 亲和性,我怀疑这可能会有所帮助,但理想情况下,我希望所有 CPU/硬件线程都能够处理网络流量。

4

2 回答 2

10

UDP 不保证任何排序。这是应用程序的责任。事实上,它甚至不能保证数据包不会被重复/丢弃等。我建议你阅读:http ://en.wikipedia.org/wiki/User_Datagram_Protocol

内核做出任何这样的保证是没有意义的,特别是如果传入的数据包本身可能是乱序的,因为如果应用程序需要排序,内核可以(合理地)期望应用程序会处理它。

于 2010-06-25T16:37:15.800 回答
1

您不能保证 UDP 数据包在传输过程中不会被丢弃,因此您不能有任何排序保证。例如,当系统接收到数据包#14 和数据包#16 时,它无法知道是否应该等待数据包#15 进入后再发送数据包#16,或者数据包#15 是否被丢弃并且永远不会到来in. 系统只会给你一堆数据包,你可以把它们整理好。

于 2010-06-25T16:48:36.657 回答