为什么 IPv4 标头中有一个总长度字段?

为什么 IPv4 标头中有一个总长度字段?

IPv4 数据报的报头中有一个字段,称为总长度编码为 16 位。由于已经存在关于标头长度数据报的总长度似乎是多余的:它可以通过从链路层传递的数据的总长度中减去报头长度来计算。

那个字段真的有必要吗?

答案1

简短的回答是肯定的 - IPv4 规范说它是必要的,而且它确实是必要的,至少出于兼容性的目的。

长答案是,如果数据报小于特定大小,某些第 2 层传输将会填充数据报。发生这种情况时,IP 长度标头很重要,以便可以丢弃第 2 层填充。

答案2

这可能是一个题外话,但我清楚地记得 25 年前在大学网络 101 课程中讨论 TCP/IP 时问过同样的问题。

我当时得到的 2 个答案仍然有意义:

“在设计 TCP/IP v4 时,人们还远不能确定未来 IPv4 是否会得到扩展以使其更加有用。所以他们保留了这一点,为未来的变革留有余地。”

“如果处理 TCP-IP 数据包的软件不了解数据传输的 L2 方面,则需要一种方法来查找大小。要么将其放在数据包中,要么向软件提供一个指定长度的单独参数。所以你最好首先将其放在标头中。”

(为了说明最后一点:您在问题中自己提到了这一点:“从链路层传递的数据的总长度”是附加参数。)

相关内容