有关IPv6碎片的现代操作系统策略是什么?

时间:2011-08-10 23:26:33

标签: ipv6

我想知道 - 如果有人写一个能够处理IPv6的简单数据包分析器来分析在Windows( Vista 或更高版本)和 RHEL5 之间收集的流量机器 - 那里有什么机会看到碎片化的IPv6数据包,即这些操作系统会执行IPv6数据包的碎片化?

我知道技术上它可以存在并在RFC中描述,但考虑到IPv4时代已知的与碎片相关的安全风险 - 我想知道 - 为什么现代网络​​堆栈根本不会丢弃IP6碎片功能呢?为什么我们仍然需要它,隧道或什么?

更新:正如我上面提到的,IP碎片会带来安全风险。以下是支持该声明的链接:

4 个答案:

答案 0 :(得分:2)

从原始版本编辑: 好的,所以IPv6路由器不能对数据包进行分段,它们会被丢弃,并且返回的ICMPv6数据包太大了。这意味着终端节点在链路MTU上执行协商。然而,这一切都描述了链路层,根据OSI,较高层不应该关注较低层的所有细节。

考虑在IPv4硬件中可能支持高达9,000字节的jumbograms,但数据报大小可以达到64KB。使用TCP,操作系统可以使用底层链接大小并最佳地分割数据流,一切都很好。但是,对于UDP,在系统管理员注意到问题和重新配置软件之上处理此类协商的支持有限。

所以说你有一些固定数据报大小为8,000字节的软件,要从IPv4迁移到IPv6,如果端到端MTU只说1,500字节,或者丢弃所有东西,就可以选择分段。在一个很好的清理中,你要求完全删除碎片,但这会破坏应用程序,需要重写不仅仅是套接字init处理。

IPv6仍然是IP,我们的想法不是打破一切,所提出的变化虽然会降低影响性能的所有功能:建议最低1,500(如IPv4中的576,参见68 / 1,280 abs.min),而不是碎片途中。

Cisco页面详细说明了由于ASIC硬件引起的各种MTU限制:

http://www.cisco.com/en/US/products/hw/switches/ps700/products_configuration_example09186a008010edab.shtml

<强>实施例

在Linux 2.6.38-10上,通用IPv4IPv6。 IPv4显示Wireshark中的碎片,IPv6仅显示应用程序层碎片。

tcpdump显示了这一点:

11:13: IP aiko.hk.miru.hk.37505 > 239.192.0.1.7600: UDP, length 1972
11:13: IP aiko.hk.miru.hk.37505 > 239.192.0.1.7600: UDP, length 1117
11:15: IP6 fe80::230:1bff:feb7:a209.51993 > ff08::1.7600: UDP, length 1137

数据包是高于IPv4或IPv6的UDP以上的PGM。 3,000字节有效载荷,2,000字节MTU,因此应该存在IP分片和PGM碎片。

答案 1 :(得分:1)

在Linux中,如果上层提供的数据包大于发现的链路MTU,则IPv6数据包将被分段发送,这不会发生在TCP上。

答案 2 :(得分:1)

如果任何应用程序尝试使用IPv6通过标准以太网连接(禁用的巨型帧)生成UDP数据报,并且总有效负载(包括标头)大于1500字节,那么您将确保在IPv6处看到碎片层

堆栈可以选择更快地开始插入片段,从总容量(包括标头)开始,最小为1280字节,具体取决于路径MTU分析的结果。

答案 3 :(得分:0)

通过IPv6执行此操作,您将破解:

ICMP,UDP,TCP转发器,TCP实现,由于接收到的分组太大而在片段中重新发送先前发送的帧,并且任何其他IP层协议期望能够发送大小为&gt;的消息。 MTU缺乏协议特定的碎片层。

UDP特别大。部署的系统依赖于此工作,没有替代解决方案。您可能会破坏某些SIP或SNMP,但大多数情况下它可以配置并使用旋钮进行处理。其他协议(例如RADIUS)没有提供这样的选项,只是没有追索权。