【问题标题】:Get exact size of IPv6 header including the extenstion headers获取 IPv6 标头的确切大小,包括扩展标头
【发布时间】:2013-01-23 14:33:12
【问题描述】:

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

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

谢谢!

【问题讨论】:

    标签: networking ipv6 ipv4 istream icmp


    【解决方案1】:

    IPv6 标头的大小固定为 40 字节 - 尽管您知道最初的 IPv6 标头后面可能有一些扩展,它们不是传输层数据报的一部分。要确定 IPv6 标头后面是否有标头扩展,请检查“下一个标头”字段。此字段中存储的值将告诉您下一个标头是传输级别标头(IE TCP/UDP 标头)、IP 级别标头扩展(IE ICMP)还是介于两者之间的任何标头。 This list 给出了下一个标头字段的所有可能值的列表。

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

    【讨论】:

    • 啊,谢谢。该链接是一个很好的。我认为 ICMP 部分不被视为 IPv6 扩展标头。剩下的唯一问题是,在 ICMP 回显应答 IP 数据包的情况下,是否可以在 ICMP 标头之后或之后有更多的扩展标头?还是 ICMP 标头总是出现在前 40 个字节之后?
    猜你喜欢
    • 2013-07-05
    • 1970-01-01
    • 2012-04-08
    • 2012-10-26
    • 2018-11-03
    • 2019-09-26
    • 2014-05-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多