Chinaunix首页 | 论坛 | 博客
  • 博客访问: 198514
  • 博文数量: 28
  • 博客积分: 1179
  • 博客等级: 上尉
  • 技术积分: 405
  • 用 户 组: 普通用户
  • 注册时间: 2008-04-21 22:51
文章分类

全部博文(28)

文章存档

2012年(4)

2011年(8)

2010年(2)

2009年(6)

2008年(8)

分类: LINUX

2011-11-09 21:11:33

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节点,需要将包进行转发。
阅读(4191) | 评论(1) | 转发(1) |
给主人留下些什么吧!~~

send_linux2011-11-11 09:57:50

感谢分享!