为什么IPv4 HIL包含在总长度中?

为什么IPv4 HIL包含在总长度中?

在 IPv4 数据包中

有 IHL 和总长度,我知道需要知道数据的大小,但为什么我要在两个地方计算头长度,而不是 HIL 和数据长度?

我读rfc791

总长度:16位

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

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

但他们没有提到为什么它包含标题长度

答案1

来自维基百科 Internet 协议版本 4

互联网标头长度 (IHL)

由于可选的第 14 个字段(选项),IPv4 报头的大小是可变的。IHL 字段包含 IPv4 报头的大小;它有 4 位,用于指定报头中的 32 位字数。此字段的最小值为 5,[32],表示长度为 5 × 32 位 = 160 位 = 20 字节。作为 4 位字段,最大值为 15;这意味着 IPv4 报头的最大大小为 15 × 32 位 = 480 位 = 60 字节。

总长度

这个 16 位字段定义整个数据包的大小(以字节为单位),包括报头和数据。最小大小为 20 字节(不含数据的报头),最大为 65,535 字节。所有主机都必须能够重组最大 576 字节的数据报,但大多数现代主机可以处理更大的数据包。链接可能会对数据包大小施加进一步的限制,在这种情况下,数据报必须分段。IPv4 中的分段是在发送主机或路由器中执行的。重组是在接收主机上执行的。

不同之处在于,IHL 指示选项字段是否存在,以及它的大小,因为它的长度是可变的。

总长度用于指示不带报头的数据(数据包有效负载)的大小,以及用于消息的简单发送和接收。它与 IHL 一起允许解析消息。

相关内容