在第一篇STP文章中,咱们只是就STP的建立做了一些了解:怎么选举根桥,怎么选举根端口,怎么选举指定端口以及阻塞那些端口。站在我们的视角来看每个交换机以及它的端口处于各自的角色,但站在交换机的视角来看问题,是不是会不一样呢?咱们今天就来聊聊STP协议下的交换机的五种状态,以及当网络中拓扑发生变化时(设备变动或链路变动等等),交换机又如何应对这些计划之外的意外?
表1 五种STP状态
这次站在交换机角度,来想想交换机每个接口在各个状态都要做些什么:
下面这张就是每个状态之间的切换流程图:

图1 五种STP状态切换
还记得上一篇咱们提到过3个与时间相关的字段吗?重新放到下面帮各位回忆一下:
表2 三个时间相关报文字段
Forward Delay字段也了从学习状态到转发状态的延迟时间,也就是说,运气差到无底线的情况下,Hello包刚发完,链路就出问题,那最后要多久才能稳定?(网络从变化到稳定我们叫做 网络收敛 ,反之我们叫 网络震荡 )
总时间 = Hello报文间隔(0~2秒) + 最大寿命(20秒) + 转发延迟间隔(15秒,侦听状态到学习状态) + 转发延迟间隔(15秒,学习状态到转发状态) = 50~52秒!!!
想想这50秒~52秒的收敛时间,是不是也太长了点?那有没有办法稍微快点?比如这个“最大寿命(Max Age)的20秒”,就不能“干掉”得快一点吗?咱们接下来就聊聊STP中怎么才能让收敛快那么一点。
还是先来一张拓扑:

图2 STP拓扑
然后咱们先介绍三种报文,TC报文,TCA报文与TCN报文:
回忆一下哈,忘记的话也可以看看上一篇文章中的报文格式:
表3 Flags字段
假如咱们把右侧的线路直接断掉会怎么样呢?就能看到下面这样的报文交换的过程(起手抓个包):

图3 拓扑变化后的STP报文通信流程
截一个TC报文出来(TCA就是把上面的Topology Change Acknowledgement置为1):

图4 捕获TC报文
相对而言,TCN报文就简洁多了,毕竟只是通知一下对端拓扑变化了而已,也截一个TCN出来看看:

图5 捕获TCN报文
那这三种报文有什么作用呢?这TCN将拓扑变化的消息传到根桥那里,然后根桥再下发TC来通知进行选举,然后咱们就成功得省去了最大寿命等待的20秒,是不是感觉稍微好一些了?
虽然说的确是借助TC、TCA、TCN省去了20秒,但依旧还有30秒~32秒的延迟,这也忍不了啊。所以为了改进STP,制定了STP的升级版本:RSTP(Rapid spanning Tree Protocol,快速生成树),这玩意儿能节省多少时间呢?下一篇文章咱们继续。