首页 文章

获取IPv6标头的确切大小,包括扩展标头

提问于
浏览
0

如果IPv4有问题并且我想从std :: istream中提取IP和ICMP头,首先我得到最初的20个字节,然后检查IPv4头中提供的头长度是否大于20个字节以便提取任何选项 . 下一个字节是ICMP数据包 . 使用IPv4标头内携带的标头长度值,我可以看到IP标头的预期大小 .

但是如何获得IPv6标头的确切大小? IPv6标头内部有一个有效负载值,包括标头扩展的大小以及更高级别的数据,如ICMP . 我需要知道IPv6头的大小,包括头扩展但没有更高级别的数据,以便知道ICMPv6头在std :: istream中的起始位置 .

谢谢!

1 回答

  • 12

    IPv6标头的大小固定为40个字节 - 尽管如您所知,可能存在遵循初始IPv6标头的扩展,这些扩展不是't part of the transport layer datagram. To determine whether the IPv6 header is followed by header extensions, check the ' next header'字段 . 存储在此字段中的值将告诉您下一个标头是传输级别标头(IE TCP / UDP标头),IP级别标头扩展(IE ICMP)还是介于两者之间的任何内容 . This list给出下一个 Headers 字段的所有可能值的列表 .

    一旦确定了下一个头的类型,就可以相应地处理它 - 所有扩展头的第一个字节应该是“下一个头”字段,这样它们就可以链接在一起,如果扩展头是可变长度的,第二个字节应该是'hdr ext field',它可以用来确定它的大小 .

相关问题