STP故障
1、根桥故障
在稳定的STP拓扑里面,非根桥会定期收到来自根桥的BPDU报文,如果根桥发生了故障,停止发送BPDU报文,下游交换机就无法收到来自根桥的BPDU报文。如果下游交换设备在MaxAge(default=20s)内没有收到BPDU报文,就会导致已经收到的BPDU报文老化过期,此时,非根端口开始互相发送配置BPDU报文,重新进行根桥选举。根桥故障会导致50s左右的恢复时间,恢复时间约等于MaxAge+2*ForwadDelay。
2、链路故障
2.1 直连链路故障
当SW3的RP端口失效后,对于SW3来说需要开启其AP端口,所以对于SW3属于直连链路故障,则其Alternate端口会迁移到Listening、learning、forwarding状态,经过两倍的forwarddelay后恢复到转发状态,即30s时间收敛。
2.2 非直连链路故障
站在AP的角度考虑
当SW2的RP端口失效后,对于SW3来说不是直连链路故障,无法直接检测到,所以属于非直接链路故障。此时,SW2在RP失效后,无法再接收到根桥的信息,所以此时SW2会认为自己为根桥,会向SW3通过DP端口发送自身的配置BPDU,但是由于SW3仍然保存有之前根桥的BPDU所以在接受到SW2的次优BPDU时不会处理,但是当之前的根桥的BPDU在MAX age20s失效后就会处理该次优BPDU,但是由于SW3仍然通过RP接受到根桥的配置BPDU,所以会发送给SW2最优的根桥BPDU(注:华为设备的STP状态下接收到次优的BPDU会立即回送最优的BPDU无需等待MaxAge。),SW2和SW3通过这次BPDU的交互可以计算出SW2的DP应该为RP,SW3的AP应该为DP,所以此时端口角色切换完成,但是DP和RP要进入转发状态还需要等待两个转发延时即30s,所以出现此故障需要Max Age加上两倍的Forward Delay 即50s的时间。
拓扑改变导致MAC地址表错误
STP协议MAC地址表刷新机制:
- MAC地址表的默认老化时间是300s,在这段时间内,SWB无法将数据从G0/0/2端口转发给主机B
- SWC发现自己的根端口失效,发送TCN BPDU给根桥。TCN通常从AP或RP发出,
- 上游交换机收到后,回送TCA BPDU。并且继续向上游发送TCN BPDU,直到到达根桥。
- 根桥收到后全网发送TC BPDU。持续发送35s。(因为这段时间生成树不稳定,交换机时时刻刻学习到mac地址。)
- 下游交换机收到TC BPDU后将自身除边缘端口外的所以端口的MAC地址表的老化时间强制设置为15s.
- 边缘端口标准STP协议是不支持的,但是华为的STP协议支持边缘端口的设置。
什么情况下交换机会认为拓扑发生了变化?
-
生成树协议最早认为任何端口进入到forwarding状态或disable状态时,认为STP拓扑发生变化。
-
后来认为这种机制比较复杂(比如AP端口直连链路变化或者边缘设备的链路发生变化)
-
后来华为和思科对拓扑发生变化的定义做出优化,接口发送TCN,发送TCN的情况:
-
1 当端口进入到forwarding状态认为拓扑发生变化,而DP端口进入disable状态不认为拓扑发生变化。
-
2 RP失效会认为拓扑发生变化
TC会提前导致MAC老化,空闲的(学到了,暂时没有通信),本来300s的老化时间。本来已知单播地址的数据帧会变成未知单播地址的数据帧,会导致在网络内泛洪。网络性能变差。
怎么解决?
边缘端口。边缘端口进入forwarding不会发TCN BPDU。收到TC BPDU后mac表不清空。
一般将连接三层设备(路由器或防火墙或终端电脑)的端口设置为边缘端口。stp edged-port enable