我正在编写应用程序,而不是按特定顺序接收UDP多播数据包。我试图了解何时以及为什么我能以错误的顺序接收数据包。因为知道这种情况有多可能意味着我的系统架构。
假设主机A向主机B发送了两个seqNum = 1且seqNum = 2的数据包。
是否保证目标主机B将以相同的顺序接收这些数据包?
答案 0 :(得分:1)
不,永远不能保证B会收到任何数据包,更不用说接收它们的顺序了。在#1的情况下,很可能,但不是100%。其他两种情况都具有非交付或无序交付的非平凡概率。
网元可能会丢弃数据包或将其无序发送的原因有很多。最常见的原因是队列超限。许多IP实现具有等待处理的最大数据包数。如果他们收到另一个数据包(来自另一台机器或同一台机器上的代码),他们通常会丢弃它。由于多台机器同时尝试在线路上传输,因此连接机器的线路甚至可能丢弃或延迟数据包。当发生这种情况时,没有任何数据包可以通过,并且发送机器可能会或可能不会尝试重新传输。
与往常一样,如果订单和成功很重要,请使用TCP。
答案 1 :(得分:0)
交换机或路由器或任何具有队列和大量链路的网络设备可能会以不同的顺序发送数据包 - 数据包(即使具有所有相同的MAC / IP报头)可能会以不同的队列结束,这些队列可能以不同的模式转发,甚至更容易 - 链路聚合(etherchannel / ethernet trunk /绑定或带有LACP)或甚至普通路由可以通过不同的路径发送数据包