零、前言
在第一篇STP文章中,咱们只是就STP的建立做了一些了解:怎么选举根桥,怎么选举根端口,怎么选举指定端口以及阻塞那些端口。站在咱们的视角,咱们看到了每个交换机以及它的端口处于各自的角色,但咱们站在交换机的视角来看问题,是不是会不一样呢?咱们今天就来聊聊STP协议下的交换机的五种状态,以及当网络中拓扑发生变化时(设备变动或链路变动等等),交换机又如何应对这些计划之外的意外?
一、STP下的交换机有哪些状态?
状态名称 状态描述 禁用(Disable) 该接口不能收发BPDU,也不能收发业务数据帧,例如接口为down 阻塞(Blocking) 该接口被STP阻塞。处于阻塞状态的接口不能发送BPDU,但是会持续侦听BPDU,而且不能收发业务数据帧,也不会进行MAC地址学习 侦听(Listening) 当接口处于该状态时,表明STP初步认定该接口为根接口或指定接口,但接口依然处于STP计算的过程中,此时接口可以收发BPDU,但是不能收发业务数据帧,也不会进行MAC地址学习 学习(Learning) 当接口处于该状态时,会侦听业务数据帧(但是不能转发业务数据帧),并且在收到业务数据帧后进行MAC地址学习 转发(Forwarding) 处于该状态的接口可以正常地收发业务数据帧,也会进行BPDU处理。接口的角色需是根接口或指定接口才能进入转发状态
咱们这次假装自己是交换机哦,然后想想咱们的每个接口在各个状态都要干点啥玩意儿:
- 禁用状态:“休眠阶段”,接口关闭,不管谁发的数据我都不接受。
丑拒一切数据 - 阻塞状态:“潜水阶段”,我就是不说话,你们聊,我就听着,听完左耳朵进右耳朵出。
- 侦听状态:“群内选举管理员阶段”,通常这个时候各个兄弟们都在群里展示自己的“光辉事迹”,除了选举之外的事一点都不讨论。
等当上管理员了就不管那么多了 - 学习状态:“相互认识阶段”,当管理员选完了,都得认识认识群里各个兄弟姐妹了,等摸透了群里哪个大佬路径开销最短咱们就能抱大腿了。
- 转发状态:“群聊开始”,现在知道群里各位巨佬、大佬、菜鸡和萌新的实力了,就能愉快的聊(gao)技(yan)术(se)了。当然,群主(根桥)会定时在群里喊话(BPDU),然后每个交换机就会从根端口接收,指定端口发送,一直传下去。
下面这张就是每个状态之间的切换流程图:
哦对了,忘了提一句了,还记得上一篇咱们提到过3个时间相关的字段吗?重新放到下面帮各位回忆一下:
字段名 | 描述 |
---|---|
Max Age | 最大寿命,当一段时间未收到任何BPDU,生存期到达最大寿命时,网桥认为该接口连接的链路发生故障。默认20s |
Hello Time | 根网桥连续发送的BPDU之间的时间间隔,默认2s |
Forward Delay | 转发延迟,在侦听和学习状态所停留的时间间隔,默认15s |
Forward Delay字段也定义了从学习状态到转发状态的延迟时间,也就是说,非酋附体,运气无底线的情况下,Hello包刚发完,链路就出问题,那最后要多久才能稳定?(网络从变化到稳定我们叫做 网络收敛 ,反之我们叫 网络震荡 )
总时间 = Hello报文间隔(0~2秒) + 最大寿命(20秒) + 转发延迟间隔(15秒,侦听状态到学习状态) + 转发延迟间隔(15秒,学习状态到转发状态) = 50~52秒!!!
想想这50秒~52秒的收敛时间,在座的各位会不会在网络收敛之前就有种砸电脑的想法呢?那有没有办法稍微快点呢?比如这个“最大寿命(Max Age)的20秒”,就不能“干掉”得快一点吗?咱们接下来就聊聊STP中怎么才能让收敛快那么一点。
二、怎么才能收敛得快一点呢?
还是先来一张拓扑:
然后咱们先聊聊三种报文,TC报文,TCA报文与TCN报文:
- TC(Topology Change,拓扑变化)报文:其实就是配置BPDU的Flags位中的Topology Change字段置为1而已。
- TCA(Topology Change Acknowledgement,拓扑变化确认)报文:Flags位中的Topology Change Acknowledgement置为1。
- TCN(Topology Change Notification)报文:包含协议标识、版本号和类型字段,只用于通知“拓扑变化”这个动作。
回忆一下哈,忘记的话也可以看看上一篇文章中的报文格式:
字段 | 描述 |
---|---|
Flags | 标志,STP只使用了该字段的最高及最低两个比特位,最低位是TC(Topology Change,拓扑变更)标志,最高位是TCA(Topology Change Acknowledgment,拓扑变更确认)标志 |
假如咱们把右侧的线路直接断掉会怎么样呢?就能看到下面这样的报文交换的过程(起手抓个包):
截一个TC报文出来(TCA就是把上面的Topology Change Acknowledgement置为1):
相对而言,TCN报文就简洁多了,毕竟只是通知一下对端拓扑变化了而已,也截一个TCN出来看看:
那这三种报文有什么作用呢?这TCN将拓扑变化的消息传到根桥那里,然后根桥再下发TC来通知进行选举,然后咱们就成功得省去了最大寿命等待的20秒,哈哈哈,是不是感觉稍微好一些了呢?
三、结尾
虽然说的确是借助TC、TCA、TCN省去了20秒,但依旧还有30秒~32秒的延迟,这也忍不了啊。所以为了改进STP,制定了STP的升级版本:RSTP(Rapid spanning Tree Protocol,快速生成树),这玩意儿又是啥?又能节省多少时间呢? 不多,就亿点点。 各位看官莫急,咱们慢慢来,没别的,就聊聊而已。