IP : IP 路由

ISIS MTU 不匹配问题分析

2010 年 9 月 22 日 - 原创文档
其他版本: PDFpdf | 反馈

目录

背景介绍
问题现象
故障分析
解决方案
相关命令
参考文档

背景介绍

在日常维护中,我们经常会遇到MTU mismatch的问题。有时尽管两端路由器或者交换机的端口MTU是一致的,但是还是会有大包PING不通,协议建立不起来的问题出现。这个时候,需要注意到,在设备间是否存在其他中间设备(如传输,L2交换机等。。),这些中间设备的MTU是否和两端路由设备一致。 下面让我们来看一下由于MTU mismatch 对于isis 协议的影响。

如上图所示,R1 R2为两台路由设备,端口的MTU设置成为9178.中间设备的MTU最小为9160.R1 R2 端口上的配置如下:

interface GigabitEthernet0/0/4
 dampening
 description To US-SJ-SJC-F-2.CN2 GE-1
 mtu 9178   <<<<<<<<<<<<<<<<<<<<<<<<<<<
 ip address 59.43.248.42 255.255.255.252
 no ip redirects
 no ip directed-broadcast
 no ip proxy-arp
 ip pim sparse-mode
 ip router isis cn2
 ip route-cache flow sampled input
 load-interval 30
 carrier-delay msec 60
 no negotiation auto
 mpls label protocol ldp
 tag-switching ip
 isis circuit-type level-1
 isis network point-to-point 
 isis metric 2000 level-1
 isis password 59.43.248.40
 isis hello-interval 3
 isis three-way-handshake ietf
 no isis hello padding   <<<<<<<<<<<<<<<<<<
 service-policy output pmOutput-Eo
 hold-queue 1500 in
 hold-queue 1500 out

ISIS 协议,缺省的行为时要按照端口的MTU大小去发送hello包的。这样做的好处有两点,1 在早期就能检测出大包传输不通的问题 2 MTU mismatch的问题。

当端口配置了“no isis hello padding”的时候,意味着取消了hello包被padding乘物理端口MTU size的行为,这样做的好处是能节省带宽。在一些比较新的IOS里,这个功能是被缺省打开的。下面让我们来分析一下MTU mismatch带来的问题。

问题现象

当网络一切正常,R1和R2之间的ISIS 已经UP后,客户基于业务需求,更改了R1和R2的MTU 从1500改为9178,之后发现一切正常。运行一段时间后,R1到中间设备的物理链路出现过一次flapping, 之后ISIS始终无法建立起来。客户检查配置,R1 R2两端MTU 都是9178。同时,端口上都已经enable 了“no isis hello padding”,但是邻居就是无法建立成功。客户将两端R1 和R2的MTU 重新设置回1500,ISIS 建立成功。最后,客户又将R1 R2的MTU从1500改回到9178, 发现ISIS还是UP的,业务恢复,一切正常。

故障分析

从上面的现象可以看出,显然这个问题是和MTU有一定关系的,首先从问题发生时的状态入手,可以看出MTU已经match了,disable了hello padding了,为何isis 的邻居还是建立不成功呢。 “no isis hello padding”工作的前提是isis邻居已经成功建立了,之后交互的hello包不在padding乘物理端口的MTU大小了,但是在ISIS邻居建立过程的前5个hello包,还是要被padding的,所以按照上图所示,前5个包,发出去的是9178,中间过程MTU是9160,过不去,这就导致了为什么isis的邻居建立不成功。后来客户把MTU调整回1500,hello 肯定是可以通过的,这样邻居就建立成功了,成功以后的hello 包都不在padding了,这也是为什么客户重新把MTU从1500调整回9178后,邻居没有断,依然是up的原因。

解决方案

  1. 调整 整个path的MTU值,使其可以支持R1 和R2的9178大小的包通过而不需要分片。
  2. 在R1 和R2物理端口下enable “no isis hello padding always “ , 注意,这是个隐藏命令,可以支持但是tab到。 这个命令可以让isis协议在建立初期的前5个hello包就不在padding。
  3. 使用 CLNS MTU 在R2 R1 的物理端口上,这个值应当小与或等于9160。CLNS MTU只会影响isis协议所使用的MTU值,对普通的IP业务没有影响。当没有设置的时候,缺省它是等于端口的物理MTU的。设置的时候也要小于或者等于实际物理端口的MTU。

相关命令

Show clns neighbor
Debug isis adj-packets
Show interface type X/Y/Z
Extend ping with specific Size (this method could help you to detect the max size which is 
supported by the whole path)

参考文档

MTU Mismatch Problem in IS-IS
Intermediate System-to-Intermediate System Protocol
CLNS 快速查阅手册