SMP系统中的Linux内核是否保证从顺序网络到达的UDP数据包将按顺序从套接字中读取?

时间:2010-06-25 16:33:01

标签: linux udp linux-kernel smp

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

2 个答案:

答案 0 :(得分:10)

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

内核做出任何此类保证是没有意义的,特别是如果传入的数据包本身可能出现故障,因为内核可以(合理地)期望应用程序将处理它,如果应用程序需要订购。

答案 1 :(得分:1)

您无法保证UDP数据包在传输过程中不会被丢弃,因此您无法获得任何订购保证。当系统接收到例如数据包#14和数据包#16时,它无法知道它是否应该在传送数据包#16之前等待数据包#15进入,或者如果数据包#15被丢弃并且永远不会到来in。系统只会递给你一大堆数据包,由你决定把它们整理好。