1.RSTP基本概述


1.1 与STP的不同

RSTP - 图1

  • RSTP(Rapid Spanning Protocol)快速生成树,STP协议虽然能够解决环路问题,但是收敛速度过慢,影响了用户通信质量。如果STP网络的拓扑结构频繁变化,网络也会频繁失去连通性,从而导致用户通信频繁中断,快速生成树协议(Rapid Spanning Tree Protocol):802.1W由802.1D发展而成,基于P/A机制,这种协议在网络结构发生变化时,能够更快的收敛网络。

1.2 端口角色

RSTP端口角色.png
相对于传统STP三种端口角色,RSTP重新定义了五种端口角色,分别为:

  1. Root Port:根端口RP
  2. Designate Port:指定端口DP
  3. Alternate Port:替代端口AP
  4. Backup Port:备份端口BP
  5. Edge Port:边缘端口
  • 根端口和指定端口与STP协议中的定义相同,Alternate和Backup端口的描述如下:
    • 从配置BPDU报文发送角度来看:
      • Alternate端口就是由于学习到其它网桥发送的更优配置BPDU报文从而阻塞的端口。
      • Backup端口就是由于学习到自己发送的更优配置BPDU报文从而阻塞的报文。
    • 从用户流量角度来看
      • Alternate端口提供了从指定桥到根的另一条可切换路径,作为根端口的备份端口。
      • Backup端口作为指定端口的备份,提供了另一条从根桥到相应网段的备份通路。

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

如何区分预备端口AP和备份端口BP:
每条链路上只有一个指定端口,所以在一条链路上拥有DP端口的交换机为指定交换机

  • 如果从另外一个端口收到的BPDU中的Bridge ID是自身的Bridge ID,则表明当前的BPDU是从自身设备发出去的,则收到此BPDU的接口为BP。
  • 如果从另外一个端口收到的BPDU中的Bridge ID不是自身的Bridge ID。则为AP。
    • 如果该端口不属于所连接网段的指定交换机,则端口状态设置为预备端口(Alternate Port)
    • 如果该端口属于所连接网段的指定交换机,则端口状态设置为预备端口(Backup Port)

拓扑.jpg
(1)Root Port

  • 根端口,离根桥最近的非根交换机端口,每台非根交换机只有一个根端口,根交换机没有根端口。根端口接收BPDU,并转发数据帧。
  • 每个STP网络中,都会存在一个根桥,其它交换机为非根交换机,根桥或者根交换机位于整个逻辑树的根部,是STP网络的逻辑中心,非根桥是根桥的下游设备,根端口是非根交换机去往根桥路径的最优端口,在一个允许STP协议的交换机上最多只有一个根端口,但根桥上没有根端口。

RP端口是接收到最优BPDU的端口,后续的端口选举都依照这份BPDU进行选举,如果RP端口Down掉,则所有选举出来的端口都将无效,交换机会将所有端口变为Listenting状态,重新选举根端口并生成新的BPDU进行重新的选举。

RP端口失效.jpg

(2)Designated Port:**

  • 指定端口,用于数据和BPDU的转发,指定端口接收转发BPDU,并转发数据帧。
  • 指定端口是交换机所连接链路转发配置BPDU的端口,每个网段有且只能有一个指定端口。一般情况下,根桥的每个端口总是指定端口。

(3)Alternate Port:
1.jpg

  • 预备端口,在RSTP环境中,AP作用作为同一台交换机上的RP的替代端口,当交换机发现自己的某个RP端口挂掉后,会立即将AP端口转为RP。

(4)Backup Port:
2.jpg

  • 一台交换机上存在指定端口,则为指定交换机,和指定端口存在同一链路上,则此接口为Backup Port,否则为AP。
  • 备份端口,在RSTP环境中,BP作用作为DP的替代端口(使用双线路连接HUB做冗余),当交换机发现自己的某个DP端口挂掉后。在经历3倍的Hello时间*Time factos(HUAWEI为18S)后将BP端口变为DP端口并直接进入Forwarding状态。

(5)Edge Port:

  • 边缘端口,用于连接PC的端口,边缘端口不参与STP端口的选举,直接进入Forwarding状态(传统的STP也可以配置此端口,或直接在接口下使用命令STP Disable关闭端口STP功能)
  • 配置边缘端口的好处在于端口可以直接进入Forwarding状态,并且当边缘端口Down掉,不会进行P/A机制的重新收敛,不会发送TC置位的BPDU,减轻网络的负担。
  • 配置边缘端口后,此端口还是会继续发送BPDU给下游设备,目的为了防止环路,如果用户端存在环路,将此报文重新引回此交换机,此时边缘端口回变成非边缘端口并进行选举。
  • 在实际中,当企业存在大量的用户,上班时间同时开机,当交换机的一个端口有Down变为UP,会触发交换机发送TC置位的BPDU通告其它交换机刷新MAC表项,所以此时使用Edge Port可以避免这种现象。

1.3 端口状态

端口状态.png

  • RSTP的状态规范把原来的5种状态缩减为3种。根据端口是否转发用户流量和学习MAC地址来划分:
    • 如果不转发用户流量也不学习MAC地址,那么端口状态就是Discarding状态。
    • 如果不转发用户流量但是学习MAC地址,那么端口状态就是Learning状态。
    • 如果既转发用户流量又学习MAC地址,那么端口状态就是Forwarding状态。

RSTP计算过程:

  • 端口在Discarding状态下完成端口角色的确定:
    • 当端口角色确定为根端口和指定端口后,经过Forwarding Delay后,端口进入Learning状态,处于Learning状态的端口其处理方式和STP相同,此期间端口开始学习MAC地址并在Forwarding Delay后进入Forwarding状态,开始转发数据。实际上,RSTP会通过其它方式加快这个过程。
    • 当端口角色确定为Alternate后,端口会维持在Discarding状态。

1.4 BPDU中的Flag

BPDU中Flag.png

  • 配置BPDU格式的改变,充分利用了STP协议报文中的Flag字段,明确了端口角色,在配置BPDU报文的格式上,除了保证和STP格式基本一致之外,RSTP作了一些小变化:
    • Type字段,配置BPDU类型不再是0而是2,所以运行STP的设备收到RSTP的配置BPDU时会丢弃。
    • Flags字段,使用了原来保留的中间6位。这样改变的配置BPDU叫做RST BPDU。

RSTP中BPDU的Flag字段解释:

  • 第0位为TC标志位,和STP相同。
  • 第1位为Proposal标志位,该位置位表示该BPDU为快速收敛机制中的Proposal报文。
  • 第2位和第3位为端口角色标志位:
    • 00:表示端口角色为未知;
    • 01:表示端口角色为根端口;
    • 10:表示端口角色为Alternate或Backup端口;
    • 11:表示端口为指定端口。
  • 第4位为Learning标志位,该位置位表示端口处于Learning状态。
  • 第5位为Forwarding标志位,该位置位表示端口处于Forwarding状态。
  • 第6位为Agreement标志位,该位置位表示该BPDU位快速收敛机制中的Agreement报文。
  • 第7位为TCA标志位,和STP相同。

1.5 配置BPDU的处理

配置BPDU的处理.png
BPDU处理发生的变化

  • 拓扑稳定后,配置BPDU报文的发送方式
    • 在STP中拓扑稳定后,根桥按照Hello Timer规定的时间间隔发送配置BPDU。其它非根桥设备在收到上游设备发送过来的配置BPDU后,才会触发发出配置BPDU,此方式使得STP协议计算复杂且缓慢。RSTP对此进行了改进,即在拓扑稳定后,无论非根桥设备是否接收到根桥传来的配置BPDU报文,非根桥仍然按照Hello Timer规定的时间间隔发送配置BPDU,该行为完全由每台设备自主进行。
  • 更短的BPDU超时计时
    • 如果一个端口连续3个Hello Time时间内没有收到上游设备发送过来的配置BPDU,那么该设备认为与此邻居之间的协商失败。而不像STP那样需要先等待一个Max Age。
  • 次优BPDU的处理
    • 当一个端口收到上游的指定桥发来的RST BPDU报文时,该端口会将自身存储的RST BPDU与收到的RST BPDU进行比较。如果该端口存储的RST BPDU的优先级高于收到的RST BPDU,那么该端口会直接丢弃收到的RST BPDU,立即回应自身存储的RST BPDU。当上游设备收到下游设备回应的RST BPDU后,上游设备会根据收到的RST BPDU报文中相应的字段立即更新自己存储的RST BPDU。由此,RSTP处理次优BPDU报文不再依赖于任何定时器通过超时解决拓扑收敛,从而加快了拓扑收敛。

1.6 RSTP的BPDU

1.6.1 配置BPDU

  • 与传统的BPDU报文中除Flag外,其余BPDU内容相同,传统STP的BPDU中的Flag位只有TCA和TC两位,RSTP的BPDU在此基础上增加了多位Flag字段。
  • RSTP模式中,非根桥设备无论是否接收到根桥发送的配置BPDU,都会按照Hello Timer规定的时间间隔发送配置BPDU。

BPDU报文.jpg

  1. Protocol ID:协议ID,该值总为0
  2. Protocol Version ID:协议版本ID,STP的版本(802.1D为0;802.1W为2;802.1S为3)
  3. BPDU Type:BPDU类型,分为两种,配置BPDU为0,TCN BPDU为80
  4. Flags:分为七个置位符:

    • TCA:Topology Change Acknowledgment,拓扑变更确认信息
    • Agreement:PA机制中的Agreement置位符
    • Forwarding:端口状态“转发”
    • Learning:端口状态“学习” | 状态 | Forwarding | Learning | | —- | —- | —- | | Discarding | 0 | 0 | | Leaning | 0 | 1 | | Forwarding | 1 | 1 |

    • Port Role:端口角色,2Bit,,可以表示四种角色: | 组合数值 | 含义 | | —- | —- | | 00 | Unknown | | 01 | Alternate Port/Backup Port | | 10 | Root Port | | 11 | Designated Port |

    • Proposal:P/A机制中的Proposal置位符

    • TC:Topology Change:拓扑变更
  5. Root ID:根桥的ID。由三部分组成:
    • 4bit的优先级值
    • 12bit拓展系统ID(实例ID,默认为0)
    • 8Byte系统ID(MAC地址)
  6. RPC:Root Path Cost:根路径开销
  7. Bridge ID:转发者的ID,每经过一个交换机,Bridge ID会变为此交换机的ID,由三部分组成:
    • 4bit的优先级值
    • 12bit拓展系统ID(实例ID,默认为0)
    • 8Byte系统ID(MAC地址)
  8. Port ID:端口ID,每经过一个交换机的端口,Port ID变为此端口的ID
  9. Message Age:配置BPDU在网络中传播的生存期,默认每经过一条,Message Age+1
  10. Max Age:Message Age最大老化时间,默认为20S
  11. Hello Time:探测时间,默认为2S
  12. Forward Delay:转发延迟,默认为15S

1.6.2 TC BPDU

  • 传统STP中,只有根桥才会发送TC置位的Configuration BPDU通告下游交换机用来缩短MAC地址表的生存时间。RSTP中,不存在TCN BPDU,一旦交换机发现自己的端口和对端交换机端口链路出现问题后,会立即向Designated Port和Root Port发送将TC置位的Configuaration BPDU通告其余交换机,其余交换机收到TC置位的BPDU后,会立即删除除接收到TC BPDU的接口和边缘端口以外的端口的MAC表清空,整个过程持续4S.

    由于从某个端口收到TC置位的BPDU,说明该链路有效,所以会保留收到Configuration BPDU端口对应的MAC地址映射和配置边缘端口的MAC地址映射


2.RSTP快速收敛

2.1 端口状态迁移原则

3.png

  • 根据选举规则,确定端口角色之后,需要根据端口角色设置端口状态。
  • 将端口状态从Forwarding状态迁移到Discarding状态(从根端口或者指定端口变成预备端口或者备份端口)是不会出现环路风险的,可以不经过等待立即转换。
  • 将端口状态从Forwarding状态迁移到Forwarding状态(从根端口变成指定端口或者从指定端口变成根端口)也不会引起环路风险,也可以不经过等待立即转换
  • 端口状态迁移时能引起环路风险的是从Discarding状态迁移到Forwarding状态(从预备端口或者备份端口变成根端口或者指定端口),在STP中,从不转发状态迁移到Forwarding状态需要等待两次Forward Delay间隔才能迁移,以保证网络中需要进入不转发状态的端口有足够的时间完成计算。但是RSTP对此做了改进。
  • RSTP(快速生成树)的主要设计原则是,在没有临时环路风险的情况下,使原本处于不转发状态下的端口在成为指定端口或者根端口之后,尽可能快的进入Forwarding状态,加快收敛速度。

  • 因此,如何确认网络中有没有环路风险是RSTP的重要内容。


2.2 基本方法

4.png
STP收敛机制:

  • 在STP中,为了避免出现临时环路,端口从启动到进入转发状态默认需要等待30S的时间,也就是说STP只能依靠计时器被动的收敛。如果缩短端口从启动到转发的等待时间,可能会引起网络的不稳定。

RSTP快速收敛机制:

  • 边缘端口机制
    • 在RSTP中,如果某一个指定端口位于整个网路的边缘,即不再与其它交换设备连接,而是直接与终端设备直连,这种端口叫做边缘端口。边缘端口不接受处理配置BPDU。不参与RSTP运算,可以由Disable直接转到Forwarding状态,且不经历时延,就像在端口上将STP禁用。但是一旦边缘端口收到配置BPDU,就丧失了边缘端口属性,成为普通STP端口,并重新进行生成树计算,从而引起网络震荡。
  • 根端口快速切换机制
    • 如果网络中一个根端口失效,那么网络中最优的Alternate端口将成为根端口,进入Forwarding状态。因为通过这个Alternate端口连接的网段上必然有个指定端口可以通往根桥。
  • Proposal/Agreement机制——选举新的指定接口
    • 当一个端口被选举成为指定端口之后,在STP中,该端口至少要等待一个Forward Delay(Learning)时间才会迁移到Forwarding状态。而在RSTP中,此端口会先进入Discarding状态,再通过Proposal/Agreement机制快速进入Forwarding状态。
    • 这种机制必须在点到点全双工链路上使用
    • Proposal/Agreement机制简称P/A机制。

2.3 边缘端口机制

边缘端口.png
边缘端口机制:

  • 边缘端口连接的是终端,当网络拓扑发生变化时,边缘端口不会发生环路,所以边缘端口可以忽略两个Forwarding Delay,直接进入转发状态,无需任何延迟。
  • 边缘端口不接收处理配置BPDU,不参与RSTP计算,可以由Disable直接转到Forwarding状态,且不经历时延,就像在端口上将STP禁用。但是一旦边缘端口收到配置BPDU。就丧失了边缘端口属性,成为普通STP端口,并重新进行生成树计算,从而引起网络震荡。

2.4 根端口快速切换机制

根端口快速切换.png
根端口快速切换机制:

  • 在RSTP中,Alternate端口为根端口的备份。当该网桥的根端口失效时,网桥会选择最优的Alternate端口作为新的根端口,直接进入Forwarding状态。因为通过这个Alternate端口连接的网段上必然有个指定端口可以通往根桥

2.5 P/A机制

PA机制.png
P/A机制:

  • Proposal/Agreement机制,其目的是使一个指定端口尽快进入Forwarding状态。
  • P/A机制要求两台交换设备之间链路必须是点到点的全双工模式。一旦P/A协商不成功,指定端口的选择就需要等待两个Forwarding Delay,协商过程与STP一样。

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

    • P0和P1两个端口马上都先成为指定端口,发送RST BPDU。
    • S2的P1端口收到更优的RST BPDU,马上意识到自己将成为根端口。而不是指定端口,停止发送RST BPDU。
    • S1的P0进入Discarding状态,于是发送的RST BPDU中把Proposal置1。
    • S2收到根桥发送来的携带proposal的RST BPDU,开始将自己的所有端口进入sync变量置位。
    • P2已经阻塞,状态不变;P4是边缘端口,不参与运算;所以只需要阻塞非边缘指定端口P3。
    • P2、P3、P4都进入Discarding状态之后,各端口的synced变量置位,根端口P1的synced也置位,于是便向S1返回Agreement位置位的回应RST BPDU。该RST BPDU携带和刚才根桥发过来的BPDU一样的信息,除了Agreement位置位之外(Proposal位清零)。
    • 当S1判断出这是对刚刚发出的Proposal的回应,于是端口P0马上进入Forwarding状态。

2.6 P/A机制传递过程

PA机制传递过程.png

  • P/A过程可以向下游继续传递
  • 当S1和S2之间新增了一条链路后,P/A机制工作如下:
    • S1通过端口E1发送Proposal置位的RST BPDU消息给S2。
    • S2收到该更优的BPDU后,意识到E2为根端口,启用同步机制阻塞指定端口E1和E3以避免产生环路,然后将根端口设置为转发状态,并向S1发送Agreement消息。
    • S1收到Agreement消息后,指定端口E1马上进入转发状态。
    • S2向处于同步状态的非边缘指定端口E1和E3发送Proposal报文。
    • S3收到S2发送的Proposal报文后,判断E1为根端口,启动同步过程,由于S3下游均为边缘端口,所以已经实现了同步,因此S3直接向S2回复Agreement消息。
    • S2收到S3发送的Agreement消息后,端口E1马上进入转发状态。
    • S4的处理过程如S3。
    • S2收到S4发送的Agreement消息后,端口E3马上进入转发状态。
    • P/A过程结束。

2.7 P/A协商机制的前提——点到点链路

PA机制前提.png

  • 使用“Proposal-Agreement”的前提是泛洪这两种消息的链路均为点到点链路,点到点链路是指两个交换机直接相连的链路。
  • 之所以必须使用点到点链路是因为点到多点链路有环路风险。如图所示,SWA向外发出一个Proposal之后,由于SWC是网络边缘,因此迅速返回一个Agreement,使SWA的新指定端口进入转发状态,但是此时SWB、SWD和SWE等尚未完成Proposal-Agreement的泛洪过程,因此,网络中存在环路风险。所以使用此“Proposal-Agreement”要求交换机间链路必须为点到点链路。
  • 事实上,如果交换机间的链路没有被配置为点到点链路,泛洪过程会自动停止,需要从Discarding状态进入Forwarding状态的端口要等足够长时间(两倍Forward Delay)才能进入Forwarding状态。
  • 实质上,“Proposal-Agreement”机制是一种在点到点链路上的“触发计算-确认”机制,这种“触发计算-确认”过程在点到点链路上泛洪,一直到达网络末端(边缘交换机,即非根端口均为边缘端口)或者预备端口(Alternate Port,处于Discarding状态,表示环路已被打断)。

2.8 RSTP收敛过程

初次收敛

  • 初始状态

初始状态RSTP.jpg
每一台交换机启动RSTP后,都认为自己是“根桥”

  • 所有端口都为指定端口
  • 处于Discarding状态,防止临时的环路

  • 置位Proposal

置位Proposal.jpg

  • 交换设备互相发送Proposal置位的RST BPDU,SWA收到SWB(BID优先级小)的RST BPDU,会忽略,HUAWEI设备也会将Agreement置位,用来表示当前的网络类型为P2P全双工模式。

  • 同步

同步.jpg

  • SWB收到了更优的RST BPDU,于是停止发送RST BPDU,并开始执行同步,除边缘端口外的所有下游指定端口变为Discarding状态。

  • Agreement置位

Agreement置位.jpg

  • SWB阻塞所有非边缘端口之后,将RP端口变成Forwarding状态,将SWA(Root)的报文中的Bridge ID变为自己的Bridge ID,并将Agreement置位,发送给SWA。

    回送的这份Agreement置位的BPDU内容为SWA发送过来的BPDU,BPDU中的Bridge ID变为SWB,Port ID变为发往SWA的接口。

  • 根桥迁移到Forwarding状态:

13.jpg

  • SWA收到Agreement置位的RSTP BPDU后,指定端口立即从Discarding迁移到Forwarding状态。

  • P/A机制协商失败

  • 当进行到最后一段链路时,会将低Root ID的交换机端口置位AP端口,此时对端端口发送Proposal置位的Configuration BPDU,但是由于本端是AP端口,所以不会恢复Agreement置位的Configuration BPDU,所以此时对端认为它的对端不支持RSTP,所以采用传统的STP收敛方式,经历2倍的Forward Delay,进入Forwarding状态。

    由于AP链路并不转发数据,所以即使要30S才会收敛,也不会影响实际的数据转发。

  • 拓扑改变重新收敛

    • 如果RP端口失效,AP端口立即成为RP端口
    • 如果DP端口失效,BP端口立即成为DP端口
    • 如果收到一份次优的BPDU,立即进行端口的重新选举
    • 如果收不到BPDU,等待时间为Hello时间 3 Timer Factor(因自定义,HUAWEI为3=18S立即认为根桥失效,,重新进行收敛)
  • AP交换机RP端口失效

AP交换机RP端口失效.jpg

  • 非根交换机的根端口Down后,会立即将AP端口变为RP端口进入转发状态。并发送TC置位的BPDU通告邻居进行MAC地址表的删除。

  • DP交换机RP端口失效

image.png

  • LSW4的g0/0/1端口失效后,LSW4立刻认为自己为Root,将所有的端口变为discarding状态,并发送proposal置位的BPDU
  • LSW5收到proposal置位的BPDU后,与自身认为最有的BPDU进行比较,发现自身的(LSW3)更优,会将端口变为DP,并变为Discarding状态,发送最优的BPDU给LSW4,并将Proposal置位。
  • LSW4收到Proposal置位的BPDU后,发现优于自身的BPDU,同步所有端口,并将G0/0/3变为RP端口,并发送Agreement置位的BPDU给LSW5,LSW5收到后,将G0/0/3的状态变为Forwarding状态

MAC地址表删除:

  • 拓扑发生变化后,交换机会立刻从所有的指定端口发送TC置位的BPDU报文
  • 当上游交换机收到TC置位的BPDU后,只保留接收到TC置位端口的mac地址映射和配置边缘端口的MAC地址映射,删除其余的MAC地址表

DP端口失效

18S收敛:
image.png

  • 根交换机的DP端口失效后,在经历3倍Hello时间 * Time Factor(华为为18秒)后将BP端口变为DP端口进入转发状态,并发送TC置位的BPDU通告邻居进行MAC地址的删除

48S收敛:
2.png

  • LSW2的G0/0/2链路失效后,在经历3倍Hello时间 * Time Factor(华为为18S)后将BP端口变为DP,并且发送Proposal置位的BPDU进行P/A机制的协商,由于LSW3的G0/0/1接口为AP,不会恢复BPDU,所以导致LSW2的P/A协商失败,进入传统的收敛装填,30S后进入Forwarding装填,所以为18+30=48S

新根桥出现:
注**1**:拓扑变更的原则为:

  • 原先为Forwarding状态的端口变为Forwarding状态的端口,立刻转变为Forwarding
  • 原先为Discarding状态的端口变为Forwarding状态的端口,进入转发延迟或等到对端发送Alternate置位的Configuration BPDU进行确认后进入Forwarding状态

注**2AP端口变为RPDP只有收到新的AP交换机发送的Proposal置位的BPDU后才会进入Forwarding**状态

  • 如果网络中的AP端口变为DP或AP进入forwarding状态(最终状态),如果网络中新选举出的AP并没有达到收敛,此时如果老的AP直接进入转发状态,会造成环路,所以当AP变为DP或BP时,他会停留在Discarding状态,并一直等到新的AP交换机发送的Proposal置位的BPDU后才会进入Forwarding状态

image.png

  • 网络稳定的情况下,SW5的优先级更高,成为了新的根桥
  • SW5的G0/0/2由RP变为DP,依旧为Forwarding状态
  • SW5的G0/0/3由AP端口变为DP端口,从Discarding状态变为Forwarding(最终状态),为了防止临时环路,依旧停留在Discarding,并从G0/0/3端口发送Proposal置位的Configuration BPDU进行P/A协商
  • SW4收到Proposal置位的BPDU后,发现更优的Configuration BPDU,于是执行同步过程,除G0/0/3端口都变为Discarding状态,将GE0/0/3由原来的DP变为RP,并依旧保持Forwarding状态
  • 此时SW4和旧根桥SW3进行P/A机制的协商,SW4发送Proposal置位的Configuration BPDU,SW3发现SW4发送的Configuration BPDU(SW5的BPDU)优于自身,执行同步过程,发送Agreement置位的BPDU进行回复,SW5收到后,将GE0/0/2变为Forwarding状态,并继续向上游发送Agreement置位的BPDU,此时SW4会将GE0/0/1变为Forwarding状态

3.RSTP拓扑改变

3.1 RST BPDU的Flags字段设置——TCN

image.png

  • 对于RST BPDU中的Flags字段,第一位和第八位与STP使用的配置BPDU中的设置是一致的,第一位是拓扑改变标志,第八位是拓扑改变确认标志。
  • 在纯RSTP环境中,RSTP交换机使用设置了拓扑改变标志的RST BPDU表示拓扑改变通知,通知其他RSTP交换机网络拓扑发生了变化。
  • STP兼容环境中,RSTP交换机使用STP中的拓扑改变通知BPDU做为拓扑改变通知,通知其他STP交换机网络拓扑发生了变化。
  • 在RSTP中,Flags字段的第八位(拓扑改变确认标志)没有使用

3.2 RSTP拓扑改变处理

image.png

  • 在RSTP中检测拓扑是否发生变化只有一个标准:一个非边缘端口迁移到Forwarding状态。一旦检测到拓扑发生变化,将进行如下处理:
    • 为本交换设备的所有非边缘指定端口启动一个TC While Timer,该计时器值是Hello Time的两倍。在这个时间内,清空状态发生变化的端口上学习到的MAC地址。同时,由这些端口向外发送RST BPDU,其中TC置位。一旦TC While Timer超时,则停止发送RST BPDU
    • 其他交换设备接收到RST BPDU后,清空所有端口学习到MAC地址,除了收到RST BPDU的端口和边缘端口。然后也为自己所有的非边缘指定端口和根端口启动TC While Timer,重复上述过程。
    • 如此,网络中就会产生RST BPDU的泛洪。

3.3 RSTP拓扑改变举例

image.png
当一个RSTP交换机从一个处于Forwarding状态的端口上收到TCN之后,处理过程如下:

    1. 由于TCN也是一个RST BPDU,其中包含计算生成树的参数等信息,因此收到一个TCN之后,首先重新计算生成树(如果需要的话);
    1. 计算完成并且端口状态转换完成之后:
      • 删除以Discarding状态的端口为目的端口的表项;
      • 如果TCN的接收端口为Forwarding状态,则保留以该接收端口为目的端口的表项,保留以边缘指定端口为目的端口的表项
      • 删除其他以Forwarding状态的端口为目的端口的表项
    1. 在既不是边缘指定端口也不是TCN接收端口并且处于Forwarding状态的端口上继续泛洪TCN。

4.RSTP与STP互操作

image.png

  • RSTP可以和STP互操作,但是此时会丧失快速收敛等RSTP优势。
  • 当一个网段里既有运行STP的交换设备又有运行RSTP的交换设备,STP交换设备会忽略RST BPDU(在RSTP中BPDU的Type字段为2的原因,STP无法识别),而运行RSTP的交换设备在某端口上接收到运行STP的交换设备发出的配置BPDU,在两个Hello Time时间之后,便把自己的端口转换到STP工作模式,发送配置BPDU。这样,就实现了互操作。
  • 在华为设备上可以配置运行STP的交换设备被撤离网络后,运行RSTP的交换设备可迁移回到RSTP工作模式

5.RSTP高级特性

5.1 根保护

image.png

  • 对于一个交换网络来说,根桥的地位是至关重要的,如果根桥发生变化,那么势必导致RSTP重新计算,此时该网络所承载的业务流量必将受到影响,一般来说,我们会选择网络中性能最优的设备,同时也是位置最关键的设备作为根桥,将其优先级设置为最小值0,然而这个措施未必能保证该设备永远是网络中的根桥,毕竟根桥的角色是可抢占的。

image.png

  • 现在一个第三方网络为了实现与生产网络的通信,将该网络中的LSW4连接到LSW1.由于对接前LSW4的优先级已经被配置为0,而且恰巧其MAC地址较之LSW1更小,因此一旦LSW4和LSW1完成对接,前者将抢占LSW1的地位成为网络中新的根桥,而这个改变将会导致生产网络的RSTP重新计算,从而对生产网络造成影响。
  • 在根桥的指定端口激活根保护功能后,该接口如果收到更优的BPDU,则会忽略这些BPDU,并将接口切换到丢弃状态,如此一来,根桥的地位就得以保持。指定端口的恢复时间是20秒,在20秒内没有收到更优的BPDU则会恢复转发状态。

根保护配置:

  1. [Huawei]int GigabitEthernet 0/0/1
  2. [Huawei-GigabitEthernet0/0/1]stp root-protection

image.png


5.2 BPDU保护

image.png

  • 边缘端口一般都是连接终端设备的,理论上是不会收到BPDU的,但是如果由于人为的导致接口误接了交换设备,那么该端口便有可能收到BPDU,这种疏忽同时也引入了二层环路的隐患。另外,如果攻击者连接到了边缘端口,并针对该端口发起BPDU攻击,也将对网络造成极大影响。
  • 通过在交换机上激活BPDU保护功能即可解决上述问题。当交换机激活该功能后,如果边缘端口收到BPDU,则交换机立即把端口关闭(置为Err-Down),同时触发告警。
  • 如果受保护的边缘端口由于收到了BPDU而被关闭,缺省时是不会自动恢复的,网络管理员需要在该接口的配置视图下先执行shutdown及undo shutdown命令,或者直接使用restart命令来恢复接口。除了使用上述命令手工恢复接口,还可以让接口自动恢复。在系统视图下执行:error-down auto-recovery cause bpdu-protection interval xx命令即可配置接口的自动恢复功能,执行上述命令后,接口在被关闭后将会延迟interval关键字所指定的时间(取值范围是30~86400s)然后自动恢复。

BPDU保护配置:

  1. [Huawei]stp bpdu-protection //启用BPDU保护
  2. [Huawei]error-down auto-recovery cause bpdu-protection interval 30 //错误恢复时间设置为30S

5.3 环路保护

image.png

  • 当SWC的G0/0/1端口收不到上游发送的BPDU,SWC会认为上游设备发生了故障,因此过一段时间后,该接口将会成为指定端口并切换到转发状态,然后开始发送业务流量。值得注意的是,此时SWA并未发生故障,因此SWC的G0/0/1接口切换到转发状态,网络中便出现了环路。(单向故障只出现在光纤网络中)。
  • 在根端口上激活了环路保护功能后,如果该接口长时间没有收到BPDU,那么交换机将会重新选举根端口并将该接口的角色调整为指定接口,此时交换机会将该接口的状态切换到丢弃状态,从而避免环路的发生。
  • 在替代接口上激活了环路保护功能后,如果该接口长时间没有收到BPDU,那么交换机将会重新选举根接口并将该接口的角色调整为指定端口,此时交换机会将该接口的状态切换到丢弃状态,从而避免环路的发生。

环路保护配置:

  1. [Huawei]int GigabitEthernet 0/0/1
  2. [Huawei-GigabitEthernet0/0/1]stp loop-protection

5.4 拓扑变更保护

  • 一个稳定的交换网络是不会频繁地出现拓扑变更的,一旦网络拓扑出现变更,TC BPDU(此处指的是TC比特置位的BPDU)将会被泛洪到全网,而这些TC BPDU将会触发网络中的交换机执行MAC地址表删除操作。设想一下,如果网络环境极端不稳定导致TC BPDU频繁地泛洪,又或者网络中存在攻击者,而攻击者发送大量的TC BPDU对网络进行攻击,那么交换机的性能将受到极大损耗。
  • 交换机激活拓扑变更保护功能后,将在单位时间内只进行一定次数的TC BPDU处理,如果交换机在该时间内收到超过所设上限的TC BPDU,那么它只会按照规定的次数进行处理,而对于超出的部分,则必须等待一段时间后才能处理。
  • 在交换机的系统视图下执行stp tc-protection命令即可激活拓扑变更保护功能,该功能激活后,交换机在单位时间内(缺省时,该时间等于Hello time,也即2秒,可通过stp tc-protection interval命令修改)只会处理一次(该次数可通过stp tc-protection threshold命令修改)TC BPDU,如果在该时间内,收到了更多的TC BPDU,则这些报文只能等前面提及的时间超时后才会被处理。

拓扑变更保护配置:

  1. [Huawei]stp tc-protection //开启TC BPDU保护
  2. [Huawei]stp tc-protection threshold 5 //单位时间内可以处理的TC的个数