在我正在进行的一个项目中,当我们从网络读取 UDP 流时,我们在 SMP 系统上的某些情况下看到了无序问题。通过嗅探连接在发送方和接收方之间的集线器,我们可以看到它是按顺序从网络到达的。但是,有时从套接字读取时它似乎无序到达。在这种情况下,UDP 数据包是否有任何保证,或者应用程序是否应该实现重新排序缓冲区?我们没有在这里设置 CPU 关联,我怀疑这可能会有所帮助,但理想情况下我希望所有 CPU/hw 线程处理网络流量。
最佳答案
UDP 不保证任何顺序。这是应用程序的责任。事实上,它甚至不能保证数据包不会被重复/丢弃等。我建议你阅读:http://en.wikipedia.org/wiki/User_Datagram_Protocol
内核做出任何这样的保证是没有意义的,特别是如果传入的数据包本身可能是乱序的,因为如果应用程序需要排序,内核可以(合理地)期望应用程序将处理它。
关于linux - SMP 系统中的 linux 内核是否保证按顺序从网络到达的 UDP 数据包将从套接字中依次读取?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3119737/