【问题标题】:L4 checksum calculation in IPv6 packets with Routing header具有路由标头的 IPv6 数据包中的 L4 校验和计算
【发布时间】:2015-02-13 15:09:56
【问题描述】:

在规范中提到,如果路由头存在,TCP/UDP 伪头计算如下:

"如果 IPv6 数据包包含路由头,则伪头中使用的目标地址是最终目标的地址。在始发节点,该地址将在路由头的最后一个元素中;在接收方(s),该地址将位于 IPv6 标头的目标地址字段中。”

您了解原始节点伪标头计算与接收者不同是如何工作的吗?这不会导致数据包在接收端被丢弃吗?

谢谢!

【问题讨论】:

    标签: tcp routing udp ipv6 checksum


    【解决方案1】:

    这样做正是出于这个原因:确保接收器端的真实标头与计算中使用的伪标头匹配。

    想象一下这样发送的 IPv6 数据包:

    +-------------------------------------+
    | IPv6 header (simplified)            |
    | Source:        2001:db8::1          |
    | Destination:   2001:db8:aaaa::1     |
    +-------------------------------------+
    | Routing options header (simplified) |
    | Segments Left: 2                    |
    | Address 1:     2001:db8:bbbb::1     |
    | Address 2:     2001:db8:cccc::1     |
    +-------------------------------------+
    | Etc                                 |
    

    第 4 层校验和将使用源 2001:db8::1 和目标 2001:db8:cccc::1(路由标头中的最后一个地址)计算。

    它将到达2001:db8:aaaa::1,在此交换目标地址和路由头中的首地址,并且Segments Left计数器将减少。结果:

    +-------------------------------------+
    | IPv6 header (simplified)            |
    | Source:        2001:db8::1          |
    | Destination:   2001:db8:bbbb::1     |
    +-------------------------------------+
    | Routing options header (simplified) |
    | Segments Left: 1                    |
    | Address 1:     2001:db8:aaaa::1     |
    | Address 2:     2001:db8:cccc::1     |
    +-------------------------------------+
    | Etc                                 |
    

    它将到达2001:db8:bbbb::1,在此交换目标地址和路由头中的第二个地址,并且Segments Left计数器将减少。结果:

    +-------------------------------------+
    | IPv6 header (simplified)            |
    | Source:        2001:db8::1          |
    | Destination:   2001:db8:cccc::1     |
    +-------------------------------------+
    | Routing options header (simplified) |
    | Segments Left: 0                    |
    | Address 1:     2001:db8:aaaa::1     |
    | Address 2:     2001:db8:bbbb::1     |
    +-------------------------------------+
    | Etc                                 |
    

    这将到达2001:db8:cccc::1,他将看到没有更多的段,因此它是最终的接收者。它将在校验和计算中使用来自主要 IPv6 标头的源地址和目标地址,这些地址与发送方使用的地址相同。因此校验和将匹配。

    【讨论】:

    • 感谢您的快速回复!所以这意味着在 2001:db8:bbbb::1 和 2001:db8:aaaa::1 的示例中不会有匹配的 L4 校验和,对吧?那么他们是否应该知道,因为数据包有一个路由标头,并且他们不是最终目的地,所以他们不应该处理 L4 数据?
    • 如果他们不是最终目的地,他们就没有任何业务可以查看第 4 层的东西。如果他们这样做,他们将不得不了解路由标头对校验和计算的影响。
    猜你喜欢
    • 2015-08-31
    • 1970-01-01
    • 1970-01-01
    • 2017-03-21
    • 1970-01-01
    • 2019-01-30
    • 1970-01-01
    • 2013-02-02
    • 1970-01-01
    相关资源
    最近更新 更多