为什么UDP数据包中有两个“UDP长度”字段?这是否多余?如果需要某种错误检查,请提供示例。
来自RFC 768:
长度是用户数据报的八位字节长度,包括此头和数据。(这意味着长度的最小值为八。)
伪头概念上放在UDP头之前,包含源地址、目标地址、协议和UDP长度。这些信息提供了对错误路由数据报的保护。此校验过程与TCP中所用相同。
0 7 8 15 16 23 24 31
+--------+--------+--------+--------+
| source address |
+--------+--------+--------+--------+
| destination address |
+--------+--------+--------+--------+
| zero |protocol| UDP length |
+--------+--------+--------+--------+
真正的答案是这是一个“伪头” - 也就是说,它用于计算校验和,但实际上并没有发送。至少这是我从UDP/TCP中使用伪头的意义是什么中得出的结论。