实验名称:PMTU实验
YESLAB学员:张成才
实验目的
1、分析并验证PMTU的原理及过程。
实验拓扑
实验步骤
1:基本的IP地址配置(本步骤省略)
2:IPv6的报文头分为基本报头和扩展报头,并将IP分配扩展的功能单独放在了分片报头中,基本报头不再提供分片信息,并且由于IPv6的源端到目的端的中间设备节点不处理分片报头,所以IPv6分片和重组只在源端和目的端进行,由于整条路径上的MTU可能有大有小,而PTMU机制正是用来通知源端在到达目的端的最小MTU是多少,源端记录下该MTU,再发送数据报文的时候以这个MTU对数据包进行分片,到底目的节点后进行重组,中间节点只负责快速转发报文。
R1、R3、R5、R6全网之间运行OSPFv3,路由可达。
在R6上ping R3的loopback0地址:
IPv6基本报头固定40bytes,ICMPv6头部8bytes,接口MTU默认1500,所以如果保持接口默认MTU 1500的话,数据部分超过1452即需要分片,分别以数据大小1452和1453 ping R3的loopback0
可以发现当数据大小为1453bytes是确实进行了分片,因为R6出口MTU即是默认的1500所以直接进行分片发送。
将AR1的G0/0/0接口的IPV6 MTU改为1400,同时忽略OSPFv3 MTU检查:
在AR6 以1452bytes ping2033::3,只ping一个包
不通,通过抓包可以发现R1的G0/0/1接口回复了一个Packet too big的ICMP报文
此时在设备R6中便可以发现有一条PMTU的记录
此时再在R6上以上述参数ping2033::3,便会发现数据包以MTU=1400进行分片
此时AR6 以1452bytes ping2055::5,只ping一个包
不同,查看PMTU的记录:
可以发现有两条记录,分别针对两个目的地址,所以PTMU是针对不同的目的地址分别记录的,并且是单向的。
将R3的G0/0/1接口的MTU修改为1300,同时忽略OSPFv3 MTU检查,在AR6 以1452bytes ping2055::5,只ping一个包
R3的G0/0/1接口回复Packet too big消息,此时再查看R6的PMTU记录:
此时再ping 2055::5,数据包将以MTU1300进行分片
当R6上记录的PMTU都消失后,在R6上以1452bytes ping2055::5的时候,R6将以自己的出接口MTU1500发送数据,当数据包到达R1的G0/0/0接口发现数据包超过接口MTU,于是R1回复Packet too big并告知MTU=1400,这样R6会再以MTU 1400对数据包进行分片发送,当数据包到达R3的G0/0/1的时候,R3发现数据包超过接口MTU,于是R3回复Packet too big并告知R6 MTU=1300,这样R6会再以MTU=1300对数据进行分片发送,直到目的节点,这样R6便确定了最终到达目的地的最小MTU为1300,之后的数据包都以1300进行分配发送。
实验心得
1、PMTU使用ICMP报文,但不属于NDP协议的一部分,因为PMTU使用的ICMP报文的type=2属于差错控制报文。
2、MTU属于IP层的信息,修改接口的MTU要区分IPv4和IPv6
3、PMTU是单向的,发生在数据包的出接口上。针对不同的目的地址可能有不同的MTU。
4、RFC推荐PMTU记录保存时间为10分钟,因为路径上的MTU可能会发生变动,当路径上的最小MTU变得更小的时候可以再通过PMTU检测到,但当路径上的最小MTU变大的时候,却没有相关机制来告知源节点,如果源节点继续以原来记录的较小MTU发送数据会造成资源的浪费,所以当源端记录的PMTU超时后,源端会以自己的出接口MTU来发送报文,并重新进行PMTU探测。
5、RFC规定IPv6最小MTU为1280。
获取更多实验报告,请联系
来源:51CTO
作者:Hansl2100
链接:https://blog.51cto.com/14476517/2472883