没别的,就聊聊STP协议(二)

举报
zhoulive 发表于 2021/06/09 07:57:48 2021/06/09
【摘要】 在第一篇STP文章中,咱们只是就STP的建立做了一些了解:怎么选举根桥,怎么选举根端口,怎么选举指定端口以及阻塞那些端口。站在咱们的视角,咱们看到了每个交换机以及它的端口处于各自的角色,但咱们站在交换机的视角来看问题,是不是会不一样呢?

零、前言

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


一、STP下的交换机有哪些状态?

状态名称 状态描述
禁用(Disable) 该接口不能收发BPDU,也不能收发业务数据帧,例如接口为down
阻塞(Blocking) 该接口被STP阻塞。处于阻塞状态的接口不能发送BPDU,但是会持续侦听BPDU,而且不能收发业务数据帧,也不会进行MAC地址学习
侦听(Listening) 当接口处于该状态时,表明STP初步认定该接口为根接口或指定接口,但接口依然处于STP计算的过程中,此时接口可以收发BPDU,但是不能收发业务数据帧,也不会进行MAC地址学习
学习(Learning) 当接口处于该状态时,会侦听业务数据帧(但是不能转发业务数据帧),并且在收到业务数据帧后进行MAC地址学习
转发(Forwarding) 处于该状态的接口可以正常地收发业务数据帧,也会进行BPDU处理。接口的角色需是根接口或指定接口才能进入转发状态

咱们这次假装自己是交换机哦,然后想想咱们的每个接口在各个状态都要干点啥玩意儿:

  1. 禁用状态:“休眠阶段”,接口关闭,不管谁发的数据我都不接受。丑拒一切数据
  2. 阻塞状态:“潜水阶段”,我就是不说话,你们聊,我就听着,听完左耳朵进右耳朵出。
  3. 侦听状态:“群内选举管理员阶段”,通常这个时候各个兄弟们都在群里展示自己的“光辉事迹”,除了选举之外的事一点都不讨论。等当上管理员了就不管那么多了
  4. 学习状态:“相互认识阶段”,当管理员选完了,都得认识认识群里各个兄弟姐妹了,等摸透了群里哪个大佬路径开销最短咱们就能抱大腿了。
  5. 转发状态:“群聊开始”,现在知道群里各位巨佬、大佬、菜鸡和萌新的实力了,就能愉快的聊(gao)技(yan)术(se)了。当然,群主(根桥)会定时在群里喊话(BPDU),然后每个交换机就会从根端口接收,指定端口发送,一直传下去。

下面这张就是每个状态之间的切换流程图:
STP接口状态变化

哦对了,忘了提一句了,还记得上一篇咱们提到过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中怎么才能让收敛快那么一点。

二、怎么才能收敛得快一点呢?

还是先来一张拓扑:

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,拓扑变更确认)标志

假如咱们把右侧的线路直接断掉会怎么样呢?就能看到下面这样的报文交换的过程(起手抓个包):
STP拓扑变化后

截一个TC报文出来(TCA就是把上面的Topology Change Acknowledgement置为1):

TC报文

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

TCN报文

那这三种报文有什么作用呢?这TCN将拓扑变化的消息传到根桥那里,然后根桥再下发TC来通知进行选举,然后咱们就成功得省去了最大寿命等待的20秒,哈哈哈,是不是感觉稍微好一些了呢?


三、结尾

虽然说的确是借助TC、TCA、TCN省去了20秒,但依旧还有30秒~32秒的延迟,这也忍不了啊。所以为了改进STP,制定了STP的升级版本:RSTP(Rapid spanning Tree Protocol,快速生成树),这玩意儿又是啥?又能节省多少时间呢? 不多,就亿点点。 各位看官莫急,咱们慢慢来,没别的,就聊聊而已。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。