15.STP状态和计时器及拓扑变化
STP状态和计时器
运行STP协议的设备上端口状态有5种:
Forwarding:转发状态。端口既可转发用户流量也可转发BPDU报文, 只有根端口或指定端口才能进入Forwarding状态。
Learning:学习状态。端口可根据收到的用户流量构建MAC地址表,但不转发用户流量。 增加Learning状态是为了防止临时环路。
Listening:侦听状态。端口可以转发BPDU报文, 但不能转发用户流量。
Blocking:阻塞状态。端口仅仅能接收并处理BPDU, 不能转发BPDU, 也不能转发用户流量。 此状态是预备端口的最终状态。
Disabled:禁用状态。端口既不处理和转发BPDU报文, 也不转发用户流量。
端口状态转换如下:
1、端口初始化或者使能
2、端口被选为根端口或者指定端口
3、端口不在是根端口或者指定端口
4、forward delay计时器超时
5、端口禁用或者链路失效
STP协议中包含一些重要的时间参数:
Hello Time是指运行STP协议的设备发送配置BPDU的时间间隔, 用于检测链路是否存在故障。 交换机每隔Hello Time时间会向周围的交换机发送配置BPDU报文, 以确认链路是否存在故障。 当网络拓扑稳定后, 该值只有在根桥上修改才有效。
Message Age是从根桥发送到当前交换机接收到BPDU的总时间,包括传输延时等。如果配置BPDU是根桥发出的, 则Message Age为0。 实际实现中, 配置BPDU报文每经过一个交换机, Message Age增加1。
Max Age是指BPDU报文的老化时间, 可在根桥上通过命令人为改动这个值。 MaxAge通过配置BPDU报文的传递, 可以保证Max Age在整网中一致。 非根桥设备收到配置BPDU报文后, 会将报文中的Message Age和Max Age进行比较:如果Message Age小于等于Max Age, 则该非根桥设备会继续转发配置BPDU报文。 如果Message Age大于MaxAge, 则该配置BPDU报文将被老化掉。 该非根桥设备将直接丢弃该配置BPDU, 并认为是网络直径过大, 导致了根桥连接失败。
ST拓扑变化情况:
本节内容主要是来讲解生成树是如何收敛,然后完成故障切换的
1、根桥故障。非根网桥会在BPDU老化时间超时后开始根桥的重新选举
在稳定的STP拓扑里, 非根桥会定期收到来自根桥的BPDU报文。 如果根桥发生了故障, 停止发送BPDU报文, 下游交换机就无法收到来自根桥的BPDU报文。 如果下游交换机一直收不到BPDU报文, Max Age定时器就会超时( Max Age的默认值为20秒) , 从而导致已经收到的BPDU报文失效, 此时, 非根交换机会互相发送配置BPDU报文, 重新选举新的根桥。 根桥故障会导致50秒左右的恢复时间, 恢复时间约等于Max Age加上两倍的Forward Delay收敛时间。
2、直连链路故障。SWB检测到直连链路物理故障后,会将预备端口转换为根端口,新的根端口会在30秒后恢复到转发状态
SWA和SWB使用了两条链路互连, 其中一条是主用链路, 另外一条是备份链路。 生成树正常收敛之后, 如果SWB检测到根端口的链路发生物理故障, 则其Alternate端口会迁移到Listening、 Learning、Forwarding状态, 经过两倍的Forward Delay后恢复到转发状态。
3、非直连链路出现故障。SWC的预备端口恢复到转发状态大约需要50秒
SWB与SWA之间的链路发生了某种故障(非物理层故障) ,SWB因此一直收不到来自SWA的BPDU报文。 等待Max Age定时器超时后, SWB会认为根桥SWA不再有效, 并认为自己是根桥, 于是开始发送自己的BPDU报文给SWC, 通知SWC自己作为新的根桥。在此期间,由于SWC的Alternate端口再也不能收到包含原根桥ID的BPDU报文。 其MaxAge定时器超时后, SWC会切换Alternate端口为指定端口并且转发来自其根端口的BPDU报文给SWB。 所以, Max Age定时器超时后,SWB、 SWC几乎同时会收到对方发来的BPDU。 经过STP重新计算后,SWB放弃宣称自己是根桥并重新确定端口角色。 非直连链路故障后, 由于需要等待Max Age加上两倍的Forward Delay时间, 端口需要大约50秒才能恢复到转发状态。
4、拓扑改变会导致MAC地址表产生错误。
MAC地址表的默认老化时间是300秒,在这段时间内,SWB无法将数据从G0/0/2端口转发给主机B。那么如何来解决这个问题呢?
拓扑变化过程中, 根桥通过TCN BPDU报文获知生成树拓扑里发生了故障。 根桥生成TC用来通知其他交换机加速老化现有的MAC地址表项。拓扑变更以及MAC地址表项更新的具体过程如下:
- SWC感知到网络拓扑发生变化后, 会不间断地向SWB发送TCNBPDU报文。
- SWB收到SWC发来的TCN BPDU报文后, 会把配置BPDU报文中的Flags的TCA位设置1, 然后发送给SWC, 告知SWC停止发送TCN BPDU报文。
- SWB向根桥转发TCN BPDU报文。
- SWA把配置BPDU报文中的Flags的TC位设置为1后发送, 通知下游设备把MAC地址表项老化时间由默认的300秒修改为ForwardDelay的时间(默认为15秒) 。
- 最多等待15秒之后, SWB中的错误MAC地址表项会被自动清除。 此后, SWB就能重新开始MAC表项的学习及转发操作。
- 原文作者:老鱼干🦈
- 原文链接://www.tinyfish.top:80/post/network/15.STP%E7%8A%B6%E6%80%81%E5%92%8C%E8%AE%A1%E6%97%B6%E5%99%A8%E5%8F%8A%E6%8B%93%E6%89%91%E5%8F%98%E5%8C%96/
- 版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议. 进行许可,非商业转载请注明出处(作者,原文链接),商业转载请联系作者获得授权。