TAG:
协议栈: ICMPv6 'Too Big'消息。
参见RFC2460, 第4.5,5节。
(shanwei)URL:http://conferences.sigcomm.org/sigcomm/2007/ipv6/1569042997.pdf 连接跟踪: 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节点,需要将包进行转发。 |