RSTP

发布时间 2023-03-24 22:30:49作者: 0x1e61

RSTP

为什么需要RSTP

  随着局域网规模的不断增长,STP拓扑收敛速度慢的问题逐渐凸显,因此,IEEE在2001年发布了802.1w标准,基于STP协议,定义了RSTP(Rapid Spanning Tree Protocol)。

 

STP协议的收敛速度慢主要体现在:

  STP算法是被动的算法,依赖定时器等待的方式判断拓扑变化。

  STP算法要求在稳定的拓扑中,由根桥主动发出配置BPDU报文,非根桥设备只能被动 中继配置BPDU报文将其并传遍整个STP网络。

此外,STP协议也没有细致区分端口状态和端口角色。例如,从用户的角度来说,Listening、Learning和Blocking状态都不转发用户流量,三种状态没有区别;从使用和配置的角度来说,端口之间最本质的区别在于端口的角色,而不在于端口状态。而网络协议的优劣往往取决于协议是否对各种情况加以细致区分。

 

因此,针对STP的以上不足,RSTP所做的改进有:

  新增了2种端口角色,删除了3种端口状态,并将端口状态和端口角色解耦。而且在配置BPDU的格式中,充分利用Flag字段,明确了端口角色。

 

配置BPDU的处理方式发生了变化。

  拓扑稳定后,对于非根桥设备,无论是否收到根桥传来的配置BPDU报文,都会自主地按照Hello Timer规定的时间间隔发送配置BPDU

  如果一个端口在超时时间(超时时间=Hello Time × 3 × Timer Factor)内没有收到上游设备发送过来的配置BPDU,那么该设备认为与此邻居之间的协商失败。而不像STP那样需要先等待一个Max Age。

 

引入快速收当一个端口收到上游的指定桥发来的RST BPDU报文时,该端口会将其与自身存储的RST BPDU进行比较。如果该端口存储的RST BPDU的优先级较高,则直接丢弃收到的RST BPDU,并立即向上游设备回应自身存储的RST BPDU。当上游设备收到回应的RST BPDU后,会根据其中相应的字段立即更新自己存储的RST BPDU。由此,RSTP处理次等BPDU报文不再依赖于任何定时器通过超时解决拓扑收敛,从而加快了拓扑收敛。敛机制,包括Proposal/Agreement机制、根端口快速切换机制、新增边缘端口。

 

引入多种保护功能,包括BPDU保护、根保护、环路保护、防TC-BPDU攻击。

RSTP的端口角色和端口状态

RSTP的端口角色

如图14-9所示,RSTP的端口角色共有4种:根端口、指定端口、Alternate端口(根端口备份)和Backup端口(指定端口备份),与STP相比,新增加了2种端口角色。

图14-9 端口角色示意图

RSTP中根端口、指定端口的作用与STP协议中定义的根端口、指定端口的作用相同,Alternate端口和Backup端口如表14-7所示。

表14-7 Alternate端口和Backup端口

分类

Alternate端口

Backup端口

从配置BPDU报文发送角度来看

由于学习到其它网桥发送的配置BPDU报文而阻塞的端口

由于学习到自己发送的配置BPDU报文而阻塞的端口

从用户流量角度来看

提供了从指定桥到根的另一条可切换路径,作为根端口的备份端口

作为指定端口的备份,提供了另一条从根桥到相应网段的备份通路

给一个RSTP域内所有端口分配角色的过程就是整个拓扑收敛的过程。

另外,由于端口角色的变更,配置BPDU报文格式也有相应的改变,充分利用了STP协议报文中的Flag字段,明确了端口角色:

Type字段,配置BPDU类型不再是0而是2,所以运行STP的设备收到RSTP的配置BPDU时会丢弃。

Flags字段,使用了原来保留的中间6位,这样改变的配置BPDU叫做RST BPDU,如图14-10所示。

RSTP的端口状态

不同于STP的5种端口状态,RSTP将端口状态缩减为3种。根据端口是否转发用户流量和学习MAC地址,端口状态可分为:

Discarding:端口既不转发用户流量也不学习MAC地址;

Learning:端口不转发用户流量但是学习MAC地址;

Forwarding:端口既转发用户流量又学习MAC地址。

表14-8显示了RSTP与STP端口状态的对应关系,以及各种端口角色能够具有的端口状态,因为端口状态端口角色没有必然联系的

表14-8 STP与RSTP端口状态角色对应表

STP端口状态

RSTP端口状态

端口角色

Forwarding

Forwarding

包括根端口、指定端口

Learning

Learning

包括根端口、指定端口

Listening

Discarding

包括根端口、指定端口

Blocking

Discarding

包括Alternate端口、Backup端口

Disabled

Discarding

包括Disable端口

RSTP如何实现快速收敛

RSTP的拓扑变化机制

  在一个运行RSTP的网络中,检测拓扑是否发生变化只有一个标准:一个非边缘端口迁移到Forwarding状态

一旦检测到拓扑发生变化,设备将进行如下处理:

  1.为本交换设备的所有非边缘指定端口根端口启动一个TC While Timer,该计时器值是Hello Time的两倍。

  2.在这个时间内,清空所有端口上学习到的MAC地址。同时,由非边缘指定端口和根端口向外发送RST BPDU,其中TC置位。一旦TC While Timer超时,则停止发送RST BPDU。

 

其他交换设备接收到RST BPDU后,清空所有端口学习到MAC地址,除了收到RST BPDU的端口。然后也为自己所有的非边缘指定端口和根端口启动TC While Timer,重复上述过程。

这样就实现了RST BPDU在网络中的泛洪。

相比于STP,RSTP的一个突出优势就在于快速收敛能力,而RSTP实现快速收敛关键在于引入了Proposal/Agreement机制根端口快速切换机制边缘端口

 

Proposal/Agreement机制

Proposal/Agreement机制(建议/应许)简称P/A机制,其目的是使一个指定端口尽快进入Forwarding状态。如图14-11所示,根桥S1和S2之间新添加了一条链路。在当前状态下,S2的另外几个端口p2是Alternate端口,p3是指定端口且处于Forwarding状态,p4是边缘端口。

图14-11 Proposal/Agreement过程示意图

新链路连接成功后,P/A机制协商过程如下:

  1. p0和p1两个端口马上都先成为指定端口,发送RST BPDU。

  2. S2的p1口收到更优的RST BPDU,马上意识到自己将成为根端口,而不是指定端口, 停止发送RST BPDU。

  3. S1的p0进入Discarding状态,于是发送的RST BPDU中把Proposal和Agreement置 1。

  4. S2收到根桥发送来的携带Proposal的RST BPDU,开始将自己的所有端口进入sync变 量置位(即同步变量:临时阻塞除边缘端口外的其他端口)。

    为什么需要sync变量置位?阻塞非根端口来保证不会出现环路,防止再继续往下游发 送RST BPDU导致可能出现的环路

  5. p2已经阻塞,状态不变;p4是边缘端口,不参与运算;所以只需要阻塞非边缘指定端 口p3。

  6. 各端口的sync变量置位后,p2、p3进入Discarding状态,p1进入Forwarding状态并 向S1返回Agreement位置位的回应RST BPDU。

  7. 当S1判断出这是对刚刚发出的Proposal的回应,于是端口p0马上进入Forwarding状 态。

 

下游设备继续执行P/A协商过程。

  事实上对于STP,指定端口的选择可以很快完成,主要的速度瓶颈在于:为了避免环路,必须等待足够长的时间,使全网的端口状态全部确定,也就是说必须要等待至少一个Forward Delay所有端口才能进行转发。而RSTP的主要目的就是消除这个瓶颈,通过阻塞自己的非根端口来保证不会出现环路。而使用P/A机制加快了上游端口转到Forwarding状态的速度。

注意:

  P/A机制要求两台交换设备之间链路必须是点对点的全双工模式。一旦P/A协商不成功,指定端口的选择就需要等待两个Forward Delay,协商过程与STP一样。

 

根端口快速切换机制

  如果RSTP网络中一个根端口失效,那么网络中最优的Alternate端口将成为根端口并直接进入Forwarding状态。因为通过这个Alternate端口连接的网段上必然有个指定端口可以通往根桥。

如图14-12所示,S1为根桥,S2为备份根桥,S3的GE1/0/2为Alternate端口。S3的根端口GE1/0/1接口故障:

STP模式时,S3的GE1/0/2会先切换成根端口并进入Listening状态,等待一个Forward Delay时间(缺省值为15秒)后进入Learning状态,继续等待一个Forward Delay时 间(缺省值为15秒)后才进入Forwarding状态。

  RSTP模式时,S3的GE1/0/2会切换成根端口,并直接进入Forwarding状态。

  相比较STP模式时接口需要等待2*Forward Delay时间才能进入Forwarding状态,RSTP模式时的根端口快速切换机制使接口直接切换成Forwarding状态,减少业务流量丢包。

图14-12 根端口快速切换机制

边缘端口的引入

  在RSTP里面,如果某一个指定端口位于整个网络的边缘,即不再与其他交换设备连接,而是直接与终端设备直连,这种端口叫做边缘端口。

  边缘端口不参与RSTP运算,可以由Disable直接转到Forwarding状态,且不经历时延,就像在端口上将STP禁用。但是一旦边缘端口收到配置BPDU,就丧失了边缘端口属性,成为普通STP端口,并重新进行生成树计算,从而引起网络震荡。

 

RSTP的保护功能

为了保持网络运行的稳定,RSTP提供了以下几种保护功能:

BPDU保护

  在RSTP网络中,正常情况下,边缘端口不会收到RST BPDU,启用了BPDU保护功能后,如果有人伪造RST BPDU恶意攻击交换机,边缘端口将被Error-Down。

  如图14-13所示,S3上将与PC相连的端口设置为边缘端口,当边缘端口接收到RST BPDU时,交换机会自动将边缘端口设置为非边缘端口,并重新进行生成树计算。当攻击者发送的RST BPDU报文中的桥优先级高于现有网络中根桥优先级时会改变当前网络拓扑,可能会导致业务流量中断。这是网络中一种简单的拒绝服务DoS(Denial of Service)攻击方式。

图14-13 BPDU保护

交换机上启动了BPDU保护功能后,如果边缘端口收到RST BPDU,边缘端口将被error-down,但是边缘端口属性不变,同时通知网管系统。交换机上会打印如下日志信息:

  MSTP/4/BPDU_PROTECTION:This edged-port [port-name] that enabled BPDU-Protection will be shutdown, because it received BPDU packet!

根保护

  由于维护人员的错误配置或网络中的恶意攻击,网络中合法根桥有可能会收到优先级更高的RST BPDU,使得合法根桥失去根地位,从而引起网络拓扑结构的错误变动。这种不合法的拓扑变化,会导致原来应该通过高速链路的流量被牵引到低速链路上,造成网络拥塞。

  如图14-14所示,DeviceA和DeviceB处于网络核心层,两者间的链路带宽为1000M,DeviceA为网络中的根桥。DeviceC处于接入层,DeviceC和DeviceA、DeviceC和DeviceB之间的链路带宽为100M。正常情况下,DeviceB和DeviceC之间的链路被阻塞。

  当DeviceD新接入DeviceC时,由于DeviceD的桥优先级高于DeviceA,此时DeviceD会被选举为新的根桥,如果两个核心交换机DeviceA和DeviceB之间的千兆链路被阻塞,会导致VLAN中的流量都通过两条100M链路传输,可能会引起网络拥塞及流量丢失。

图14-14 根保护

此时可以在DeviceC连接DeviceD的端口上,配置根保护。对于启用Root保护功能的指定端口,其端口角色只能保持为指定端口。一旦启用Root保护功能的指定端口收到优先级更高的RST BPDU时,端口状态将进入Discarding状态,不再转发报文。在经过一段时间(通常为两倍的Forward Delay),如果端口一直没有再收到优先级较高的RST BPDU,端口会自动恢复到正常的Forwarding状态。

说明:

  Root保护功能只能在指定端口上配置生效。

环路保护

  在运行RSTP协议的网络中,根端口和其他阻塞端口状态是依靠不断接收来自上游交换设备的RST BPDU维持。当由于链路拥塞或者单向链路故障导致这些端口收不到来自上游交换设备的RST BPDU时,此时交换设备会重新选择根端口。原先的根端口会转变为指定端口,而原先的阻塞端口会迁移到转发状态,从而造成交换网络中可能产生环路。

  如图14-15所示,当BP2-CP1之间的链路发生拥塞时,DeviceC由于根端口CP1在超时时间内收不到来自上游设备的BPDU报文,Alternate端口CP2放开转变成了根端口,根端口CP1转变成指定端口,从而形成了环路。

图14-15 链路发生拥塞情况拓扑的变化

  在启动了环路保护功能后,如果根端口或Alternate端口长时间收不到来自上游设备的BPDU报文时,则向网管发出通知信息(此时根端口会进入Discarding状态,角色切换为指定端口),而Alternate端口则会一直保持在阻塞状态(角色也会切换为指定端口),不转发报文,从而不会在网络中形成环路。直到链路不再拥塞或单向链路故障恢复,端口重新收到BPDU报文进行协商,并恢复到链路拥塞或者单向链路故障前的角色和状态。

交换机上会打印如下日志信息:

  MSTP/4/LOOP_GUARD:MSTP process [process-id] Instance[instance-id]'s LOOP-Protection port [port-name] did not receive message in prescriptive time!

说明:

  环路保护功能只能在根端口或Alternate端口上配置生效。

防TC-BPDU攻击

  交换设备在接收到TC BPDU报文后,会执行MAC地址表项和ARP表项的删除操作。如果有人伪造TC BPDU报文恶意攻击交换设备时,交换设备短时间内会收到很多TC BPDU报文,频繁的删除操作会给设备造成很大的负担,给网络的稳定带来很大隐患。

  启用防TC-BPDU报文攻击功能后,在单位时间内,交换设备处理TC BPDU报文的次数可配置。如果在单位时间内,交换设备在收到TC BPDU报文数量大于配置的阈值,那么设备只会处理阈值指定的次数。对于其他超出阈值的TC BPDU报文,定时器到期后设备只对其统一处理一次。这样可以避免频繁的删除MAC地址表项和ARP表项,从而达到保护设备的目的。

RSTP与STP的兼容性

RSTP可以和STP互相兼容,但是此时会丧失快速收敛等RSTP优势。

  当一个网段里既有运行STP的交换设备又有运行RSTP的交换设备,STP交换设备会忽略RSTP BPDU;运行RSTP的交换设备在某端口上接收到运行STP的交换设备发出的配置BPDU,在两个Hello Time时间之后,便把自己的端口转换到STP工作模式,发送配置BPDU,从而实现了互相兼容。

  在华为技术有限公司的数据通信设备上可以配置运行STP的交换设备被撤离网络后,运行RSTP的交换设备上与之相连的端口可迁移回到原来的RSTP工作模式。

RSTP配置命令

基础配置同STP配置命令行。

[接口视图] stp point-to-point { auto | force-false | force-true}
//配置指定端口的链路类型。 缺省情况下,指定端口自动识别是否与点对点链路相连,点对点链路支持快速收敛。
//如果当前以太网端口工作在全双工模式,则当前端口相连的链路是点到点链路,选择参数force-true实现快速收敛。
//如果当前以太网端口工作在半双工模式,可通过执行命令stp point-to-point force-true强制链路类型为点对点链路,实现快速收敛。

[接口视图] stp transmit-limit packet-number
//配置端口在单位时间内BPDU的最大发送数目。缺省情况下,端口每秒BPDU的最大发送数目为6。
//如果设备的所有端口都需要配置每秒发送BPDU的最大数目。可以在系统视图下通过执行该命令实现。

stp mckeck //执行MCheck操作。用来对端口执行从STP模式自动迁移回原来的RSTP/MSTP模式的操作。

stp edged-port default
//配置当前设备上的所有端口为边缘端口。


stp bpdu-filter enable
//配置当前端口为BPDU filter端口。

stp bpdu-protection
//配置交换设备边缘端口的BPDU保护功能

stp tc-Protection
//使能交换设备对TC类型BPDU报文的保护功能。

stp tc-Protection threshold 1
//配置设备处理阈值指定数量的拓扑变化报文所需的时间。

stp tc-Protection threshold 1
//配置交换设备在收到TC类型BPDU报文后,单位时间内,处理TC类型BPDU报文并立即刷新转发表项的阈值。
//缺省情况下,设备在指定时间内处理拓扑变化报文的最大数量是1。

stp root-protection
//配置交换设备的Root保护功能。
//当端口的角色是指定端口时,配置的Root保护功能才生效。
//配置了根保护的端口,不可以配置环路保护。

stp loop-protection
//配置交换设备根端口或Alternate端口的环路保护功能。

注意:

  在全局模式下配置边缘端口和BPDU报文过滤功能后,设备上所有的端口不会主动发送BPDU报文,且均不会主动与对端设备直连端口协商,所有端口均处于转发状态。这将可能导致网络成环,引起广播风暴,请用户慎用。

  在端口模式下配置边缘端口和BPDU报文过滤功能后,端口将不处理、不发送BPDU报文。该端口将无法成功与对端设备直连端口协商STP协议状态,请慎用。

  如果用户希望被error-down的边缘端口可自动恢复,可通过配置使能端口自动恢复功能,并设置延迟时间,即在系统视图下执行命令error-down auto-recovery cause bpdu-protection interval interval-value,使能端口自动恢复为Up的功能,并设置端口自动恢复为Up的延时时间。使被关闭的端口经过延时时间后能够自动恢复。

  当端口的角色是指定端口时,配置的Root保护功能才生效。

  配置了根保护的端口,不可以配置环路保护。