我在我的 linux c++ 程序中观察到意外的乱序数据包接收序列。在我限制了接收套接字的数量后,它再次按顺序接收数据包。此外,我还使用 boost::asio 或 epoll 显式测试了该问题,但它们都产生了相同的结果。另一方面,相同的程序在 Window 环境下运行良好(使用 boost.asio)。
我觉得这很奇怪,我知道 udp 协议不保证数据包按顺序接收。但是,广播发送方和接收方之间只有 1 次切换。因此,我相信在物理上是不可能的。再加上相同的程序在 Window OS 下(在同一网络下)工作正常。
假设数据包保证按顺序到达传输层。额外的序列号检查不是一个选项,更改协议也不是。