IPv4与IPv6协议分片重组的区别

6941阅读 0评论2011-11-11 send_linux
分类:

IPv4与IPv6分片重组的区别。分别从协议栈(无连接跟踪),以及连接跟踪来考虑。

协议栈:
host: IPv4重组后就提交给传输层了。 这点和IPv6相同。
router:(IPv4)IPv4转发分片包,不进行重组。如果分片包大于PMTU时,则仍然将分片包再分片,再转发。

       (IPv6)IPv6只转发分片包,绝对不重组。如果分片包大于PMTU,则给源端发送
          ICMPv6 'Too Big'消息。
          参见RFC2460, 第4.5,5节。
          URL:

连接跟踪:
host: (IPv4) 如果重组成功,则将重组后的完整的数据包提交给IPv4协议栈,查找路由(查找结果是                host),
          后再提交给传输层。 IPv4协议栈就不需要再分片了。
          如果重组失败,则将分片包保留在连接跟踪中,直到重组超时,清除这些收到的分片包。
          超时后,仍然需要给源端发送ICMP time excite 消息。

       (IPv6) 如果副本重组成功,则将重组后的副本数据包交给连接跟踪进行状态跟踪。
          而原始的分片将会被转发到IPv6协议栈。
          查找路由(查找结果是host),再重组并提交给传输层。这需要重组两次哦。
          如果重组失败,处理跟IPv4相同。

route:(ipv4) 如果原始包重组成功,则将重组后的完整的数据包提交给IPv4协议栈,查找路由
          (查找结果是router),再转发。
          如果大于PMTU,还会再分片的。
          如果重组失败,则将分片包保留在连接跟踪中,直到重组超时,清除这些收到的分片包。
          超时后,不需要给源端发送ICMP time excite 消息。

       (ipv6)如果副本重组成功,(重组后的完整的副本包将被连接跟踪处理) ,则将原始的分片包提交给
          IPv6协议栈, 查找路由(查找结果是router),再转发。
          如果大于PMTU,则给源端发送ICMPv6 'Too Big'消息。
          如果重组失败,与IPv4相同。

          参见RFC2460, 第4.5,5节。“ IPv6 router does not reassemble fragmented packets.”
          So I designed that nf_contrack_ipv6 forwards fragments to IPv6 stack even
          if nf_conntrack detects missing piece of fragments.
---------------------------------------------------------------------------------------
补充一点:(20101110)

自从引入了commit 70789d70(ipv6: discard overlapping fragment),该patch加入到2.6.37-rc1中,
IPv6,无论协议栈还是连接跟踪都支持了RFC5722,即禁止重组重叠的IPv6的分片。一旦收到重叠的IPv6分片,则将相关的所有的分片丢弃,并且增加IPSTATS_MIB_REASMFAILS计数值。 但是IPv4中仍然允许重组重叠的分片。

原因是IPv6的分片中可能含有其他扩展头部,扩展头部之后是传输层(tcp,udp)头部,伪造的重叠分片会更改原始的包中的数据。

P.S.
host是指,主机linux是目的地。
router是指,中间linux节点,需要将包进行转发。
上一篇:大家好,这是我的一篇用windows Liver写的博客!
下一篇:在 fedora 15 上安装 博通 BCM4313 无线网卡驱动