IPv6 Path MTU
1、产生背景
在IPv4中,报文如果过大,必须要分片进行转发,所以在每一个节点发送报文之前,设备都会根据发送接口的最大传输单元MTU来对报文进行分片,但是在IPv6中,为了减少中间转发设备的压力,中间转发设备不对IPv6报文进行分片,报文的分片将在源节点进行;当中间转发设备的接口收到一个报文后,如果发现报文长度比转发接口的MTU值大,则会将其丢弃,同时将转发接口的MTU值通过ICMPv6报文中的Packet Too Big消息发送给源主机,源端主机以该值重新发送IPv6报文,这样带来了额外流量开销,PMTU发现协议可以动态发现整条传输链路上各链路的MTU值,减少由于重传带来的额外流量开销;
PMTU协议是通过ICMPv6的Packet Too Big报文来完成的,首先源节点假设PMTU就是其出接口的MTU,发出一个试探性的报文,当转发路径上存在一个小于当前假设的PMTU时,转发设备就会向源节点发送Packet Too Big报文,并且携带自己的MTU值,此后源节点将PMTU的假设值更改为新收到的MTU值继续发送报文,如此反复,直到报文到达目的地之后,源节点就能知道到达目的地址的PMTU了;
2、工作过程
PMTU工作过程如下图所示:
整条传输路径需要通过四条链路,每条链路的MTU分别是1500、1500、1400、1300,当源节点发送一个分片报文的时候,首先按照PMTU为1500进行分片并发送分片报文,当到达MTU为1400的出接口时,路由器返回Packet Too Big报文,同时携带MTU值为1400的信息,源节点收到之后会将报文重新按照PMTU1400进行分片再次发送一个分片报文,当分片报文到达MTU值为1300的出接口时,返回Packet Too Big报文,携带MTU值为1300的信息,之后源节点重新按照PMTU为1300进行分片并发送分片报文,最终达到目的地,这样就找到了该路径的PMTU;
IPv6要求链路层所支持的最小MTU为1280,;