为什么UDP头部有“长度字段”?

7

我不理解为什么UDP头部有“长度”字段,以及它的作用是什么?

如果原因是为了知道在段中“应用程序消息(L5数据)”开始的位置,那么可以从“UDP数据-UDP头部长度(已知值)”获取该信息。


2
可能是为什么UDP在其数据包中有两个“UDP长度”字段?的重复问题。 - Steffen Ullrich
@Steffen 这与我的问题点不同。 - user7159879
1
我不明白这有什么不同,因为其他问题问的是为什么IP头和UDP头中都有长度字段,而在我看来,这与你所问的只是用不同的措辞表达相同的意思。如果您认为这不是重复,请描述一下您问题中的不同之处。 - Steffen Ullrich
3个回答

8
因为UDP可以在IP之外的协议上传输。
而且UDP传输数据报消息的长度(udp长度)可以通过多个IP分段数据包发送。 enter image description here 来源:https://notes.shichao.io/tcpv1/ch10/

4
IP 数据包的分片和重组发生在第三层(IP 层),且对第四层(UDP)来说是透明的。UDP 不会知道 IP 数据包是否被分片,因为 IP 在将数据包载荷传递给 UDP 之前会重新组装数据包片段。 - Ron Maupin
当您在UDP上管理自己的协议并且收到分离的IPv4数据报时,需要自己重新组装它时,这非常有帮助。 - franckspike
IP 处理数据包的分段和重组。UDP 内部的协议与此相差两次。UDP 本身不知道分段,而 UDP 内部的协议也永远不会知道 UDP 不知道的内容。UDP 将接收完整的数据报,无论 IP 是否分段,这与第 4 层或以上的协议无关。 - Ron Maupin
在高级编程中是正确的,但在低级编程实践中,它对于缓冲区大小分配非常有帮助,例如当IP层想要将UDP数据报返回给UDP层时。 - franckspike
当创建自己的协议并接收IP数据报时,这非常有用。虽然很有用,但不是绝对必要的... - franckspike

6
UDP头部长度字段是UDP头部加上UDP数据的长度。实际上,它是多余的,因为可以从IP头部总长度字段计算出此长度,其中UDP数据报长度是IP总长度减去IP头部长度。

那么为什么我们需要它呢? - user7159879
10
显然,需要一个长度字段来指定有效载荷字节数量。该协议嵌入在另一个协议(IP)中,该协议也有关于其有效载荷的长度信息,可以用来计算UDP有效载荷长度,并使UDP长度变得多余。但是,如果您使用UDP协议在另一个(非IP)协议中,该协议没有此信息,则需要UDP长度字段。因此,在作为独立协议定义而无需始终嵌入在包含长度信息的另一个协议中的情况下,它是必要的。 - Ton Plooij
1
IP头长度是4字节的倍数,UDP头长度是1字节的倍数。 - Effie

-1

UDP使用消息流非FIFO作为发送方和接收方之间的通信模型。如果未提及大小,则无法在rxr处解密消息。例如,如果发送了m1m2m3,则需要通知每个消息,以便您可以追溯消息。祝好。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接