如何轻松定位STP故障
作为IEEE标准协议,STP具有兼容性好、网络规划要求低、配置简单等优势,被广泛应用于二层网络中。当然,用得多了大家碰到的问题也就多了,STP有哪些故障现象呢,这些故障又是怎么排除的呢?小编这次就结合几个实际的STP故障,和大家分享一下STP故障解决之道。
小贴士
小伙伴们注意啦,本文中所指的STP是指广义的STP哦,包括STP协议、RSTP协议、MSTP协议。当需要对三者进行区分时,分别会叙述为STP模式、RSTP模式、MSTP模式。
故障现象1:使能STP的网络拓扑中出现链路故障或链路故障恢复后,业务流量恢复需要超过30秒,即端口无法快速收敛
定位思路
遇到这种问题时,小编给大家总结了如下的定位思路:
1) 确认对端端口是否使能STP;
2) 检查端口是否工作在STP模式;
3) 检查端口的链路类型是否为点对点。
定位步骤
具体的定位步骤,请小伙伴们往下瞅:
步骤1:确认对端端口是否使能STP
终端、服务器都不支持STP协议,如果这些设备和交换机连接,建议在交换机的端口上执行命令stp edged-port enable 开启边缘端口属性或执行命令stp disable去使能STP。
否则,当用户插拔链路连接介质,或先执行shutdown,再执行undo shutdown,重启端口后,因对端端口不会发送STP的协议报文进行协商,导致交换机上的端口经过2倍的Forward Delay(默认为15秒)时间后才能正常转发报文。
步骤2:检查端口是否工作在STP模式
全局配置为RSTP/MSTP模式的设备,当端口接收到STP模式报文后,端口可以自动迁移到STP模式下工作。
通过命令display stp interface查看端口实际的工作模式(查看Port STP Mode字段哦):
![3eff29d83a81e807ef20227add24a203.png](https://i-blog.csdnimg.cn/blog_migrate/6362c10c1540ecbb8e70553255dffdef.jpeg)
由于STP模式不能提供快速迁移机制,端口状态变化后,需要等待2倍的Forward Delay(默认15秒)才能迁移到转发状态。
可以通过在交换机端口配置stp no-agreement-check命令来避免端口连接的上游设备模式为RSTP或者与MSTP实现存在私有性差异的厂商设备时,上游桥设备不能快速迁移问题。
当端口自动迁移到STP兼容工作模式后,以下情况端口无法自动迁移回原来的RSTP/MSTP模式,导致与其他运行RSTP/MSTP模式的设备无法互通。
· 运行STP模式的设备已关机或移走;
· 运行STP模式的设备修改为运行RSTP/MSTP模式。
因此需要在端口上执行stp mcheck命令,将端口手动迁移到RSTP/MSTP模式。
步骤3:检查端口链路类型是否为点对点
RSTP/MSTP模式提供了端口快速迁移机制:当两端均使能STP而且链路类型为点对点时,才能实现端口状态的快速迁移。
可以通过stp point-to-point { auto | force-false | force-true }命令配置链路类型,端口的链路类型默认为auto,即由RSTP/MSTP来检测与端口相连的链路是否是点对点链路,两端均工作在全双工模式是才可能成为点对点链路。
通过display stp interface查看端口的链路类型:
![c8d49d1499c133022df48d39dbe11da4.png](https://i-blog.csdnimg.cn/blog_migrate/3ef2cc914d917f059e31d41e9f7d2c7b.jpeg)
Config=auto表示使用stp point-to-point命令配置的值为auto,Active=true表示当前工作在点对点链路类型。
步骤4:如果以上步骤还不能解决问题,小伙伴们莫急,可以收集相关信息联系华为工程师处理。
小贴士
在这里提醒下小伙伴们,在使能STP之前,别忘了检查参与STP计算的端口是否使能了bpdu enable命令。具体的请参见下面的表格。
![c5ae24a721562540377c5e64e4e7fedc.png](https://i-blog.csdnimg.cn/blog_migrate/6301f801643a84cc03b375094733fc7b.jpeg)
另外,小伙伴们需要关注这种场景:因为中间设备或者传输的问题导致STP报文不能透传,这个可以通过display stp interface interface-type interface-number命令判断,查看BPDU Received计数。如果计数一直为零或者没有增加,则有可能是中间设备或者传输导致收不到STP报文。
故障现象2:使能STP的网络中,流量业务时断时续,设备CPU占用率高
定位思路
同样滴,小编给大家总结了如下的定位思路:
1) 端口是否持续收到TC报文;
2) 端口是否收到多种STP报文;
3) 设备是否存在报文攻击。
定位步骤
具体的定位步骤,请小伙伴们继续往下瞅:
步骤1:端口是否持续收到TC报文
执行命令display cpu-usage查看设备整机或接口板上占用CPU较高的任务,如果交换机接口板的PPI任务(适配层任务,维护芯片中各个接口的状态)CPU使用率较高,则排查端口是否持续收到大量TC报文。如果CPU利用率较高的任务中没有PPI任务,则按照步骤3进行处理。
通过如下命令行可查看端口收、发TC报文的情况:
· display stp tc-bpdu statistics:该命令从框式V100R006版本,盒式V100R005版本开始支持。
![9ececfe95e7e4bab09090b8b7a3eea93.png](https://i-blog.csdnimg.cn/blog_migrate/a937263de52ae9e66edb9aa02ee87776.jpeg)
· display stp topology-change: 该命令从框式V100R006版本,盒式V100R005版本开始支持。
![da59a6ba89263710455c6539c059f415.png](https://i-blog.csdnimg.cn/blog_migrate/4c701378ce21978d7cc21b8900240a81.jpeg)
如果通过以上排查,确认端口持续收到大量TC报文,小伙伴们可以通过使用stp tc-protection命令,使能交换机对TC报文的保护功能,实现对TC报文的限制,以达到对设备进行保护的目的。另外,还可以通过stp tc-protection threshold命令指定Hello Time时间内处理TC类型STP报文的次数。
在收到TC报文转发刷新转发表项时,STP的收敛方式不同,交换机对ARP表项的处理方式不同,建议配置为normal:
· 如果STP的收敛方式配置为fast,交换机将ARP表中的相关表项直接删除。
· 如果STP的收敛方式配置为normal,交换机将ARP表中相关表项的剩余存活时间置为0,对这些表项进行老化处理。
如果使能TC保护、修改STP收敛方式后,PPI任务的CPU利用率仍然较高,小伙伴们莫着急,请继续按照步骤2进行处理。
步骤2:端口是否收到多种STP报文
可以通过display stp history命令查看端口角色计算的历史记录,如果端口的角色不断更新,表明端口收到来自不同设备的报文,说明组网存在问题:
![033dd50c4ca07f60da3b7bf39d4eeec5.png](https://i-blog.csdnimg.cn/blog_migrate/f941465454caedae2d9f72b291c73522.jpeg)
同时,打开以下STP debug开关,采集故障期间交互的STP报文和事件信息,排除非法的STP报文。
![5668ae5c0ce606586f34bd550c8c1d4c.png](https://i-blog.csdnimg.cn/blog_migrate/b88f7f917f95cbef815534ace5f21ab4.jpeg)
![a72be90a10ee74743c28a7baa389726f.png](https://i-blog.csdnimg.cn/blog_migrate/658a78f914026ea9e2706b3533f1ccda.jpeg)
步骤3设备是否存在报文攻击
网络中出现链路故障或报文攻击,可能导致端口长时间接收不到对端发送的STP协议报文,发生STP切换状态,例如会产生如下日志:
Jul 26 2012 02:26:40 Switch %%01MSTP/6/SET_PORT_DISCARDING(l):In MSTP process 0 instance 0, MSTP set port GigabitEthernet4/0/10 state as discarding.
Jul 26 2012 02:26:43 Switch %%01MSTP/6/SET_PORT_FORWARDING(l):In MSTP process 0 instance 0, MSTP set port GigabitEthernet4/0/10 state as forwarding.
IFNET/4/LINK_STATE:The line protocol [line-protocol] on the interface [interface-name] has entered the [state] state.
如果链路正常,通过display stp interface interface-type interface-number查看BPDU Received计数。
![66a68aa39b6d25b999fde500934d78b5.png](https://i-blog.csdnimg.cn/blog_migrate/748df72ae1572849825532ef439477ce.jpeg)
如果计数没有周期增长,且端口下BPDU配置正确,则在端口入方向绑定流策略对STP报文进行流量统计,以确认对端设备是否周期发送了STP协议报文。配置和查看方法如下:
· 配置流策略:
![692d4c2a62edd3d4c4b59db0b67fe776.png](https://i-blog.csdnimg.cn/blog_migrate/f4f2b0309babf9e6b77095541c0603fd.jpeg)
· 查看流量统计:
![3087e93a74c80a4344eeb3e66e86829c.png](https://i-blog.csdnimg.cn/blog_migrate/fbc1657476d53e2abf1aa5bba5ce6b8d.jpeg)
· 如果通过流量统计查看到STP报文计数在周期增加,但使用命令display stp interface interface-type interface-number查看BPDU Received计数没有增加,那么需要再使用命令display cpu-defend statistics all查看是否有其他大量报文在上送CPU处理。
![f03cb9407c6d500b427397bc9cae4d5b.png](https://i-blog.csdnimg.cn/blog_migrate/bcefc1d07e02bf3d6bf307f9cc02f257.jpeg)
小贴士
小伙伴们注意啦:在不同形态、不同版本的交换机上,使用display cpu-defend statistics all命令查看到的报文类型可能不同哦。
· 交换机通过CPCAR机制对上送控制平面的报文进行业务细化,分别进行限速与队列调度,以保护控制平面的安全。如果某些协议报文已经超过CPCAR的阈值出现丢包,通过命令display cpu-defend configuration all查看这些协议报文所在的队列是否与STP报文在同一队列:
![b3cb6c4558aa1e318d0236516c7ac156.png](https://i-blog.csdnimg.cn/blog_migrate/aa5ce8d1dddd0cfd88352e80eeb1d737.jpeg)