场景描述:
二层桥接环路或STP环路会导致严重的网络瘫痪,遇到这样的问题,您首先想到的就是拔掉一根冗余线路或关掉一个交换机接口来打破环路;但是治标还得治本,找到引起环路的根本原因才是最终的解决之道。
解决方法:
在将冗余线路或交换机重新加入网络之前,实施二层安全特性(safeguard)来防止STP环路,减轻再次发生会造成的影响。
1) 首先,确认正确的根网桥的位置。确定在根/核心交换机上连接汇聚层的接口上启用根防护(root guard),也可以在接入层的交换机的ACCESS端口上做此设置。这样做会防止根桥易主。切记,不要在运行HSRP的核心交换机之间的port-channel上配置根防护,根防护只能配置在不想让对端交换机变为根网桥的端口上。
2) 在接入层交换机的接入接口上配置portfast.
3) 在汇聚/接入层交换机上的所有接口上配置Loop guard。
4) 在汇聚/接入层交换机上的所有接口上配置BPDU guard。
5) 在所有光纤上联口上配置UDLDaggressive,因为单向链路会导致STP环路,这时,UDLD aggressive会关闭一个单向链路。
6) 从您的trunk中修剪不必要的VLAN。
当配置完root guard, loop guard, UDLD aggressive和BPDU guard,将链路恢复,再次检查是否有环路。
如果环路仍然存在,请采取以下措施:
1) 启用mac地址变动通知,该特性在6500/7600平台上默认关闭,而在其他平台3750/3560/2960上是默认打开的。
ITLABSW#(config)#mac-address-table notification mac-move
检测Log日志,查看是否有mac地址的变动,然后找出变动的端口,并通过mac地址找到源头。您需要关注以下几个方面:
2) 上游交换机是否有链路翻动(flapping),这有可能会导致生成树的重新汇聚。
3) 上游单向链路
4) 是否该交换机连接到了一个配置了portfast接口的接入层交换机上,如果是这样,试着关闭该接口来打破环路。
检查拓扑状态改变提醒TCN
当环路产生时,你会发现有大量的的TCN出现在网络中,我们有必要找到这些TCN的源头。我们可以从以下命令开始:
ITLABSW#sh spanning-tree detail | i ieee|occur|from|isexec
VLAN0001 isexecuting the rstp compatible Spanning Tree protocol Number of topology changes187927 last change occurred 00:01 ago <-time rec'd
fromPort-Channel12 <--interface that received the TCN
从这里,我们可以看到最后的TCN接收的端口和时间。您需要追踪TCN直到发现一个access端口或者一个不该发送TCN的端口。如果您发现这个端口是一个ACCESS端口,请试着关闭该端口看是否能打破环路。
4) 查看需要CPU转发的报文。您需要对发送到CPU的报文做分析,找到同一个发送源(不同平台有不同的方法)。如果这些报文是STP或CDP报文(或者发送到保留组播地址0100.0CCC.CCCX),您需要找出源mac地址是从哪学到的。
如果您发现在一台交换机上,同一个VLAN有两个转发端口,我们需要按下面的步骤进行:
1) 该交换机是否是该VLAN的根桥?应该是这台交换机为根桥吗?
2) 在该转发接口上是否在接收BPDU?需要抓包来看
3) 在转发接口上寻找单向链路
4) 关掉其中一个转发接口,看是否能打破环路
5) 查看接口是否输入的速率inputrate很高而输出的速率output rate很低
ITLABSW#sh int | i is up|rate
常见的引起STP环路的原因:
端口状态问题:
特别是检查被阻塞的端口的根端口,这些接口应该周期性的接收BPDU。可以通过show spanning-tree XX来查看,可以多次show该命令来查看该设备是否接收BPDU。
双工不匹配:
使用show interface XXstatus
端口流量过大:
接口的流量过大可能会丢弃某些重要的BPDU,从而造成环路。
Show interface XX中的packetsinput/output.
错误的报文
通过show interface XX,可以查看runts,giants, no buffer,CRC,frame,overrun和ignored counters等字段的值是否有增加。
CPU过高
通过show process cpu来查看,关于如果解决CPU过高的问题,请参看社区中的其他相关文章。
以下是关于STP的解决方法的一些链接,以供参考:
http://www.cisco.com/c/en/us/support/docs/lan-switching/spanning-tree-protocol/10556-16.html#brid_loop
http://www.cisco.com/c/en/us/support/docs/lan-switching/spanning-tree-protocol/10588-74.html
--------------原文来自Cisco Techzone和CCO上相关文档整理