Networking 为什么UDP报头有';长度字段';?

Networking 为什么UDP报头有';长度字段';?,networking,udp,protocols,Networking,Udp,Protocols,我不明白为什么UDP报头有“长度”字段,为什么需要它 如果原因是要知道“应用程序消息(L5数据)”在段中的起始位置,则可以从“UDP数据-UDP标头长度(它已经是已知值)”中获取。UDP标头长度字段是UDP标头的长度加上UDP数据。它确实是多余的,因为这个长度可以从IP报头总长度字段计算出来,其中UDP数据报长度是IP总长度减去IP报头长度。因为UDP可以通过IP以外的其他协议传输 另外,因为UDP传输的数据报消息的长度(UDP长度)可以通过多个IP碎片数据包发送。 来源:UDP使用消息流非F

我不明白为什么UDP报头有“长度”字段,为什么需要它


如果原因是要知道“应用程序消息(L5数据)”在段中的起始位置,则可以从“UDP数据-UDP标头长度(它已经是已知值)”中获取。

UDP标头长度字段是UDP标头的长度加上UDP数据。它确实是多余的,因为这个长度可以从IP报头总长度字段计算出来,其中UDP数据报长度是IP总长度减去IP报头长度。

因为UDP可以通过IP以外的其他协议传输

另外,因为UDP传输的数据报消息的长度(UDP长度)可以通过多个IP碎片数据包发送。


来源:

UDP使用消息流非FIFO作为发送方和接收方之间的通信模型。如果未提及尺寸,则无法在rxr处破译消息。 假设发送了m1m2m3,那么将通知每条消息,以便您可以追溯消息。
关于@Steffen的可能重复项,它与我的问题点不同,我看不出这有什么不同,因为其他问题问为什么IP报头和UDP报头中也有长度字段,我认为这与您的问题相同,只是用了不同的词。如果您觉得这不是重复的,请描述您的问题中的不同之处。那么为什么我们需要它?显然,需要一个长度字段来指定有效负载字节的数量。该协议嵌入在另一个协议(IP)中,该协议也包含有关其有效负载的长度信息(可用于计算UDP有效负载长度),这使得UDP长度具有冗余性。但是,如果要在没有此信息的另一个(非IP)协议中使用UDP协议,则需要UDP长度字段。因此,作为一个独立的协议定义,它不需要总是嵌入到另一个包含长度信息的协议中,这是必需的。IP数据包碎片和重组发生在第3层(IP),对第4层(UDP)是透明的。UDP永远不会知道IP数据包是否分段,因为IP将在将数据包有效负载传递给UDP之前重新组装数据包分段。当您通过UDP over(分段)IP管理自己的协议,并且您正在接收单独的IPv4数据报,并且需要自己重新组装时,这会很有帮助。IP处理数据包分段和重新组装。UDP内部的协议将从该协议中删除两次。UDP本身永远不知道碎片,UDP内部的协议也永远不知道UDP不知道什么。UDP将接收完整的数据报,无论IP碎片如何,这与第4层或以上的协议无关。在高级编程中是这样,但在低级别编程中,实际上它有助于缓冲区大小的分配,例如,当IP层希望将UDP数据报返回到UDP层时,这在创建自己的协议和接收IP数据报时非常有用。有用,但不是绝对必要的…