2013-02-06 41 views
1

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

我觉得很奇怪,我知道udp协议并不保证数据包按顺序接收。但是,广播发送者和接收者之间只有1个开关。因此,我认为,无序是不可能的。在Window OS下(在同一网络下)加上相同的程序工作正常。

假设包保证在传输层到达。额外的序列号检查不是一个选项,改变协议也不是。

+2

所以这里的基本想法是使用一个协议,允许出货或订购交货,然后要求按订单交货吗? –

回答

6

即使是本地主机到本地主机的通信也可能无序发送,其所有实现都依赖于它。由于不需要按顺序交付,栈可以随意在UDP的某处实现LIFO队列。每个操作系统可以并且会有不同的表现。如果您必须使用UDP,则您预计OOO数据包并对其进行处理。

相关问题