我检查了最大UDP数据包大小,看到它是65507字节的数据
这是65535-8(udp标题) - 20(ip标题)。
UDP长度标头长2个字节,限制为65535
我知道我们从它中减去8因为它是UDP头的大小
但如果它总是8,为什么我们需要减去它
同样的问题是20个ip头长度。
谢谢
答案 0 :(得分:2)
UDP数据报封装在IP数据包中。如果您使用20作为IP数据包标头大小,则表示IPv4,最小 IPv4标头大小为20. IPv4的理论最大数据包大小为65,535(总长度为16位的字段为IPv4标头),但真正的IPv4最大数据包大小将是链路上的MTU。此大小包括IPv4标头和IPv4有效负载,它将是UDP数据报,包括UDP标头和UDP有效负载。
由于UDP数据报是IPv4数据报的数据,并且IPv4数据报的整个长度(包括IPv4报头)是IPv4报头的16位总长度字段,整个IPv4数据包,包括IPv4标头最多为65,535个八位字节。这在IPv4的定义RFC 971 Internet protocol, Section 3.1 Internet Header Format中有详细说明:
3.1。互联网标头格式
互联网标题内容摘要如下:
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位
总长度是数据报的长度,以八位字节为单位, 包括互联网标题和数据。该字段允许a的长度 数据报最多为65,535个八位字节。这样长的数据报是 对大多数主机和网络来说都不切实际。所有主人必须准备好 接受最多576个八位字节的数据报(无论它们是全部还是全部到达) 在片段中)。建议主机仅发送数据报 如果它们确保目的地是,则大于576个八位字节 准备接受更大的数据报。
选择数字576以允许合理大小的数据块 除了所需的标题信息之外还要传输。对于 例如,此大小允许512个八位字节的数据块加上64个标头 八位字符以适合数据报。最大的互联网标题是60 八位字节,典型的互联网标题是20个八位字节,允许保证金 对于更高级别协议的标题。
这意味着您必须从最大值65,535中减去IPv4标头长度,以达到最大UDP数据报长度,其中包括8个八位位组UDP标头。