在linux中接收乱序udp数据包

Bry*_*Fok 1 c++ udp network-programming epoll boost-asio

我在linux c ++程序中观察到意外乱序的数据包接收序列.在限制接收套接字的数量后,它再次按顺序接收数据包.另外,我还用boost :: asio或epoll明确地测试了这个问题,但它们都产生了相同的结果.另一方面,在Window环境下(使用boost.asio),同一程序可以正常工作.

我发现相当奇怪,我知道udp协议不保证数据包接收顺序.但是,广播发送方和接收方之间只有1个交换机.因此,我认为,实际上不可能出现故障.加上相同的程序在Window OS(在同一网络下)下工作正常.

假设数据包保证在传输层按顺序到达.额外的序列号检查不是一个选项,更改协议也不是.

jma*_*man 6

甚至localhost到localhost的通信也可能无序传递,它的所有实现都依赖于它.堆栈可以使用UDP在某处实现LIFO队列,因为不需要按顺序传送.每个OS都可以并且将以不同的方式运行.如果必须使用UDP,则必须预期OOO数据包并处理它们.