Mstp的常用调试命令及说明
RGNOS10.1的mstp提供了一些调试命令供故障跟踪、分析之用。
特权模式下输入如下命令
S2924G#debug mstp ?
all all-'debug all'/not all-only close 'debug all'
event mstp event debug information
init mstp init debug information
portinfo mstp portinfo debug information
protomigrat mstp protomigrat debug information
receive mstp packet receive debug information
roletran mstp roletran debug information
rx mstp rx packet debug information
statetran mstp statetran debug information
topochange mstp topoly change debug information
transmit mstp packet transmit debug information
tx mstp tx packet debug information
其中rx、tx、event、totochange四个选项可以供一线及测试人员使用,其它几个选项由于涉及到内部实现问题,暂不建议外部使用。下面对上述四个调试选项进行解释。
rx:
mstp的收包调试信息。利用该选项,可以跟踪当前设备的mstp是否可以收到bpdu报文、收到什么样的bpdu报文以及在那个端口上收报bpdu报文。例如
1:14:36:39 S2924G: %7:mstp rx:port[GigabitEthernet 0/16] rcvd MSTP bpdu?收到bpdu
1:14:36:39 S2924G: %7:mstp rx:port[GigabitEthernet 0/16] rcvd valid bpdu?该bpdu是可用的
上述调试信息表示当前设备在gi0/16收到了一个可用的bpdu报文,在网络稳定的情况下,该信息应该是每隔一个hello时间打印一次
tx:
mstp的收包调试信息。利用该选项,可以跟踪当前设备的mstp是否有向外发送bpdu报文以及往那些端口发送。 例如
1:14:41:11 S2924G: %7:mstp tx:tx MSTP BPDU at port GigabitEthernet 0/24
上述调试信息表示当前设备在向gi0/24发送了一个bpdu报文。在网络稳定的情况下,该信息应该是每隔一个hello时间打印一次
event:
mstp的事件调试信息。Mstp关心的一些系统事件包括:端口的up/down、vlan的创建删除、ap的创建删除、端口的层次属性变化(包括端口在switchpor和routedport间的切换,端口在switchport和1q tunnel port间的切换)。利用该选项,可以跟踪系统的事件变换是否有被mstp处理。例如我们将gi0/16口的网线拔掉,通过debug mstp event,我们可以看到如下信息:
1:14:42:43 S2924G: %7:mstp event:linknotify port[GigabitEthernet 0/16],event = 0,link = 0
上述信息表明:
gi0/16的端口link状态发生变化(event=0表示端口link状态发生变化;event=8表示端口的trunk属性发生变化,比如由switchport变成1q tunnel;event=9表示端口在switchport和no switchport之间变化),状态变为down(link=0表示端口down;link=1表示up);
该信息通常用于跟踪端口up/down以及配置路由口时,mstp是否执行了正确的处理。
topochange:
mstp的拓扑变换调试信息。利用该调试命令,可以跟踪当前设备的mstp发生了什么样的拓扑变换。可跟踪的拓扑变化包括:端口的角色变化、端口的转发状态变化、端口的mac表删除动作以及在那个实例里面发生变化。例如我们将一台pc直连到开启了mstp的设备gi0/24端口,通过debug mstp topochange打印了如下信息:
1:14:58:56 S2924G: %7:mstp topo:GigabitEthernet 0/24 select role DesignatedPort in msti 0!
该端口被选为instance0里面的DesignatedPort
1:14:58:56 S2924G: %7:mstp topo:ssp port state notify.set port GigabitEthernet 0/24 state 2,mstid 0
设置该端口在instance 0里面的转发状态为2,也就是learning状态
1:14:58:56 S2924G: %7:mstp topo:ssp port state notify.set port GigabitEthernet 0/24 state 2,mstid 1
在instance1中的转发状态为learning
1:14:59:11 S2924G: %7:mstp topo:port[GigabitEthernet 0/24] change state discarding to forwarding
该端口进入forwarding状态
1:14:59:11 S2924G: %7:mstp topo:ssp port state notify.set port GigabitEthernet 0/24 state 3,mstid 0
更新为转发状态,3表示的就是转发状态
1:14:59:11 S2924G: %7:mstp topo:port[GigabitEthernet 0/24] change state discarding to forwarding
1:14:59:11 S2924G: %7:mstp topo:ssp port state notify.set port GigabitEthernet 0/24 state 3,mstid 1
1:14:59:12 S2924G: %7:2007-1-12 10:28:40 topochange:topology is changed
到这里界面才打印拓扑变化
Mstp有哪些常见故障
Mstp是一个拓扑计算协议,因此mstp的常见故障都集中在拓扑相关的特性上。比如:
1. 根桥的选择和实际的要求不一致(根桥、上游转发网桥等信息错误)
2. 设备发生意料之外的拓扑震荡(也就是在我们认为不应该震荡的时候发生震荡了),外在表现就是打印“topochange:topology is changed”、“NEWROOT:new root is produced”
3. 端口的角色选取和实际要求的不一致(有六种端口角色:masterport、designatedPort、rootPort、backupPort、alternatePort、disableport,其中masterport只在mstp模式下才可能出现,disableport表示down掉的端口。端口角色具体定义请参看802.1s-2002 13.3章节)
4. 端口的转发状态和实际的要求不一致(有三种转发状态:forwarding、learning、discarding。这里说明一点,标准中定义的listening状态在显示上我们将其纳入了learning状态)
5. 网络出现环路(也就是在一个物理环路上面,所有接入环的端口的转发状态都是forwarding)
上述常见故障都有哪些常见原因
造成上述故障的原因分外在和内在。内在就是生成树协议的实现上可能存在bug或设备已经处于故障状态。外在就是生成树协议的一些外在运行条件出现了异常。本文档只讨论外在异常情况。
生成树协议有如下两个外在运行条件:用户配置、BPDU收发。
出现异常一般都是由于上述两个条件发生错误导致的。
1. 用户配置方面,常见的有:
a) mstp模式下vlan和instance配置错误导致设备不能在同一个mstp域里面,或者不同设备间配置了不同的生成树模式,导致出现了一些和预期不一样的效果。
b) 端口的vlan remove配置错误导致数据的实际转发效果不符合instance<->vlan映射关系的预期效果
c) 用户错误地配置了bpdufilter导致交换机无法正确地接收和发送bpdu,从而导致拓扑计算异常
d) Instance的cost、priority配置不当,端口的cost、priority配置不当等造成生成树的拓扑计算错误
2. 交换机无法在端口上收到bpdu报文或者无法在端口上发出bpdu报文或者是收到bpdu报文攻击。
引起交换机无法在端口上接收bpdu的原因一般有如下几种原因:
a) 用户配置了bpdufilter
b) 当前设备繁忙或网络报文风暴导致bpdu报文无法接收(比如设备的cpu利用率高或这是链路带宽被占满)
c) 上游的交换机(这里上游的意思是指生成树协议里面的designated bridge)出现异常无法发出bpdu报文
d) 在高端设备上,由于线卡和管理板间的通信出现了故障
引起交换机无法在端口上发出bpdu的原因一般有如下几种原因:
a) 用户配置了bpdufilter
b) 端口是路由口或者是1q tunnel口
c) 硬件的link状态和mstp的软件link状态不一致
bpdu攻击比较少见,一般是一些恶意用户构造BPDU报文攻击网络造成网络的拓扑振荡
如何定位上述的几个常见故障
1. 首先请用户先仔细阅读RGNOS系列软件提供的交换机配置指南和命令参考,特别是生成树协议部分,并分析当前的设备配置是否有误
2. 如果是根桥选错的问题
在排除了用户配置上错误的可能性之后,应重点分析当前设备是否可以正常接收BPDU以及接收的bpdu是否正确。采用如下步骤:
a) 先判断是哪个instance的根桥选择出错了,然后根据配置先罗列出该instance理论上的根桥的mac地址和本机上该instance实际选出的根桥的mac地址。方法就查看是show spanning-tree里面的信息。
b) 根据上面获取的桥地址再结合网络拓扑,罗列本交换机理论上应该接收到bpdu的端口
c) 通过debug mstp rx判断当前交换机是否在我们所要求的端口上捕获到了bpdu。
d) 通常这种故障都是由于bpdu无法接收导致的,或者是间歇性地接收,且间隔超过了3倍的hello事件,导致根桥切换。
e) 如果报文都有接收,则建议通过端口镜像捕获端口接收到的bpdu,分析报文的内容。Bpdu内容请参考802.1s-2002
3. 如果是端口角色错误
常见的是rootport变成designatedPort,或者是alternateport变成designatedPort。常见的原因是这些端口无法在3倍的hello时间内获得上游网桥的bpdu导致端口的信息老化进而发生端口角色重计算。如果是rootport超时,会造成根桥震荡。如果是alternateport超时,则会造成端口转发状态变化。
这个问题由于经常遇到,所以特别需要关注,利用debug mstp rx调试命令可以比较有效的分析出是否是由于端口无法接收到bpud导致的。
另外端口转发状态错误或这是网络出现环路,常见的也都是由于端口角色错误而导致的,基本的排查思路和这里描述的是一样的。
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请
点击举报。