1.快速生成树协议概述
(1)回顾:STP的工作原理
⦁ 配置BPDU泛洪:
⦁ 在初始形成STP树的过程中,所有STP交换机会周期性地(Hello Time,缺省为2s)主动产生并发送配置BPDU,大家都认为自己是根桥。
⦁ 随着BPDU的泛洪和收集,各交换机根据BPDU包含的信息进行比较,并选举出根桥。
⦁ 在此之后(即STP树形成后的稳定期),只有根桥会周期性地(缺省为2s)主动产生并发送配置BPDU。相应的,非根桥交换机会从自己的根端口周期性地接收到配置BPDU,并立即触发产生自己的配置BPDU,然后从自己的指定端口发出。——这一过程看起来就像是,根桥发出的配置BPDU逐跳地“经过”了其他的交换机。也可以理解为:从根桥倒一盆水下来,水顺着这棵无环的树从上往下不断地往下流。因此如图所示,可以理解为SW1与SW2间的链路是SW2的上游链路,SW2与SW3间的链路是SW2的下游链路。
⦁ 报文格式:
⦁ 配置BPDU携带的参数可以分为3类:
⦁ 第一类,BPDU对自身的标识,包括:协议标识、协议版本号、BPDU类型和标志。
⦁ 协议标识(Protocol ID,PID),2 Byte,总是0x000。
⦁ 协议版本号(Protocol Version ID,PVI),1 Byte,总是0x00。
⦁ BPDU类型(BPDU Type),1 Byte,配置BPDU的类型值为0x00。
⦁ 标志(Flag),1 Byte,网络拓扑变化标志,仅使用了最低位和最高位。
(2)回顾:STP树的生成过程
⦁ STP基本原理:
⦁ 在一个具有物理环路的交换网络中,交换机通过运行STP,自动生成一个没有环路的工作拓扑,也被称为STP树。树节点为某些特定的交换机,树枝为某些特定的链路。
⦁ STP采用四个步骤来解决二层环路问题(生成一棵STP树):
⦁ 在一个交换网络中选举一个根桥;在每个非根桥上选举一个根端口;为每个网段选举一个指定端口;阻塞交换机上所有剩余的非根、非指定端口(备用端口)。
⦁ 如何生成STP树?
⦁ 主要通过比较4个参数:根桥ID、根路径开销、网桥ID和端口ID,值越小,越优先。而这些参数,都是报文BPDU中的字段。
⦁ 根桥选举:比较根桥ID,最小胜出。
⦁ 根端口选举:依次比较RPC、对端BID、对端PID和本端PID,最小胜出。
⦁ 指定端口选举:依次比较RPC、本端BID和本端PID,最小胜出。
⦁ 在确定了根端口和指定端口之后,交换机上所有剩余的非根端口和非指定端口被阻塞。
⦁ 在华为产品的实现中,被阻塞的非指定端口表现为Alternate Port。
(3)回顾:STP的端口状态迁移
⦁ 根据端口是否接收和发送STP协议帧,以及端口是否能转发用户数据帧,STP定义了五种端口状态:Disabled、Blocking、Listening、Learning和Forwarding。
⦁ Disabled状态:端口无法接收和发出任何帧(即:端口不仅不处理BPDU报文,也不转发用户流量),端口处于关闭(down)状态。
⦁ Blocking状态:端口只能接收并处理BPDU,不能发送BPDU,也不能转发用户数据帧(用户流量),是阻塞端口的最终状态。
⦁ Listening状态:端口可以接收并发送BPDU,但不进行MAC地址学习,也不能转发用户数据帧。这是过渡状态,用于确定端口角色,将选举出根桥、根端口和指定端口,同时用于防止临时环路。
⦁ Learning状态:端口可以接收并发送BPDU,也可以进行MAC地址学习,根据收到的用户流量构建MAC地址表,但不能转发用户数据帧(用户流量)。这也是过渡状态,用于防止MAC地址表未建立,网络中出现大量数据帧泛洪。
⦁ Forwarding状态:端口可以接收并发送BPDU,也可以进行MAC地址学习,同时能够转发用户数据帧(用户流量)。只有根端口或指定端口才能进入Forwarding状态。
⦁ 端口状态迁移:
⦁ STP交换机的端口在初始启动时,会从Disabled状态进入到Blocking状态。在Blocking状态,端口只接收和分析BPDU,但不发送。
⦁ 在整个过程中,端口一但被关闭或发生了链路故障,就会进入Disabled状态。
(4)STP的不足
(5)STP对计时器的依赖
(6)STP重收敛过程慢
⦁ 直连故障:
⦁ 两台交换机间有两条链路,其中一条是主用链路,另一条为备用链路。
⦁ 当网络稳定时,交换机SW2检测到根端口的链路发生故障,则被阻塞的端口会开始端口状态迁移,最终进入用户流量转发状态。
⦁ 非直连故障:
⦁ 当网络正常时,SW3的被阻塞端口会定期收到来自根桥的BPDU。
⦁ 当SW1与SW2之间的链路发生故障时,SW2能够第一时间检测到故障发生,此时它认为自己成为新的根桥,于是向SW3发送自己的配置BPDU(根桥ID为自己的桥ID)。
⦁ SW3的被阻塞端口将收到上述配置BPDU,但该BPDU并不比当前端口所缓存的配置BPDU更优,因此SW3忽略该配置BPDU。
⦁ 当Max Age计时器超时后,SW3端口上缓存的配置BPDU老化,SW3开始向SW2发送配置BPDU,该配置BPDU由根桥SW1发送的配置BPDU触发,其中的根桥ID字段值为SW1的桥ID。
⦁ SW2收到上述配置BPDU后,解析该报文并认定SW1为根桥,于是将其连接SW3的端口切换为根端口。
(7)STP拓扑变更机制
⦁ 拓扑变更,STP处理过程:
⦁ 当交换机检测到拓扑更改时,会通知生成树的根桥,然后根桥将该拓扑更改信息泛洪到整个网络。
⦁ 拓扑变化过程,如图:
⦁ 如果网络中新增一台交换机,导致工作拓扑发生了变化,则位于变化点的交换机可以通过端口状态直接感知到这种变化,但是其他的交换机是无法直接感知到的。
⦁ 位于变化点的交换机会以Hello Time(缺省2s)为周期通过其根端口不断向上游发送TCN BPDU,直到接收到从上游交换机发来的、TCA位置1的配置BPDU。TCA位置1是为了通知下游设备停止发送TCN BPDU报文。
⦁ 上游交换机收到TCN BPDU后,一方面会通过其指定端口回复TCA位置1的配置BPDU,另一方面会以Hello Time为周期通过其根端口不断向它的上游发送TCN BPDU。
⦁ 这个过程一直重复,直到根桥收到TCN BPDU。
⦁ 根桥收到TCN BPDU后,会发送TC位置1的配置BPDU,通告所有交换机网络拓扑发生了变化,通知下游设备直接删除桥MAC地址表项。
2.RSTP概述
(1)概述
⦁ RSTP可以兼容STP:RSTP可以和STP互操作,但是此时会丧失快速收敛等RSTP优势。
⦁ 当一个网段里既有运行STP的交换设备又有运行RSTP的交换设备,STP交换设备会忽略RSTP的BPDU。运行RSTP的交换设备在某端口上接收到运行STP的交换设备发出的配置BPDU,在两个Hello Time时间之后,便把自己的端口转换到STP工作模式,发送配置BPDU,从而实现了互操作。
⦁ 在华为技术有限公司的数据通信设备上可以配置运行STP的交换设备被撤离网络后,运行RSTP的交换设备可迁移回到RSTP工作模式。
(2)RSTP在园区网络中的应用位置
3.RSTP对STP的改进
(1)改进点1:端口角色
⦁ RSTP的端口角色共有4种:根端口、指定端口、Alternate端口和Backup端口。
⦁ 根端口和指定端口的作用同STP中定义,Alternate端口和Backup端口的描述如下:
⦁ 从配置BPDU报文发送角度来看:
⦁ Alternate端口就是由于学习到其它网桥发送的配置BPDU报文而阻塞的端口。
⦁ Backup端口就是由于学习到自己发送的配置BPDU报文而阻塞的端口。
⦁ 从用户流量角度来看:
⦁ Alternate端口提供了从指定桥到根的另一条可切换路径,作为根端口的备份端口。
⦁ Backup端口作为指定端口的备份,提供了另一条从根桥到相应网段的备份通路。
⦁ 给一个RSTP域内所有端口分配角色的过程就是整个拓扑收敛的过程。
(2)改进点2:端口状态
(3)改进点3:配置BPDU-RST BPDU
⦁ RST BPDU与STP配置BPDU报文格式不同点,包括:BPDU类型和Flag字段。
⦁ BPDU类型,1 Byte,RST BPDU的类型值为0x02。
⦁ 标志,1 Byte,包括:
⦁ bit 7:TCA,表示拓扑变化确认;
⦁ bit 6:Agreement,表示同意,用于P/A机制;
⦁ bit 5:Forwarding,表示转发状态;
⦁ bit 4:Learning,表示学习状态;
⦁ bit 3和bit 2:表示端口角色,00表示未知端口,01表示替代或备份端口,10表示根端口,11表示指定端口;
⦁ bit 1:Proposal,表示提议,用于P/A机制;
⦁ bit 0:TC,表示拓扑变化。
(4)改进点4:配置BPDU的处理(1)
(5)改进点4:配置BPDU的处理(2)
(6)改进点4:配置BPDU的处理(3)
⦁ STP:
⦁ STP只有指定端口会立即处理次优BPDU,其他端口会忽略次优BPDU,等到Max Age计时器超时后,缓存的次优BPDU才会老化,然后发送自身更优的BPDU,进行新一轮的拓扑收敛。
⦁ RSTP:
⦁ RSTP处理次优BPDU报文不再依赖于任何定时器(即不再依赖于BPDU老化)解决拓扑收敛,同时RSTP的任何端口角色都会处理次优BPDU,从而加快了拓扑收敛。
(7)改进点5:快速收敛机制(1)
(8)改进点5:快速收敛机制(2)
(9)改进点5:快速收敛机制(3)
⦁ 事实上对于STP,指定端口的选择可以很快完成,主要的速度瓶颈在于:为了避免环路,必须等待足够长的时间,使全网的端口状态全部确定,也就是说必须要等待至少一个Forward Delay所有端口才能进行转发。
⦁ 而RSTP的主要目的就是消除这个瓶颈,通过阻塞自己的非根端口来保证不会出现环路。而使用P/A机制加快了上游端口进入Forwarding状态的速度。
(10)P/A机制详解(1)
(11)P/A机制详解(2)
⦁ SW2的下游端口同步过程:替代端口,状态不变;边缘端口,不参与计算;阻塞非边缘指定端口。
(12)P/A机制详解(3)
(13)改进点6:拓扑变更机制
⦁ 在STP中,如果拓扑发生了变化,需要先向根桥传递TCN BPDU,再由根桥来通知拓扑变更,泛洪TC置位的配置BPDU。
⦁ 在RSTP中,通过新的拓扑变更机制,TC置位的RST BPDU会快速的在网络中泛洪。
⦁ 如上图所示:
⦁ SW3的根端口收不到从根桥发来的RST BPDU后,Alternate端口会快速切换为新的根端口,启动TC While Timer,并清空所有端口学习到的MAC地址。然后向外发出TC置位的RST BPDU。
⦁ SW2接收到RST BPDU后,会清空接收口以外所有端口学习到的MAC地址,同时开启计时器,并向外发送TC置位的RST BPDU。
⦁ 最终,RST BPDU会在全网泛洪。
(14)改进点7:保护功能(1)
⦁ 在交换设备上,通常将直接与用户终端(如PC机)或文件服务器等非交换设备相连的端口配置为边缘端口。
⦁ 如上图所示:
⦁ SW3与某主机互联,并设置该互联端口为边缘端口。
⦁ 后来该主机被恶意用户侵占,并伪造RST BPDU攻击SW3,因此边缘端口会收到RST BPDU,失去边缘端口特性,并进行生成树计算。
[SW3]
Jul 20 2022 20:39:44-08:00 SW3 %%01PHY/1/PHY(l)[3]: Ethernet0/0/1: change status to up
Jul 20 2022 20:39:44-08:00 SW3 %%01MSTP/4/BPDU_PROTECTION(l)[4]:This edged-port Ethernet0/0/1 that enabled BPDU-Protection will be shutdown, because it received BPDU packet!
Jul 20 2022 20:39:45-08:00 SW3 %%01PHY/1/PHY(l)[5]: Ethernet0/0/1: change status to down
(15)改进点7:保护功能(2)
⦁ 由于维护人员的错误配置或网络中的恶意攻击,根桥有可能会收到优先级更高的RST BPDU,使得根桥失去根地位,从而引起网络拓扑结构的错误变动。这种拓扑变化,会导致原来应该通过高速链路的流量被牵引到低速链路上,造成网络拥塞。
⦁ 如上图所示:
⦁ 网络稳定时,SW1为根桥,向下游设备发送最优RST BPDU。
⦁ 如果SW2被恶意用户侵占,例如恶意修改SW2的桥优先级,使得SW2的桥优先级优于SW1,此时SW2会主动发送自己的RST BPDU。
⦁ 当SW1的指定端口收到该RST BPDU后,会重新进行生成树计算,而SW1也会失去根桥的地位,引起拓扑变动。
(16)改进点7:保护功能(3)
(17)改进点7:保护功能(4)
⦁ 交换设备在接收到TC置位的RST BPDU报文后,会执行MAC地址表项的删除操作。如果有人伪造TC置位的RST BPDU报文恶意攻击交换设备时,交换设备短时间内会收到很多RST BPDU报文,频繁的删除操作会给设备造成很大的负担,给网络的稳定带来很大隐患。
⦁ 如上图所示:
⦁ 如果SW3被恶意用户侵占,伪造大量TC置位的RST BPDU并向外发送。SW2收到这些RST BPDU后,会频繁执行MAC地址表项的删除操作,形成巨大负担。
4.RSTP的工作过程
(1)RSTP拓扑收敛过程(1)
⦁ RSTP收敛与STP收敛过程类似。
⦁ 网络初始化时,网络中所有的RSTP交换机都认为自己是“根桥”,并设置每个端口都为指定端口,发送RST BPDU。其中SW1的桥ID最优,最终会被选举为根桥。
(2)RSTP拓扑收敛过程(2)
⦁ 每个认为自己是“根桥”的交换机生成一个RST BPDU报文来协商指定网段的端口状态,此RST BPDU报文Flag字段里面的Proposal位需要置位。
⦁ 当一个端口收到RST BPDU报文时,此端口会比较收到的RST BPDU报文和本地的RST BPDU报文。如果本地的RST BPDU报文优于接收的RST BPDU报文,则端口会丢弃接收的RST BPDU报文,并发送Proposal置位的本地RST BPDU报文来回复对端设备。
⦁ 如图,RSTP上游链路的设备互联端口收敛过程,以SW1与SW2为例。
(3)RSTP拓扑收敛过程(3)
5.RSTP的基本配置
(1)RSTP的基本配置命令(1)
(2)RSTP的基础配置命令(2)
⦁ 配置接口路径开销:
⦁ dot1d-1998:指定路径开销值的计算方法是IEEE 802.1d-1998标准方法。使用IEEE 802.1d-1998标准方法时取值范围是1~65535。
⦁ dot1t:指定路径开销值的计算方法是IEEE 802.1t标准方法。使用IEEE 802.1t标准方法时取值范围是1~200,000,000。
⦁ legacy:指定路径开销值的计算方法是华为计算方法。使用华为计算方法时取值范围是1~200,000。
(3)RSTP的基础配置命令(3)
(4)RSTP的保护功能配置命令(1)
(5)RSTP的保护功能配置命令(2)
⦁ 配置后,在stp tc-protection interval指定的时间内,设备只会处理stp tc-protection threshold指定数量的拓扑变化报文,对于其他的报文会延迟处理,所以可能会影响生成树的收敛速度。例如,时间设定为10秒,阈值设定为5,则设备收到拓扑变化报文后,在10秒内只会处理最开始收到的5个拓扑变化报文,对于后面收到的报文则会等10秒超时后再统一处理。
6.配置案例
在上述三台交换机上部署RSTP,以便消除网络中的二层环路。
通过配置实现:
将SW1指定为根桥,SW2为备份根桥。
与PC相连的端口不参与RSTP计算,将其设置为边缘端口。
配置根保护和BPDU保护功能,实现对设备或链路的保护。
配置如下:
开启rstp的功能
[czySW1]stp mode rstp
[czySW1]stp enable
[czySW1]stp root primary
[czySW2]stp mode rstp
[czySW2]stp enable
[czySW2]stp root secondary
[czySW3]stp mode rstp
[czySW3]stp enable
SW3开启边缘端口
[czySW3-Ethernet0/0/1]stp edged-port enable
SW1开启根保护功能
[czySW1-GigabitEthernet0/0/1]stp root-protection
[czySW1-GigabitEthernet0/0/2]stp root-protection
SW3开启BPDU保护功能
[czySW3]stp bpdu-protection
7.总结
Discarding状态:不转发用户流量也不学习MAC地址
Learning状态:不转发用户流量但是学习MAC地址
Forwarding状:既转发用户流量又学习MAC地址
四种保护功能:
BPDU保护:交换设备上启动了BPDU保护功能后,如果边缘端口收到RST BPDU,
边缘端口将被error-down,但是边缘端口属性不变,同时通知网管系统。
根保护(Root)保护:
对于启用根保护功能的指定端口,其端口角色只能保持为指定端口
一旦启用根保护功能的指定端口收到优先级更高的RST BPDU时,端口将进入Discarding状态,不再转发报文。
经过一段时间 (通常为两倍的Forward Delay),如果端口一直没有再收到优先级较高的RST BPDU,端口会自动恢复到正常的Forwarding大态
根保护功能确保了根桥的角色不会因为一些网络问题而改变。
环路保护:
在启动了环路保护功能后,如果根端口或Alternate端口长时间收不到来自上游设备的BPDU报文时,则向网管发出通知信息(此时根端口会进入Discarding状态,
角色切换为指定端而Alternate 端口则会一直保持在,Discarding状态(角色也会切换为指定端口)不转发报文,从而不会在网络中形成环路
直到链路不再拥塞或单向链路故障恢复,端口重新收到BPDU报文进行协商,并恢复到链路拥塞或者单向链路故障前的角色和状态。
防TC-BPDU攻击
启用防TC-BPDU报文攻击功能后,在单位时间内交换设备处理TCBPDU报文的次数可配置
如果在单位时间内,交换设备在收到TC BPDU报文数量大于配置的闯值,那么设备只会处理阀值指定的次数
对于其他超出闽值的TCBPDU报文,定时器到期后设备只对其统一处理一次。这样可以避免频繁的删除MAC地址表项,从而达到保护设备的目的
MSTP
Forwarding: 包括根端口、指定端口、Master端口、域边缘端口
Learning: 包括根端口、指定端口、Master端门、域边缘端口
Discarding: 包括根端口、指定端口、Master端口、域边缘端口、Alternate端口、Backup端口