思维导图及总结梳理
RSTP相比于STP
- 新的链路类型要求
- 新的端口角色和状态
- 新的报文格式和BPDU的处理方式
- 主动的握手协商机制(new)
- 不同的TCN处理过程(new)
- 边缘端口(new)
链路类型
RSTP不同于STP,RSTP对链路类型有着严格的要求,不同链路类型可以影响到收敛速度及工作机制:
- P2P类型:交换机间链路为全双工模式
- 共享链路:交换机间链路为半双工模式
说明:
- 手工配置的端口类型优于端口检测的结果。
- 处于DP/Discarding状态的端口能否快速进入转发状态,依赖于是否是P2P链路。如果是共享链路发出的BPDU中不会置A位,若对方是RP端口,不会回应A位的BPD。即:非P2P链路,不会进行P/A协商
- 运行STP的二层网络中,交换设备的接口和非P2P链路相连时,端口的状态无法实现快速迁移
- AP端口替换RP端口,不依赖端口类型是否是P2P全双工。
命令:stp point-to-point X 来控制是否开启自动检测,默认为auto 。可选参数X为auto/force-true/force-flase
如果当前端口工作在半双工,可通过命令stp point-to-point force-true强制成为点到点链路,实现快速收敛。
RSTP的很多快速收敛机制都要求要工作在P2P全双工场景下,如果不是P2P链路。RSTP会采用类型802.1d的慢收敛(即基于timer的被动收敛)
端口角色及状态
同STP相同,采用相同的端口角色,RP DP AP BP,区别是RP和DP进入For时间不一致。
报文格式
RST的报文格式与STP大差不差,主要在于FLAG的使用区别
FLAG位:
0... ....=TCA位,RST中不再使用
.1.. ....=A位,链路是P2P时置位
..0. ....=状态标记位,0代表Disc或Lear,1代表For
...0 ....=状态标记为,0代表Disc,1代表Learn或For
.... 11..=端口角色标记,11代表DP,10为RP 01为AP或BP
.... .1..=P位,端口为DP/discard或DP/Lear时置1
状态标记为中 00为Disca 01为learni 11为for。
**说明:**RSTP中的BPDU版本为2,消息类型为0x02。这也意味着一个运行802.1d协议的网桥将丢弃此BPDU,这个特性使得802.1W很容易检测到与之相连的802.1D网桥。
边缘端口
在交换机上,通常将直接与用户终端(如PC机)或文件服务器等非交换机设备相连的端口配置为边缘端口,以实现端口的快速迁移。
边缘端口:
-
边缘端口配置后,会立即进入转发转发,并且端口状态UP/DOWN不会触发拓扑变更通知。
-
边缘端口会向外通告BPDU,若边缘端口收到BPDU则失去边缘端口特性,切换回普通生成树端口并根据收到的BPDU重新计算端口角色;(关于边缘端口通告BPDU,见下方边缘端口场景案例)
-
P/A协商中,Sync同步过程并不会堵塞边缘端口,同时TC通知BPDU也不清空BPDU端口的MAC表项(TC BPDU并不向边缘端口转发)
配置命令:接口下stp edge-port enable开启边缘端口功能
**说明:**为防范边缘端口连接的设备从非交换设备变更为交换设备,从而引发不必要的网络震荡,可以通过配置BPDU保护,来保证若边缘端口收到BPDU,则直接DOWN,而不是失去边缘端口特性,引发生成树角色计算。
当前场景为LSW1连接HUB情况,此时若G0/0/1和G0/0/2都配置为边缘端口。
那么在网络初始化阶段会有短期的环路产生,由于G0/0/1和2都是边缘端口,PC1的流量数据,从LSW1到HUB再回到了LSW1,但边缘端口会周期性发送BPDU,两个边缘端口至少会有一个失去边缘端口属性,从而引发端口计算,最终堵塞。
快速收敛机制
802.1w相比802.1d增加了如下快速收敛机制:
- P/A协商:可以让交换机的RP和DP的互联接口快速进入转发状态。
- 直连故障:AP口变为RP并快速进入转发状态,不需要30s延时。
- 次优场景:AP口收到次优的RST BPDU包后会马上变为DP口,并向该端口发送最优的RST BPDU包。
- 非直连链路故障(BPDU老化/超时机制):连续丢失3个RST BPDU包,端口角色重新计算,华为默认18s。
- RSTP中TC置位的RST BPDU包所有桥设备都可以发送,发送时间为2个hello间隔(即4秒)。
P/A协商
802.1d没有通知机制来决定何时将端口置为转发状态,完全依赖于计时器。802.1w则引入P/A协商,依靠P/A协商来决定将端口置为转发状态。
P/A协商仅在P2P全双工直连链路上进行,P/A目的是将DP快速切换到转发状态的协商行为。
P/A协商过程
- DP处于discarding或learning状态时,会设置该变量并向下游交换机传递P置位的RST BPDU。
- 当收到由DP发来的P置位RST BPDU时,会开启同步并根据收到的BPDU计算端口角色(一般为RP,如果是AP或BP,那么不会回复A置位,即P/A协商失败,需要慢收敛)。
- 同步完成后,收到P置位的RST BPDU的AP端口状态将会切换成Forwarding,并回复A置位的RST BPDU
- DP端口收到A置位的BPDU后,且收到的BPDU的端口角色字段为RP,指定端口立马进入For状态
同步状态:将所有除了EP端口和已经Discarding的其他端口状态切换成Discrading
P/A协商案例如下:
1、在选出根桥后,由根桥LSW1始发BPDU,根桥上所有DP/Disca状态的接口发送P置位的BPDU。
2、LSW2开始选择RP,LSW2从P2和P3端口都收到根发来的BPDU,根据根据BPDU计算端口角色
3、LSW2的P2端口成为RP,在RP设备上进行同步,同步:在所有除了EP端口和已经处于Disca端口的其他端口状态置为Discar
4、同步完成后,RP端口进入For状态,同时发送A置为的BPDU。(此时LSW2还向除了EP的所有处于转发的端口通告TC)
5、P0端口的DP/Discar角色收到A置位的BPDU,端口状态切换为For。至此P/A协商完毕
6、LSW2继续向所有其他DP/Discar端口进行P/A协商。
说明:
-
若P/A协商对端为AP端口,AP端口无同步过程,故不回复A置位给上游设备,上游端口需要进行慢收敛机制(经历2个For De后成为For状态),一旦P/A协商不成功,DP的角色就需要进行慢收敛机制
-
PA协商是渐行性的,由根桥始发BPDU后,开始逐步进行P/A协商,下游交换机收到P后回应A,完成PA后 其他DP/Disca继续进行PA,直至网络边缘。
拓扑变化通知机制
**触发条件:**只有非EP端口切换到转发状态时,才被定义为拓扑变动,端口的UP/DOWN不会触发TC通知。
感知接口状态发生变化的交换机处理步骤:
所有处于转发状态的DP和RP(除了EP)去扩散TC置位的BPDU。且为这些转发端口开启TC While timer,时长是2个hello间隔,即4秒,在While计时器内,清空状态发生变化的端口上所学习的MAC地址;While到期后,停止发送TC BPDU。
周边交换机处理步骤:扩散通知
- 交换机收到TC置位BPDU后,向其他DP/RP端口扩散转发。且清空除了收到TC BPDU的,其他接口(除了EP)的MAC地址关联表
- 开启TC While计时器,并且继续向所有处于转发状态的DP和RP端口去转发TC置位的BPDU。
**说明:**清空MAC地址表项时,仅清除动态学习到的MAC地址表项,即:不清除静态手工配置的MAC地址表项。
RSTP与STP兼容
802.1w可以和802.1d兼容,但如果二者兼容,那么RSTP会失去其快速收敛机制。
当一个网段内即运行STP又运行RSTP时,STP交换设备会忽略RST BPDU,而运行RSTP的交换设备会在某端口上接收到运行STP的交换设备发出的 配置Config BPDU。则会在2个hello time后,将该端口转换为STP工作模式,发送配置BPDU。
如上图场景可见,LSW2的G0/0/2在接收到STP发出的Config BPDU后,会在两个hello time后,将接口模式调整为STP工作模式,并发送配置BPDU,若此时LSW3设备被移除或离开,此时G0/0/2的工作模式无法自动调整回来,可以通过命令:stp mcheck来将G0/0/2接口工作模式迁移回802.1w模式
命令:接口下stp mcheck
,手动将兼容STP的接口模式调整回来
STP四个保护及过滤
BPDU保护
边缘端口:将连接终端的接口配置成边缘端口后,会立即进入转发,但是当该接口收到BPDU后,就失去了边缘端口属性,会成为普通STP端口,并重新进行生成树计算。
正常情况下,边缘端口不会收到BPDU。当这些端口接收到BPDU时,交换机会自动将这些端口设置为非边缘端口,并重新进行生成树计算。如果有人伪造BPDU恶意攻击交换机,(伪造更优的BPDU)将会引起网络震荡。可以通过配置BPDU保护,防范边缘端口攻击的情况产生。
如果在配置了BPDU保护的边缘端口收到了BPDU后,该边缘端口将被error-down关闭,同时产生告警信息上报网管系统。被关闭的边缘端口,默认不会自动恢复。可配置自动恢复延迟时间,在该时间到期后,状态将切换回UP。
**说明:**根保护功能只能在EP端口
上生效,防止EP角色改变。缺省情况下, BPDU保护处于关闭状态
全局配置了BPDU保护,可以通过查看端口角色命令,在Protection看到BPDU
[HUAWEI] stp bpdu-protection
[HUAWEI] display stp brief
MSTID Port Role STP State Protection
0 GigabitEthernet0/0/1 DESI FORWARDING BPDU 可以看到,这里是BPDU防护
0 GigabitEthernet0/0/2 DESI FORWARDING NONE
0 GigabitEthernet0/0/4 ROOT FORWARDING NONE
根保护
根保护功能和BPDU保护功能差不多,BPDU保护就是说从边缘端口收到更优BPD U。根保护是防止从其他端口收到更优BPDU,从而导致DP端口角色被改变。
根保护是为了防范有人恶意攻击,或者网络内操纵人员的失误,而导致没必要的网络拓扑变更。在指定端口上启动根保护功能后,若在该端口收到更优RST-BPDU,该端口直接进入Discarding状态,不再转发报文。在两倍For Delay时间内未收到更优RST-BPDU,则自动恢复到正常的转发状态。
**说明:**根保护功能只能在DP端口
上生效,防止DP角色改变。缺省情况下, 根保护处于关闭状态
接口配置了Root保护,可以通过查看端口角色命令,在Protection看到Root
[HUAWEI] int G0/0/1
[HUAWEI-GigabitEthernet0/0/1] stp root-protection
[HUAWEI] display stp brief
MSTID Port Role STP State Protection
0 GigabitEthernet0/0/1 DESI FORWARDING ROOT可以看到,这里是ROOT
0 GigabitEthernet0/0/2 DESI FORWARDING NONE
0 GigabitEthernet0/0/4 ROOT FORWARDING NONE
环路保护
我戏称这三个为保护三兄弟,BPDU保护防止边缘端口出现错误,根保护防止DP出现错误,环路保护防止AP和RP出现错误。
环路保护是为了防止由于链路链路拥塞或单向链路故障导致这些端口收不到来自上游交换设备的BPDU时,交换设备会重新选择根端口。那么原先的RP会转变成DP,原先的堵塞会成为转发,从而造成交换网络中可能产生环路。
启动了环路保护后,如果RP或AP端口长时间收不到来自上游的RST-BPDU时,则会向网管系统发出通知信息,直到RP或AP端口收到BPDU,端口状态才恢复到正常的转发状态。(如果是RP则进入Discar状态)
**说明:**环路保护功能只能在RP或AP端口上生效。防止端口成为DP。缺省情况下, 环路保护处于关闭状态
接口配置了环路保护,可以通过查看端口角色命令,在Protection看到LOOP
[HUAWEI] int G0/0/1
[HUAWEI-GigabitEthernet0/0/1] stp loop-protection
[HUAWEI] display stp brief
MSTID Port Role STP State Protection
0 GigabitEthernet0/0/1 DESI FORWARDING LOOP可以看到,这里是LOOP
0 GigabitEthernet0/0/2 DESI FORWARDING NONE
0 GigabitEthernet0/0/4 ROOT FORWARDING NONE
TC泛洪保护
若网络内有人恶意伪造TC来攻击网络设备,频繁的删除操作会给设备产生很大的负担,CPU或数据泛洪增加很多,导致网络不稳定。
TC泛洪保护:在单位时间内,交换设备处理TC-BPDU报文的次数可配置,处理到阈值指定的次数后将不再处理。
缺省情况下,单位时间为hello timer时间(即2秒)。设备默认启用TC泛洪保护,缺省单位时间2秒,处理次数1次。
**说明:**可通过命令stp timer hello X来调整时间,部分设备也可通过命令来调整专项的TC保护时间。
该配置为:调整交换机在10秒间隔内处理TC报文的最大数量为5。
stp tc-protection threshold 5 命令来配置设备在收到拓扑变化报文后,单位时间内处理的最大TC报文数量阈值
stp tc-protection interval 10 指定设备处理最大数量的拓扑变化报文所需的时间。缺省为hello时间
[Huawei] stp tc-protection threshold 5 处理TC
[Huawei] stp tc-protection interval 10 10秒 部分设备不支持该命令,只能调整timer hello时间
BPDU Filter过滤
BPDU过滤可以让端口不收不发,过滤BPDU报文。
如果需要配置过多的BPDU过滤,可以全局配置默认BPDU过滤功能:bpdu bpdu-filter default
[Huawei]stp bpdu-filter default 可以全局开启BPDU功能,然后将需要BPDU过滤的,接口下配置disable即可
[Huawei]int g0/0/1
[Huawei-GigabitEthernet0/0/1]stp bpdu-filter enable 开启BPDU过滤功能,其实全局开了默认行为,就不需要接口enable了
[Huawei-GigabitEthernet0/0/1]quit
[Huawei]int g0/0/2
[Huawei-GigabitEthernet0/0/2]stp bpdu-filter disable 关闭BPDU过滤功能
[Huawei-GigabitEthernet0/0/2]