系列文章目录
文章目录
零、前言
上次说到STP的收敛时间,不知各位还记得吗?重新回忆一下蛤,快的话30秒,慢的话52秒。怎么想30秒的延迟都实在太久了,咱们有办法能够让网络快速稳定下来吗?今天咱们就聊聊,RSTP(Rapid Spanning Tree Protocol,快速生成树协议)怎么就让网络恢复稳定得快 “亿” 点!!!
一、STP有哪些能够优化的地方?
咱们慢慢来聊啊,先仔细想想,STP都有哪些能改进的地方,然后咱们再看看RSTP都改进了啥东西:
- STP划分了5种状态,但对于用户来说,其实只有三种状态:接口关闭,接口不可发数据,接口可收发数据。实际上没必要划分这么多状态。
- STP算法依赖于定时器,拓扑发生变化的时候需要等待定时器的结束。
- 根桥主动发出配置BPDU,而对于非根桥的设备只是处理配置BPDU,从而传到整个STP网络中,这效率实在太低了,拓扑变化时需要将TCN(Topology Change Notification,拓扑变化通知)报文传到根桥才能处理下一步。
- 对于直接连接用户终端设备(例如:个人电脑)的接口完全不用参与拓扑计算,毕竟终端设备接入就是直连,不会形成环路。
二、RSTP优化了上面的哪些问题?
答案:全解决了!!!
- RSTP将STP的5种状态减少到了3种:转发(Forwarding)、学习(Learning)、丢弃(Discarding)。
- 当拓扑发生变化时,不再需要将拓扑变化通知(TCN)报文传到根桥,而是交换机连续三次没接收到上游(当前节点的上一个节点)交换机发送的RST BPDU,重新与上游链路进行选举,然后通过P/A协商后,再根据情况切换接口状态。
- 上游交换机都会按照Hello Timer规定的时间间隔发送BPDU,这个过程都是设备自主进行的。
- 管理员可以手动配置边缘端口(PortFast),这个端口比较特别,不接受BPDU,不参与RSTP计算,但是可以快速从Discarding状态切换到Forwarding状态,但假如边缘端口接收到BPDU就会变成普通STP端口(比如终端用户自己接入一个交换机进来),从而引起网络震荡。
- 同时还增加了两种接口状态:Alternate端口与Backup端口
角色 描述 Backup Backup端口作为指定端口的备份,提供了另外一种从根桥到非根桥的备份链路。 Alternate Alternate端口作为根端口的备份端口,提供了从指定桥到根桥的另一条备份路径。
三、STP与RSTP有哪些异同?
先看端口状态,废话不多说,直接上图表比较:
STP接口状态 RSTP接口状态 接口在拓扑中的角色 Forwarding Forwarding 包括根接口、指定接口 Learning Learning 包括根接口、指定接口 Listening Discarding 包括根接口、指定接口 Blocking Discarding 包括Alternate接口、Backup接口 Disabled Discarding 包括Disable接口
所以说RSTP站在用户的角度,将STP中间的侦听、学习时间缩短了:
- Discarding状态:端口既不转发用户流量,也不学习MAC地址
- Learning状态:端口不转发用户流量,但学习MAC地址
- Forwarding状态:端口转发用户流量,也学习MAC地址
然后咱们再来看看BPDU报文,还记得之前STP第一篇文章说的STP配置BPDU报文格式吗?咱们来回忆一下:
其中Flags字段仅仅包括两个字段:TCA(拓扑变化确认,Topology Change Acknowledgment)、TC(拓扑变化,Topology Change)
先看看下面这个图,单单看这两个报文是不是感觉一摸一样?其实就是RSTP借鉴STP的BPDU报文格式,只不过BPDU Type(BPDU报文类型)不一样,除此之外最关键的区分点在于RSTP将Flags字段包含了更多信息。
在RST BPDU的Flags中定义了TCA(拓扑变化确认)、Agreement(同意)、Forwarding(转发)、Learning(学习)、Port Role(端口角色,例如指定端口、根端口等)、Proposal(协商)、TC(拓扑变化)
这里的协商(Peoposal)和同意(Agreement)(P/A机制)我们会在后面RSTP收敛过程中聊到,这两个字段就是使得RSTP快速收敛的“法宝”
四、RSTP如何做到比STP更快收敛的?
从“根源”下手,咱们来看看RSTP的收敛过程:
-
每台交换机启动后,都认为自己是“根桥”,并且发送RST BPDU。这个时候所有端口都是指定端口,且都处于Discarding(丢弃)状态。
-
交换机相互发送Proposal置位为1的RST BPDU,接收到对端的RST BPDU的更优的交换机会丢弃次优交换机发过来的RST BPDU,并且回复Proposal置位为1的本地RST BPDU。
-
左下角的交换机收到更好的RST BPDU,就停止发送自己的RST BPDU,并执行同步。(除Alternate端口与边缘端口之外,所有下游指定端口都变为Discarding状态)
-
阻塞完所有非边缘端口之后,会回应给上游交换机Agreement置为1的RST BPDU。
-
根桥接收到下游发送的Agreement置为1的RST BPDU报文时,上游交换机会立马将指定端口从Discarding(丢弃)状态切换到Forwarding(转发)状态,然后P/A协商继续向下传播。
也就是说,当链路上的P/A协商结束时,这条链路就能进入到转发状态了,比STP的两个Forwarding Delay不知道要快多少去了。
五、RSTP又是如何应对链路故障?
其实挺直接的,以前还需要一层层往上通知“大哥”,然后让“大哥”说怎么办,现在不用了,还记得上面说的设备自主进行上游RST BPDU接收吗?RSTP就借助这条特性,将网络拓扑得变化感知得更加迅速。
上游交换机都会按照Hello Timer规定的时间间隔发送BPDU,这个过程都是设备自主进行的。
当规定的连续3次Hello Timer时间间隔过去了还没接收到上游发下来的RST BPDU,就确定了本端口与对端口通信失败,然后重新进行RSTP计算。并且根据情况切换另外的端口状态(从Alternate Port切换到Root Port,并立即进入Forwarding状态),然后发送TC(Topology Change)置为1的报文,从而通知上游清除除了接收TC报文之外的端口的MAC地址表,再重新学习MAC地址。这一趟“操作”下来就能快速应对拓扑变化。
对了,别忘了咱们之前还说过有一种配置的端口叫做边缘端口(PortFast)吧?这个端口有点意思,不接受BPDU,也不参与计算,从Discarding状态直接切换到Forwarding状态,也就是说即使网络震荡了也和它没关系,该转发流量还是照常转发流量,是不是听起来感觉RSTP针对“快”的研究还是很下功夫的。
六、结尾
收敛快是快了,但现在来看,交换机要阻塞一个端口来生成一个树形结构,从而防止环路,但另外一个端口一直没用上,这么感觉也挺浪费的,毕竟设备贵,还不好好利用,插个口还用不上,所以在解决速度之后,又开始研究怎么才能把那些阻塞的端口也用上了,于是诞生了后面要聊的MSTP(多生成树协议,Multiple Spanning Tree Protocol )。不过在MSTP之前还有个小插曲,咱们先来聊聊另外一个技术:VLAN(虚拟局域网,Virtual Local Area Network),“虚拟”两字听起来是不是感觉头大了?可别被名字吓到,没别的,就聊聊而已。