【问题标题】:Dealing with fragmented UDP处理碎片化的UDP
【发布时间】:2013-04-25 23:35:22
【问题描述】:

好的,在任何人问之前,TCP 不是一个选项。

所以,我正在通过 UDP 发送一些消息。每条消息的开头都有一个 4 字节长度的字段。到目前为止,我一直在使用这个字段来确定我是否有完整的消息。

但我想知道,如果我有两条大消息,大到足以使它们都像这样分散:

Message 1
Length 1 | Fragment 1-1 | Fragment 1-2 | Fragment 1-3

Message 2
Length 2 | Fragment 2-1 | Fragment 2-2 | Fragment 2-3

我一个接一个地发送,是否可以像这样交错发送:

Length 1 | Length 2 | Fragment 1-1 | Fragment 2-1 | Fragment 1-2 | Fragment 2-2 | Fragment 1-3 | Fragment 2-3

如果是这样,如果我无法控制消息的分段方式,我怎么可能重新组装这些?

编辑:另外.. 我突然想到 UDP 可能不会分段,而我看到的“分段”可能来自使用固定大小的缓冲区调用 .receive() 方法。所以也许这甚至不是问题。谁能确认 UDP 是否分片?

【问题讨论】:

  • 这里有两种不同类型的分片:UDP本身的分片,其次是如何将大消息分片成多个UDP数据包。

标签: network-programming udp


【解决方案1】:

不,这是不可能的。 UDP 数据报被完整、完整地传送或根本不传送。您不必担心交错或重组。您所需要担心的只是未送达、重复送达和乱序送达;-)

如果您认为您看到的是碎片,那么您实际上是在您的代码中看到了一个编程错误。

【讨论】:

  • 感谢您确认我的怀疑(我添加了一个编辑)。我很高兴这就是我必须担心的“全部”。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-31
  • 2017-12-09
  • 2011-12-13
  • 2014-04-09
相关资源
最近更新 更多