如何获取 IPv6 标头的大小?

如何获取 IPv6 标头的大小?

我知道 IPV4 中有 IHL 字段,即 Internet 报头长度。由于 IPv4 报头可能包含可变数量的选项,因此此字段指定报头的大小。但是 IPV6 中没有 IHL 或类似的东西。那么如何获取报头长度的确切大小?(我们知道可能会有扩展。我需要知道 IPv6 报头的大小,包括报头扩展,但不包括上层数据。)

答案1

据我所知,根本没有简单的方法可以做到这一点。

你基本上必须检查下一个标题字段,确定下一个标题是否是扩展名,将该扩展名的长度添加到总长度中,并重复此操作,直到用完扩展名。

答案2

其实你不需要检查,因为IPV6具有固定的标头长度:

IPv6 数据包报头具有固定大小(40 个八位字节)。选项作为 IPv6 报头之后的附加扩展报头实现,其大小仅受整个数据包大小的限制。扩展报头机制使协议具有可扩展性,因为它允许在不重新设计基本协议的情况下添加未来的服务质量、安全性、移动性等服务。

固定报头占据 IPv6 数据包的前 40 个八位字节(320 位)。它包含源地址和目标地址、流量分类选项、跳数计数器以及报头后面的可选扩展或有效负载的类型。此“下一个报头”字段告诉接收方如何解释报头后面的数据。如果数据包包含选项,则此字段包含下一个选项的选项类型。最后一个选项的“下一个报头”字段指向数据包有效负载中承载的上层协议。

这是 IPV6 委员会为了提高性能而做出的选择(与 IPV4 相比),您不需要使用固定数量的字节来检查每个数据包的标头内的参数的大小。

相关内容