今天我们来聊一聊RSTP相关话题;
我们知道二层网络中一旦产生环路,将导致整个网络瘫痪不可用,为了防止二层环路,stp技术由此诞生;stp主要作用就是通过阻断冗余链路来消除网络中可能存在的环路,同时当活动链路发生故障时,激活冗余链路及时恢复网络连通性,从而实现网络的可靠性;
RSTP技术背景
STP协议虽然能够解决环路问题,但是由于网络拓扑收敛较慢,影响了用户通信质量,而且如果网络中的拓扑结构频繁变化,网络也会随之频繁失去连通性,从而导致用户通信频繁中断;
由于STP的不足,IEEE与2001年发布了802.1w标准定义了RSTP;RSTP在STP基础上进行了诸多改进优化,使得协议更加清晰、规范,同时也实现了二层网络拓扑的快速收敛;
STP存在的问题
1、设备运行STP初始化场景
提示:上图清楚描述了STP从启动到收敛完成,用户至少需要等待30秒,网络才能正常使用;
2、直连故障–交换机有BP端口,RP端口down场景
提示:如上图所示,swc与swa的直连链路down掉,其BP端口切换成RP端口并进入转发状态至少需要等待30秒;当交换机C感知到自己的根端口down掉以后,对应就会从其他端口选举RP;从上图可以看到swc就两个端口,所以bp端口被选举成RP,中间会经历listening到learning,learning到forwarding状态转换,所以当二层网络中,交换机有bp端口,RPdown掉以后,至少需要等待30s,对应bp才会被切换到RP;
3、非直连故障–交换机无BP端口,RP端口down场景
提示:如上图所示,非直连故障,由于swb上的rpdown掉以后,swb的dp会认为自己是是根(因为它收不到真正的根发送的bpdu),然后向外发送bpdu,此时swc的bp端口收到swb发送的bpdu以后,发现没有自己缓存里bpdu好,所以它不做任何处理;但是由于swb的rp down掉以后,对应swc的bp端口也无法正常收到swa发送的bpdu,于是swc的bp端口会等待20秒时间(缓存老化时间);swc的bp端口等待缓存超时以后,此时swc的bp端口会切换成dp,然后状态又要从listening到learning,learning到forwarding状态转换,所以非直连故障,stp至少需要等待50秒网络才会收敛完成;
4、交换机连接用户终端场景
提示:如上所示,如果stp网络中有新的端口被激活,对应stp又会重新计算初始化,这个过程会让网络至少30秒不可用(stp初始化时,所有端口都会从阻塞,中间会通过计算,端口从listening到forwarding会等待30秒);很显然连接中断的端口也会导致stp重新计算,从而导致网络的震荡;事实上连接终端的端口是不应该参与到stp计算的(产生环路的可能性极低,没有必要参与stp计算);
5、STP的拓扑变更机制
提示:stp中如果有拓扑变化,为了使得全网交换机的mac地址表能够更快的更新,stp采用tcn消息和tc来通知所有交换机将mac地址表的老化时间从300秒调整到15秒;如上图所示,当swc感知拓扑变化后,它会向根的方向发送tcn消息,收到该消息的上游交换机会恢复tca确认消息,最后tcn消息到达根桥以后,再由根桥发送tc消息,通知设备删除桥mac地址表项;机制复杂,效率低下;
6、STP的其他不足之处-端口角色
提示:STP的端口角色就只有三个,RP、DP和BP,其中BP切换成RP或DP都会重新选举且需等待计时器超时后才能进入转发数据;
7、STP的其他不足之处-端口状态
提示:STP有5种端口状态,其中disabled、blocking、listening这三种状态不转发用户流量,不学习mac地址;对于用户来讲,这三种状态都是一个效果,但在stp中必须经历这三个状态,使得网络收敛时间变得更长;
通过上述的阐述,我们可以看到stp有许多的不足,总之就是一个字慢,不稳定很容导致网络震荡;
RSTP(Rapid spanning Tree Protocol,快速生成树协议),它是从STP发展而来,实现的基本思想和STP一致,都是通过阻断冗余链路来消除网络中可能存在的环路,同时当活动链路发生故障时,激活冗余链路及时恢复网络连通性,从而实现网络的可靠性;RSTP具备STP的所有功能,可以兼容STP;RSTP不同于STP,最大的特点就是比STP快;RSTP通过减少了端口状态、增加端口角色、BPDU格式及发送方式不同,当交换网络拓扑结构发生变化时,RSTP可以更快地恢复网络的连通性;
RSTP的端口角色
提示:RSTP将端口角色增加到4个,分别是RP(根端口,所在交换机上离根交换机最近的端口,处于转发状态)、DP(指定端口,转发所连接到网段发往根交换机方向的数据,从根交换机方向发往所连接的网段的数据,处于转发状态)、AP(预备端口,根端口的备份,不处于转发状态)和BP(备份端口,指定端口的备份,不处于转发状态);
RSTP的端口状态
提示:RSTP将端口状态从stp的5个状态减少到3个状态;在stp中disabled、blocking、listening这三种状态归并为一个discarding状态;
RST BPDU格式
提示:相对于STP BPDU格式,在RST BPDU中 protocol Version ID变成了2,BPDU Type变为了2,使用了Flags字段的全部8位(STP只使用了,最高位和最低位);在RST BPDU的Flags字段中,除TC以及TCA标志位(蓝色小框),还包含P/A标志位(黄色小框)、端口状态标志位(紫色小框)以及端口角色标志位(红色小框);
P/A机制–针对STP初始化场景改进
提示:在交换机开机的时候,每个交换机的端口都会认为自己是根,所以都会发送P置位的BPDU(端口状态标志位为discarding,端口角色标志位DP);当对端收到对应BPDU后,会根据BPDU携带的优先级等信息来判断谁是根,如果对方发送到BPDU优先级由于自己,对应接收到BPDU的端口会恢复一个A置位(端口状态标志位为forwarding,端口角色为RP)的BPDU;当对端收到A置位的BPDU报文后,对应端口立即进入forwarding状态,进行数据转发;通过上述的来回确认和同步变量机制,就无需依靠计时器来保障无环;从而大大节省了初始化时长(通常这个会在几秒中之类完成,相对于STP的30秒快了很多);
RSTP选举原理和STP本质上是相同的,都是先选举根桥,然后在举非根交换机上选举根端口->选举指定端口->选举预备端口和备份端口(有关选举规则的说明请参考https://www.gaodi.net/qiuhom-1874/p/15131999.html);但是RSTP在选举的过程中加入了“发起请求-回复同意”(P/A机制)这种确认机制,由于每个步骤有确认就不需要依赖计时器保证网络拓扑无环才转发,只需要考虑BPDU发送报文并计算无环拓扑的时间(一般为秒级);
根端口快速切换机制–针对STP直连故障场景
提示:SWC与SWA的直连链路down掉以后,其AP端口切换成RP端口,并进入转发状态完成收敛;这个是内部机制,在RSTP中,AP端口就是为RP端口的备份,当交换机感知自己的RP端口down掉以后,对应AP端口会立即变为新的RP并进入Forwarding状态;
次优BPDU处理机制–针对STP非直连故障场景
提示:次优BPDU处理机制本质上还是P/A处理机制;如上图所示,当交换机swb 的RP down掉以后,swb收不到BPDU,所以它会认为自己是根,然后发送P置位的BPDU,当swc的AP端口收到swb发送的P置位的BPDU后,这个时候swc不是不处理(stp中swc并不会直接处理,而是等待20秒超时),而是发送本地最优BPDU给对方,告诉对方不是根,自己从AP端口角色变为DP;随后swb收到swc的最优BPDU后,他会将端口的角色从DP更改为RP,然后发送A置位的BPDU给swc,当swc收到swb发送的A置位BPDU后,立即进入到转发状态;
边缘端口的引入–针对STP中接入终端端口参与STP计算场景
提示:在RSTP中,交换机连接终端的链路可以立即进入转发状态,无需像STP中那样,必须参与STP计算;当然这个需要我们在交换机上配置那些端口为边缘端口(在端口模式下使用命令:stp edged-port enable开启对应端口为边缘端口);在对应端口下开启边缘端口后,对应端口就不会参与到stp计算中,当终端插拔网线都不会对STP网络造成震荡;当然边缘端口如果收到BPDU的话,对应也会参与到stp的计算(这是一种不正常的现象,这意味着要么有人在攻击,要么是我们把线接到交换机上了,默认终端是不会发送BPDU);
RSTP拓扑改变处理机制–针对STP中拓扑变更处理机制优化
提示:在RSTP中,当拓扑发生改变,不再使用TCN,而是直接发送TC;触发拓扑变更的条件,只有非边缘端口转变为Forwarding状态时,才认为拓扑发生了变更;拓扑发生变更处理机制是,在两倍Hello时间内(4秒)内向所有其他指定端口和根端口发送TC置位BPDU报文;清除除接收到TC报文的端口之外的所有指定端口和根端口学习的mac地址;如下所示
提示:当发生拓扑变更时,对应交换机的端口发送TC;同时清空自己除发送tc端口和边缘端口学习到的所有mac地址表项;如上图,swb会清空E1端口学习到的所有mac地址表项;由新的根端口E2发送TC;
提示:当swc收到swb发送的TC报文后,对应swb会清除除了收到TC报文之外的其他所有非边缘端口学习到的mac地址表项;
提示:同样SWA收到swb发送的TC以后,对应swa也会清除除了收到tc报文之外的其他所有非边缘端口学习到的mac地址表项;
判断拓扑变化唯一标准
提示:判断拓扑唯一变化标准是一个非边缘端口迁移到Forwarding状态;对于边缘端口up或down都不会触发拓扑变更;
配置RSTP
1、stp mode rstp :该命令在全局模式执行,表示更改STP模式为RSTP;
2、display stp :显示RSTP配置信息和参数
3、stp edged-port enable :配置模各端口为边缘端口
提示:该命令需要在某个接口模式下执行,表示把对应端口设置为边缘端口;默认情况下所有端口都是非边缘端口;
4、stp edged-port default :配置所有端口为边缘端口
提示:该命令需要在全局模式下执行,表示把所有端口都配置为边缘接口;
5、stp edged-port disable :禁用边缘端口
提示:该命令需要在某个接口模式下执行,表示配置该接口为非边缘接口;如果在全局模式下配置了所有端口为边缘端口,又在某个端口禁用了边缘端口,生效优先级是接口模式下优先级高于全局模式;