【问题标题】:What are the benefits of removing fragmentation from IPv6?从 IPv6 中删除碎片有什么好处?
【发布时间】:2011-09-09 10:39:30
【问题描述】:

我正在从事一个项目,其中包括使用 Java 套接字开发应用程序。然而,在阅读一些基础知识和新推出的 IPv6 范式时,这促使我提出以下问题,

从 IPv6 中删除碎片有什么好处?

如果有人可以让我理解为什么会有所帮助?

我在互联网上进行了研究,但没有找到任何有用的描述。

【问题讨论】:

    标签: sockets networking tcp network-protocols ipv6


    【解决方案1】:

    没有 IPv6 分片是一个常见的误解,因为 IPv6 标头没有 IPv4 的分片偏移字段;但是,它并不完全准确。 IPv6 不允许路由器对数据包进行分段;但是,终端节点可能插入 IPv6 分片标头1

    正如 RFC 5722 所述2,碎片化的问题之一是它往往会造成安全漏洞。在 1990 年代后期,针对 Windows 95 的几次众所周知的攻击利用了重叠的 IPv4 片段3;此外,由于必须处理的问题清单很长,数据包的在线分段存在烧入互联网路由器芯片的风险。最大的问题之一是路由器中缓冲的重叠片段(等待重组)如果处理不当可能会导致该设备上的安全漏洞。最终结果是大多数路由器实现将需要分段的数据包推送到软件。这不能高速扩展。

    另一个问题是,如果重新组装片段,则必须将它们缓冲一段时间,直到收到其余部分。有人可能会利用这种动态并发送大量未完成的 IP 片段;迫使相关设备花费大量资源等待重新组装的机会。智能实现限制未完成片段的数量,以防止由此造成的拒绝服务;但是,限制未完成的片段可能会合理地影响可以重新组装的有效片段的数量。

    简而言之,有太多棘手的问题无法让路由器处理碎片。如果 IPv6 数据包需要分段,则主机实现应该足够智能以使用TCP Path MTU discovery。这也意味着需要允许端到端的多个 ICMPv6 消息;有趣的是,许多 IPv4 防火墙管理员阻止 ICMP 以防止恶意网络映射(然后天真地阻止所有 ICMPv6),没有意识到阻止所有 ICMPv6 会以微妙的方式破坏事情4


    **尾注:**
    1. 请参阅Internet Protocol, Version 6 (IPv6) Specification 的第 4.5 节

    2. 来自RFC 5722: Handling of Overlapping IPv6 Fragments

      常用的防火墙使用指定的算法 在 [RFC1858] 中清除尝试尝试的恶意数据包 覆盖部分传输层标头 为了绕过入站连接检查。 [RFC1858] 防止重叠片段攻击 上层协议(在本例中为 TCP)通过推荐 片段偏移量为 1 的数据包将被丢弃。
      虽然这适用于 IPv4 片段,但它不起作用 用于 IPv6 片段。这是因为可分片的部分 IPv6 数据包的前面可以包含扩展标头 TCP 标头,从而降低此检查的效率。

    3. Teardrop attack (wikipedia)

    4. RFC 4890: Recommendations for Filtering ICMPv6 Messages in Firewalls

    【讨论】:

    • +1,当路由器可以在硬件中完成所有事情时,它们的速度可以快得多,真是令人惊讶
    • 阻止所有 v4 ICMP 同样有害 - 所需的碎片响应对 IPv4 中的 PMTUD 同样重要。
    【解决方案2】:

    我没有给你的“官方”答案,但仅仅基于阅读 IPv6 如何处理太大的数据报,我的猜测是减少路由器的负载。分段和重组会在路由器上产生开销。 IPv6 将这一负担转移到了端节点,并要求它们执行 MTU 发现以确定它们可以发送的最大数据报大小。按理说,终端节点更适合该任务,因为它们要处理的数据较少。实际上,路由器的盘子上已经足够了;强制节点处理它并允许路由器简单地丢弃超过其 MTU 阈值的东西是有意义的。

    理想情况下,最终结果是路由器在 IPv6 下(所有条件都相同)可以处理比在 IPv4 下更大的负载,因为它们无需担心分段/重组。这种处理器能力可以专门用于路由流量。

    【讨论】:

    • 分段和重组会在路由器上产生开销”为什么路由器要处理重组?
    【解决方案3】:

    IPv4保证最小MTU为576字节,IPv6为1,5001,280字节,推荐为1,500字节,区别基本是性能。由于大多数最终用户 LAN 段为 1,500 字节,因此它减少了用于存储状态的网络基础架构开销,因为需要更小尺寸的有效传统网络产生额外的碎片。

    对于 UDP,IPv4 标准中没有关于重建分段数据包的定义,这意味着每个平台可以以不同的方式处理它。 IPv6 断言分段和组装将始终发生在 IP 堆栈中,并且分段不会呈现给应用程序。

    【讨论】:

    • 对不起,IPv6 需要 1500 字节是不正确的。 RFC 2460 允许第 2 层 MTU 低至 1280 字节,请参阅第 5 节。
    • 为什么分片是 TCP 还是 UDP 很重要? IPv4 分片在 IP 层处理。
    • @Mike 数据报汇编无法保证。许多消息传递中间件堆栈包含专门用于在底层 IP 堆栈不保证时重构的代码。
    • 我的怀疑是你混淆了一个字节 stream 的 TCP 排序和重组;与 UDP(一种数据报服务)相反,根据定义,有效载荷是原子的。因此,可能会有平台代码来构建 UDP 消息流,但这与 IPv4 分片无关。
    • @Mike 实际上我可能将原始 IP 数据报与 UDP 数据报混合在一起,可以保证 UDP 数据报,但不能保证 IP 数据报。即在 IP 之上实现自定义协议时。
    猜你喜欢
    • 2016-01-19
    • 1970-01-01
    • 2013-09-16
    • 1970-01-01
    • 2015-11-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-01
    相关资源
    最近更新 更多