【发布时间】:2021-09-22 08:18:40
【问题描述】:
例如,一个 2000 字节的 UDP 包(包含 UDP 头),网络 MTU 是 1500。所以这个 UDP 包应该分成两个 IP 片段。只有第一个 IP 包包含 UDP 标头。 第一个 IP 包的 UDP 头中的 UDP 长度应该填什么值? 1480还是2000? 有什么文件可以确认吗?
【问题讨论】:
标签: networking network-programming udp ip network-drive
例如,一个 2000 字节的 UDP 包(包含 UDP 头),网络 MTU 是 1500。所以这个 UDP 包应该分成两个 IP 片段。只有第一个 IP 包包含 UDP 标头。 第一个 IP 包的 UDP 头中的 UDP 长度应该填什么值? 1480还是2000? 有什么文件可以确认吗?
【问题讨论】:
标签: networking network-programming udp ip network-drive
我想你可能想多了。只需将 UDP 长度设置为您的数据大小即可。
在您不知情的情况下(假设您是发送者),IP 分段可能发生在任何路由器跃点上。在将 UDP 数据报传递给应用程序之前,IP 层负责对数据包进行分段和重组。除非您插入 NIC 驱动程序,否则您将无法可靠地判断数据包是否在途中被分段。
如果在途中丢失了 IP 片段,您将根本不会得到任何 UDP 数据报,从应用程序的角度来看,它只会丢失,即使 IP 层可能已经获得了 10 个片段中的 9 个。
Richard Stevens 等人的开创性著作:TCP/IP Illustrated, Volume 1: The protocols ,第 10.7 节 IP 碎片化对此进行了精彩的描述。
【讨论】:
UDP Length 是 UDP 标头和 UDP 数据的长度,以字节为单位。碎片化将/不应该改变这一点。
[UDP]“长度是这个用户数据报的八位字节长度,包括这个头和数据”——RFC768,一个互联网标准。它也在 Stevens 链接中引用:“参考图 10-2,UDP Length 字段是 UDP 标头和 UDP 数据的长度,以字节为单位。”
【讨论】: