UDP 最大数据包大小

Yon*_*ner 4 ip networking udp

我检查了最大 UDP 数据包大小,发现它是 65507 字节的数据。
这是 65535-8(udp 标头)- 20(ip 标头)。
UDP 长度标头为 2 个字节,限制为 65535。
我知道我们从中减去 8,因为它是 UDP 标头的大小,但如果它总是 8,为什么我们需要减去它。
对于 20 个 ip 标头长度的相同问题。

谢谢

Ron*_*pin 6

UDP 数据报封装在 IP 数据包中。如果您使用 20 作为 IP 数据包标头大小,那么您的意思是 IPv4,并且最小IPv4 标头大小为 20。IPv4 的理论最大数据包大小为 65,535(IPv4 标头中的 16 位总长度字段),但是真正的 IPv4 最大数据包大小将是链路上的 MTU。此大小包括 IPv4 标头和 IPv4 有效载荷,即 UDP 数据报,包括 UDP 标头和 UDP 有效载荷。

由于UDP数据报是IPv4数据报的数据,而IPv4数据报的整个长度,包括IPv4报头,是IPv4报头的16位Total Length字段,因此包括IPv4报头在内的整个IPv4报文是一个最多 65,535 个八位字节。这在 IPv4 的定义、RFC 971 Internet 协议、第 3.1 节 Internet 标头格式中有详细说明

3.1. 互联网标头格式

Internet 标题的内容摘要如下:

 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    |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Run Code Online (Sandbox Code Playgroud)

Total Length 字段的定义是:

总长度:16 位

总长度是数据报的长度,以八位字节为单位,包括互联网头和数据。该字段允许数据报的长度最多为 65,535 个八位字节。对于大多数主机和网络来说,如此长的数据报是不切实际的。所有主机都必须准备好接受最多 576 个八位字节的数据报(无论它们是完整的还是分段的)。建议主机仅发送大于 576 个八位字节的数据报,前提是它们确信目的地已准备好接受更大的数据报。

选择数字 576 以允许传输合理大小的数据块以及所需的报头信息。例如,此大小允许 512 个八位字节加上 64 个报头八位字节的数据块适合数据报。最大的互联网标头是 60 个八位字节,典型的互联网标头是 20 个八位字节,为更高级别协议的标头留出余量。

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