【问题标题】:Why the UDP header has 'Length' field?为什么 UDP 标头有“长度”字段?
【发布时间】:2020-04-18 04:32:29
【问题描述】:

UDP 标头中“长度”字段的用途是什么?假设IP头中还有一个'Length'字段,并且UDP头的长度是恒定的。

我知道这个问题已经被问过很多次了,但我找到的答案都没有让我信服。

如果是用于 IP 分片 - 据我了解,IP 分片将 UDP 数据报分成多个 IP 帧,然后接收主机中的 IP 层使用 IP 标头中的“长度”字段重新组装这些帧, 转换成 UDP 数据报,UDP 层甚至不知道数据报是分片的。

如果是因为我们不能假设网络层使用的协议是 IP - 也许我没有正确理解传输层从网络层接收数据的确切形式,但这不是真的传输层仅从网络层接收 UDP 标头和数据?如果这是真的,那么网络层使用哪种协议并不重要。 如果传输层以比特流而不是数据块的形式接收数据,那么它如何计算整个 UDP 标头和数据的校验和?

我也不能接受这个字段是多余的答案,因为我了解到在 RFC 开发的时代,每一位都很重要,没有没有专门用途的位。

我希望你能帮我弄清楚这件事。 谢谢!

【问题讨论】:

  • 因为IP包长度可以向上取整。
  • 有点粗鲁的回答 UDP 就是 UDP,你不能打赌它会被 IP 携带。在某些奇怪的情况下,UDP 数据包甚至可能是 TCP 数据包的有效负载。当一个承载协议包被接收,并且它的负载被解封装,包含的包(例如UDP)必须保持自一致,所以长度字段是必需的。
  • @Cubo78,但是 UDP 标头长度是恒定的,对吧?那我不能通过IP头的协议字段知道TCP上面的协议是UDP,然后从总长度中减去UDP头长度,得到UDP数据长度吗?
  • @user207421,即使四舍五入,也会包含在IP头的长度字段中,那有什么关系呢?
  • UDP 设计用于在不同的网络层(与许多其他协议一样)上工作。 UDP 逻辑将继续接收 IP(或其他)帧,直到接收到的字节数等于 UDP 标头中的长度字段。只有这样,数据报才会被传递到下一层(在 Windows 机器上,这个等待可能需要几分钟......)。这一层不关心(也不知道)网络层的任何事情(即它不“知道”IP 长度或它的标头长度(顺便说一句,它是可变的)

标签: udp network-protocols rfc


【解决方案1】:

所以我找到了答案-

在“https://datatracker.ietf.org/doc/html/draft-ietf-tsvwg-udp-options-01”中说:

“UDP Length 长度字段通常是多余的”。

我认为如果它在“ietf.org”域下,我可以相信...

以上链接中的更多详细信息供感兴趣的人使用。 (第 4 和 9 节)

感谢响应者!

【讨论】:

    猜你喜欢
    • 2017-05-14
    • 2010-09-21
    • 2020-07-23
    • 2013-04-17
    • 2012-09-08
    • 2020-07-05
    • 1970-01-01
    • 1970-01-01
    • 2020-03-09
    相关资源
    最近更新 更多