为什么UDP的数据包中有“UDP Length”字段两次?这不是多余的吗?如果需要进行某种错误检查,请提供一个示例。
答案 0 :(得分:4)
你的观察是正确的。长度字段是冗余的,因为IP报头和UDP报头都有一个长度字段。我对这种冗余的原因唯一的猜测是,它发生的原因是UDP是一次设计的,目前尚不清楚IP协议套件的外观。
所有合法UDP数据包的长度字段应与从IP头中的长度字段得到的长度字段完全匹配。如果你不这样做,你无法确定接收器将如何处理数据包。
互联网上看到具有不一致长度字段的UDP数据包。我猜他们正在探测缓冲区溢出,如果一个长度字段用于分配内存而另一个长度字段用于将数据复制到分配的缓冲区时,可能会发生缓冲区溢出。
在较新的UDP Lite协议中,长度字段已被重新利用。 UDP Lite头中的长度字段不表示数据包中有多少数据,而是表示校验和覆盖了多少数据。 UDP Lite数据包中的数据长度始终根据IP标头中的长度字段计算。这是UDP和UDP Lite头格式之间的唯一区别。
答案 1 :(得分:0)
来自RFC 768:
Length是此用户数据报的八位字节长度,包括 这个标题和数据。 (这意味着最小值 长度是八。)
概念上以UDP头为前缀的伪头包含 源地址,目的地址,协议和 UDP长度。 此信息可防止错误路由 数据报即可。此校验和过程与TCP中使用的过程相同。
0 7 8 15 16 23 24 31
+--------+--------+--------+--------+
| source address |
+--------+--------+--------+--------+
| destination address |
+--------+--------+--------+--------+
| zero |protocol| UDP length |
+--------+--------+--------+--------+
真正的答案是这是一个“伪标题” - 也就是说,它用于计算校验和,但实际上并未发送。至少这是我从What is the Significance of Pseudo Header used in UDP/TCP
得出的结论答案 2 :(得分:-1)
我不知道它出现在哪里两次,在udp标题中只有一个“udp length”字段。