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

标签 linux udp linux-kernel smp

在我正在进行的一个项目中,当我们从网络读取 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/

相关文章:

linux - 使用 awk 从 grep 匹配中提取文本并并排放置

java - 我可以通过Java运行交互式脚本吗?

c - 如何获取子进程的完整返回值?

linux - binutils 为 readelf 报错

networking - 处理实时游戏中的网络丢包——TCP和UDP

c - Linux内核函数和内核模块开发

c# - Android 通过 LAN 从 C# 桌面应用程序接收 UDP 广播?

iOS "NSLocalizedDescription=Broken pipe"UDP 错误

macos - 如何在 Mac OSX 上查看加载的内核模块?

c - Linux 内核 - printk 到一个文件