加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

[转载]【IPv6】基于ICMPv6的PMTUD

(2017-08-01 11:59:48)
标签:

转载

分类: CCIETEA

  • PMTU就是路径上的最小接口MTU。
  • PMTUD的主要目的是发现路径上的MTU,当数据包发向目的地时避免分段。然后源节点可以使用发现到的最大MTU与目的地节点进行通信,这样可以避免数据包在从源传输到目的的过程之中,被中途的路由器分片,而导致性能的下降。
  • 因此IPv6的分片不是在中间路由器上进行的,仅当路径MTU比欲传送的数据包小的时候,由源节点自己对数据包进行分片。

在RFC1981中定义了PMTU发现协议。IPv6 PMUTD使用ICMPv6 Type 2消息。典型过程如下:
 

  1. 首先Source用1500字节作为MTU向目标节点发送一个IPv6数据包
  2. 中间路由器A意识到数据包过大,MTU为1400,于是回复一个ICMPv6 type=2消息向Source应答,在该ICMPv6消息中指定较小的MTU=1400
  3. Source开始使用MTU=1400发送IPv6数据包,该数据包到了B
  4. 然而B意识到本地接口MTU为1300,于是回复一个ICMPv6 type=2消息向Source应答
  5. Source开始使用MTU=1300发送IPv6数据包,该数据包顺利到达了目的地。
  6. Source和Destination之间的会话被建立起来。

注意:
  • PMTU,指的是单向的,沿路上的数据包出接口MTU中最小的。
  • IPv6要求的链路层所支持的MTU最小为1280bytes
  • 用IPv6 PMTUD发现的MTU值被源节点缓存,使用CISCO IOS,可以用show ipv6 mtu来显示每个缓存的目的地PMTUD值

测试:
 

1.准备工作

  完成环境的搭建及设备的基本配置,保证全网互通。
  R1去ping R4,能够ping通。

2.实验测试

现在,将R2的Fa1/0口的接口ipv6 MTU修改为1400字节(上图中默认接口IPv6 MTU都是1500字节):
Ipv6 mtu 1400

完成后,在R2上简单的show一下:
R2#show ipv6 interface f1/0
FastEthernet1/0 is up, line protocol is up
  IPv6 is enabled, link-local address is FE80::CE01:CFF:FEF0:10 
  Global unicast address(es):
    2023::2, subnet is 2023::/64 
  Joined group address(es):
    FF02::1
    FF02::2
    FF02::5
    FF02::6
    FF02::1:FF00:2
    FF02::1:FFF0:10
  MTU is 1400 bytes
……
现在,我们再到R1上,
R1#ping 2034::4 repeat 1 size 1500          !! 让R1产生一个报文大小为1500的包,发给R4
Type escape sequence to abort.
Sending 1, 1500-byte ICMP Echos to 2034::4, timeout is 2 seconds:
B
结果不通,因为报文在传递到R2时,超出了R2 Fa1/0口的MTU,因此R2回送一个TYPE=2(packet too big)的ICMPv6消息给R1。在这个回送给R1的ICMPv6消息中,包含允许的MTU=1400,以便告知R1,后续发送的报文不要超过1400字节。这个过程抓包如下:
 

其中,R2回送给R1的ICMPv6差错消息如下:
 

此时,在R1上进一步查看一下:
R1#sh ipv6 mtu
MTU     Since    Source Address       Destination Address
1400    00:00:27  2012::1             2034::4
我们发现,R1创建了一条缓存,标识从2012::1到2034::4,PMTU=1400,因此R1在后续发送给2034::4的报文中,如果超出1400字节,R1自己就会进行分片,例如我们再做测试,在R1上继续ping 2034::4,报文大小为1500字节,则:
 

上图中,前面两个包就是R1发送给R4的ICMPv6报文的两个分片,第三个报文是R4的reply包
所以这样R1发送大包给R4的时候,就不会有问题了。直接在R1源头这就分片。当然,我们可以继续试验,在R3的Fa1/0接口上将IPv6 MTU设置为1300字节,然后继续R1去ping大包给R4,最终R1上的缓存条目,PMTU会变成1300字节。






红茶三杯
网络工程 | 项目管理 | IT服务管理 | CCIE培训
学习 沉淀 成长 分享



0

  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有