UDP包分IP分片时如何在第一个UDP分片中填充UDP长度?

How to fill the UDP length in the first UDP fragment when UDP package divided to IP fragment?

比如一个2000字节的UDP包(包含UDPheader),网络MTU为1500,那么这个UDP包应该被拆分成两个IP分片。只有第一个 IP 包包含 UDP header。 第一个IP包的UDPheader中的UDP长度应该填什么值? 1480 还是 2000? 有文件证实吗?

我想你可能想多了。只需将 UDP 长度设置为无论您的数据有多大。

IP 碎片可能发生在任何路由器跃点,而您并不知情(假设您是发件人)。在将 UDP 数据报传送到应用程序之前,IP 层负责对数据包进行分段和重新assemble。除非您已插入 NIC 驱动程序,否则您将无法可靠地判断数据包是否在途中被分割。

如果在途中丢失了一个 IP 片段,您根本不会得到任何 UDP 数据报,从应用程序的角度来看,它只会丢失,即使 IP 层可能已经得到 10 个中的 9 个碎片.

理查德·史蒂文斯 (Richard Stevens) 等人的开创性著作中精彩地描述了这一切:TCP/IP 图解,第 1 卷:协议 ,第 10.7 节 IP 碎片。

UDP Length 是 UDP header 和 UDP 数据的长度,以字节为单位。碎片 will/should 不会改变这一点。

[UDP]“长度是这个用户数据报的八位字节长度,包括这个 header 和数据”--RFC768,一个 Internet 标准。也是在 Stevenslink 中引用:“参考图 10-2,UDP Length 字段是 UDP header 的长度和 UDP 数据的字节数。”