UDP最大数据包大小

5
我检查了最大的UDP数据包大小,发现它是65507字节的数据。
这是65535-8(UDP头)-20(IP头)。
UDP长度头是2个字节长,即65535限制。
我知道我们要从中减去8,因为这是UDP头的大小,但如果它始终是8,为什么我们需要减去它呢?
同样的问题也适用于IP头长度的20。
谢谢。
1个回答

10

UDP数据报被封装在IP数据包中。如果您将IP数据包头大小设置为20,则表示使用IPv4,而IPv4的最小头大小为20。 IPv4具有理论最大包大小为65535(在IPv4头中有一个16位的总长度字段),但实际IPv4最大包大小将是链路上的MTU。此大小包括IPv4头和IPv4有效负载,即UDP数据报,其中包括UDP头和UDP有效负载。

由于UDP数据报是IPv4数据报的数据,并且IPv4数据报的整个长度(包括IPv4头)是IPv4头的16位总长度字段,因此整个IPv4包,包括IPv4头,最大为65535个八位字节。这在IPv4的定义中详细说明,RFC 971 Internet protocol, Section 3.1 Internet Header Format:

3.1. Internet Header Format

互联网头部内容的摘要如下:

 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|Version|  IHL  |Type of Service|          Total Length         |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|         Identification        |Flags|      Fragment Offset    |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|  Time to Live |    Protocol   |         Header Checksum       |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                       Source Address                          |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                    Destination Address                        |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                    Options                    |    Padding    |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

总长度字段的定义如下:

总长度:16位

总长度是数据报文的长度,以八位字节为单位计算,包括互联网头部和数据。该字段允许数据报文的长度最多达到65,535个八位字节。这样的长报文对于大多数主机和网络来说是不切实际的。所有主机必须准备接受最多576个八位字节的数据报文(无论它们是完整的还是分片的)。建议主机在有保证目标地址准备接受更大数据报文的情况下才发送大于576个八位字节的数据报文。

选择数字576是为了允许在所需的头部信息之外传输合理大小的数据块。例如,该大小允许512个八位字节的数据块加上64个头部八位字节适合一个数据报中。最大的互联网头部是60个八位字节,而典型的互联网头部是20个八位字节,从而为更高级别协议的头部留出余量。

这意味着您必须将IPv4头长度从最大值65,535中减去,以获得包括8个八位字节UDP头的最大UDP数据报长度。


所以我们从65535的udp长度中减去8,以便它适合ip总长度头。但是为什么是20? - Yonatan Kreiner
1
不。IPv4数据包的最大长度为65,535减去IPv4头部长度(最小20,最大60),得到最大UDP数据报长度。然后,您需要减去UDP头部大小8,以获取最大UDP有效载荷大小。这是理论上的最大值,但实际最大值将取决于链路MTU,而且这与理论最大值无关。 - Ron Maupin
@YonatanKreiner,实际上,你可能不想发送超过约500字节的UDP数据报,因为UDP是无连接且不可靠的。 - Ron Maupin
由于整个IPv4数据包大小的理论限制为65,535,包括IPv4头(最小20字节,最大60字节)和有效负载(UDP数据报),因此必须减去IPv4头的20到60字节以获取最大UDP数据报大小。 UDP数据报是IPv4头的有效负载。我真的不知道如何解释了。我已经指出了这一点好几次了。 - Ron Maupin
IPv4的定义,_RFC 791,Internet Protocol_,在IP头中定义了总长度字段:“_总长度是数据报的长度,以八位字节为单位,包括互联网头和数据。该字段允许数据报的长度达到65,535个八位字节。_” - Ron Maupin
显示剩余4条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接