1

我正在编写应用程序,而不是需要按特定顺序接收 UDP 多播数据包。我试图了解何时以及为什么我可以以错误的顺序接收数据包。因为知道这种情况的可能性有多大意味着我的系统架构。

假设主机 A 将两个 seqNum = 1 和 seqNum = 2 的数据包一一发送给主机 B。

是否保证目标主机 B 会以相同的顺序接收这些数据包?

  1. A 和 B 是同一台机器,即我们在 localhost 上运行测试。
  2. A 和 B 在同一个本地网络中(彼此相距一跳)
  3. A 和 B 在不同的网络中,但路由中没有多路径,即只有一个可能的路由。
4

2 回答 2

1

不,它永远不能保证 B 会收到任何数据包,更不用说它接收它们的顺序了。在情况 #1 中,很有可能,但不是 100%。其他两种情况都具有不交付或乱序交付的非平凡概率。

网络元素可能会丢弃数据包或无序发送数据包的原因有很多。最常见的原因是队列溢出。许多 IP 实现都有最大数量的数据包,它们将等待处理。如果他们收到另一个数据包(来自另一台机器或同一台机器上的代码),他们通常会丢弃它。由于多台机器尝试同时在线路上传输,数据包甚至可能被连接机器的线路丢弃或延迟。发生这种情况时,任何数据包都不会通过,发送机器可能会或可能不会尝试重新传输。

与往常一样,如果顺序和成功很重要,请使用 TCP。

于 2013-04-23T21:57:34.997 回答
0

交换机或路由器或任何具有队列和大量链接的网络设备可能会以不同的顺序发送数据包 - 数据包(即使具有所有相同的 MAC/IP 标头)可能最终进入不同的队列,这些队列可能以不同的模式转发,甚至更容易 - 链路聚合(etherchannel/ethernet trunk/bonding with or w/out LACP)甚至普通路由都可以通过不同的路径发送数据包

于 2014-05-06T10:43:01.510 回答