生成树协议(二)RSTP 快速生成树协议原理

STP的不足之处

  1. 收敛速度慢:STP为了避免临时环路的产生,又因为没有确认机制,所以必须等待足够长的时间来确保全网端口状态收敛完成(从Listening到Learning状态要一个Forward Delay,从Learning到Forwarding状态需要一个Forward Delay。Forward Delay缺省为15s)
  2. 根桥或链路发生故障收敛时间需要(30s~50s)
  3. 交换机连接终端的端口(边缘端口),实际上不需要进行生成树计算,但是STP中边缘端口也需要进行生成树计算并需要两个Forward Delay的收敛时间。
  4. 当STP的拓扑变更之后,STP中由变更点向上游设备发送TCN BPDU,收到消息后的上游设备会回复TCA消息确认,知道根桥接收到TCN BPDU,再由根桥发送TC消息通知所有下游设备删除MAC地址表。这种机制比较复杂,效率较低,所有设备MAC地址表都需删除没有必要。
  5. 端口状态不清晰:STP中有5种端口角色,但是其中Disabled、Blocking、Listening对用户流量的处理是一样的(从用户使用角度对应的行为都相同),但是STP却分为了三种状态,增加了学习和理解的难度。
  6. 端口角色不明确:STP中有三种端口角色。当DP或RP故障之后,备用端口需转化成DP或RP,需要进行重新选举于收敛,浪费时间。

具体STP信息可以查看生成树协议(一)STP协议原理简介:广播风暴、MAC地址表震荡实验、STP工作原理、BPDU简介、STP故障处理

RSTP

RSTP(rapid spanning Tree Protocol ):

快速生成树协议,最早在IEEE 802.1W-2001中提出,这种协议在网络结构发生变化时,能更快的收敛网络。

是针对由于STP有诸多的不足而提出的优化生成树版本协议,针对STP的问题,做了诸多的改进,使得协议更加清晰、规范、高效。所以想要学习RSTP协议,先弄懂STP协议是必不可少的。

RSTP对STP的改进

BPDU报文

STP与RSTP的BPDU报文基本相同,主要有三个字段不同。

字段 STP RSTP
PVI STP(802.1D)传统生成树   值为0 RSTP(802.1W)快速生成树 值为2
BPUD Type 0x00:STP的Configuration BPDU 0x80:STP的TCN BPDU 0x02:RST BPDU(Rapid Spanning-Tree BPDU)或者MST BPDU(Multiple Spanning-Tree BPDU)
Flags 8bits只用了2bits:TC、TCA 8bits全用

Flags:

  • Bit7:TCA (Topology Change Acknowledgement)

  • Bit6:Agreement

  • Bit5:Forwarding

    扫描二维码关注公众号,回复: 10530030 查看本文章
  • Bit4:Learning

    bit5 bit4 端口状态
    1 0 Forwarding
    0 1 Learning
    0 0 Discarding
  • Bit3和Bit2:端口角色

    • 00:未知
    • 01(低位为1高位为0):Alternate / Backup
    • 10(低位为0高位为1):根端口
    • 11:指定端口
  • Bit1:Proposal

  • Bit0:TC (Topology Change)

端口角色

相比于STP只有一种阻塞端口,RSTP新增加了两种端口角色,并且把端口属性充分地按照状态和角色解耦,使得可以更加精确地描述端口。同时也加快了拓扑收敛。通过端口角色的增补,简化了生成树协议的理解及部署。
新增端口:

1. Alternate Port:由于学习到其它网桥发送的配置BPDU报文而阻塞的端口。提供了从指定桥到根的另一条可切换路径,作为根端口的备份端口。
2. Backup Port:由于学习到自己发送的配置BPDU报文而阻塞的端口。作为指定端口的备份,提供了另外一条从根节点到叶节点的备份通路。

端口状态

RSTP将STP的5种端口状态缩减成3种:因为从用户角度讲,Listening、Learning和Blocking状态并没有区别,都同样不转发用户流量。

STP****端口状态 RSTP****端口状态 端口状态对应的行为
Disabled Discarding 如果不转发用户流量也不学习MAC地址,那么端口状态就是Discarding状态。
Blocking
Listening
Learning Learning 如果不转发用户流量但是学习MAC地址,那么端口状态就是Learning状态。
Forwarding Forwarding 如果既转发用户流量又学习MAC地址,那么端口状态就是Forwarding状态。

快速收敛机制

RSTP选举原理和STP本质上相同:

选举根交换机
选举非根交换机上的根端口
选举指定端口
选举预备端口和备份端口

但是RSTP在选举的过程中加入了“发起请求-回复同意”(Proposal/Agreement机制)这种确认机制,由于每个步骤有确认就不需要依赖计时器来保证网络拓扑无环才去转发,只需要考虑BPDU发送报文并计算无环拓扑的时间(一般都是秒级)。

p/A机制其目的是让一个指定端口尽快进入Forwarding状态。P/A机制要求两台交换设备链路必须是点对点的全双工模式,一旦P/A协商不成功,则指定端口的选举需要等待两个Forward Delay,协商过程与STP一致。
在这里插入图片描述
P/A机制中有来回确认机制和同步变量机制。
工作原理:
如上图:有高优先级的BID设备会忽略低优先级BID的P置位,低优先级设备会接收高优先级的P置位,并且停止发送RTS BPDU,并开始执行同步。阻塞所有非边缘端口之后,低优先级的将会发送一个A置位的RTS BPDU。(表示我同意你的提意)高优先级设备接收到了A置位的BPDU之后,立即进入Forwarding状态。

具体选举过程

在这里插入图片描述
问题一的解决方案:

  1. 阶段一:设备刚刚启动,RSTP协议刚刚启用,所有交换机都认为自己是根桥,向其他交换机发送P置位的BPDU,并把发送P消息的端口变成DP口,同时接口处在Discarding状态。
  2. 阶段二:交换机SWA收到SWB和SWC的P消息会置之不理,因为他的桥优先级最高。交换机SWB和SWC收到SWA的P消息后,由于认同SWA是最优的根桥,会根据P/A协商流程回复A消息,并把发送端口变成RP端口,同时接口处在Forwarding状态。
  3. 阶段三:SWA与SWB,SWA与SWB的P/A协商已经完成,接下来是SWB和SWC的P/A协商。
    • SWB和SWC都会发送根桥为SWA的P消息给对方。
    • SWC收到SWB的P消息后,发现P消息里虽然根桥和自己认可的一样,但是发送者的桥优先级比自己高(SWB>SWC),所有马上停止发送P消息,但是由于已经有端口是RP口,也不会回A消息。
    • SWB收到SWC的P消息后,发现P消息里虽然根桥和自己认可的一样,但是发送者的桥优先级比自己低(SWB>SWC),会不停的发送P消息。
    • 以上状态在等待2个Forward Delay时间后,SWB端口为DP端口,处在Forwarding状态, SWC端口为AP端口,处在Discarding状态。
    • 实际上SWB与SWC之间的协商等同于退回到STP的模式,但是反正是Discarding状态,根本不影响其他业务转发。

根端口快速切换机制

在STP中,与根桥相连直连链路故障导致的重新收敛时间大约为30s。

然后在RSTP中为加快收敛时间,设备上旧的根端口失效后,新的根端口就应该在保证无环的情况下立刻迁移到Forwarding状态,而AP端口在选举的时候就考虑到该需求,故可立即进入转发状态(对面必然为DP。(当前根端口发生故障时,阻塞端口会向对面进行P/A协商,我是否可以转发状态,如果对面的指定端口为转发状态,则可以变为转发状态(1-2秒协商时间))

次优BPDU报文处理机制

SWB与SWA的直连链路down掉,SWC的AP端口切换成DP端口并进入转发状态。
如果交换机的端口在连续3次Hello Timer规定的时间间隔内(6s)没有收到上游交换机发送的RST BPDU,便会确认本端口和对端端口的通信失败,从而需要重新进行RSTP的计算来确定交换机及端口角色。在这里插入图片描述

边缘端口的引入

在STP中,连接终端的交换机端口(边缘端口)也需要进行选举,向外发送BPDU报文。但是对面是主机,不能给它回复BPDU报文,所以边缘的选举是没有意义的。

在RSTP中我们设置了边缘端口的属性,若端口被设置为边缘端口则会立即进入转发状态。
但是边缘端口一旦接收到了BPDU报文之后,就丧失了边缘端口的属性,成为了普通STP端口,并重新进行生成树计算。

拓扑变更机制优化

在STP中拓扑变化需要先通知根桥,然后再由根桥发送全网交换设备。这样既浪费时间过程还复杂。

而RSTP中,当一个非边缘端口迁移到Forwarding状态,即认为发送了拓扑变化。变更点交换机直接向全网发送TC置位的BPDU报文,而不是先用TCN BPDU通知根桥,再由根桥向全网发送TC置位的消息,这样在一定程度上节省了收敛时间。(谁变化,谁发送消息)。
注意:拓扑变化唯一的标准:一个非边缘端口迁移到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的泛洪。

边缘端口down掉和故障恢复之后up都不会触发拓扑更新

保护功能

BPDU保护

为了防止有人伪造RST BPDU恶意攻击交换设备,当边缘端口接收到该报文时,会自动设置为非边缘端口,并重新进行生成树计算,引起网络震荡。

实现原理:配置BPDU保护功能后,如果边缘端口收到BPDU报文,边缘端口将会被立即关闭。

为开启BPDU保护:
在这里插入图片描述
开启之后:
在这里插入图片描述

根保护

由于维护人员的错误配置或网络中的恶意攻击,网络中合法根桥有可能会收到优先级更高的RST BPDU,使得合法根桥失去根地位,从而引起网络拓扑结构的错误变动。

实现原理:一旦启用Root保护功能的指定端口收到优先级更高的RST BPDU时,端口状态将进入Discarding状态,不再转发报文。在经过一段时间,如果端口一直没有再收到优先级较高的RST BPDU,端口会自动恢复到正常的Forwarding状态。

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

TC-BPDU泛洪保护

lTC-BPDU攻击:

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

TC-BPDU攻击保护:

启用防TC-BPDU报文攻击功能后,在单位时间内,RSTP进程处理TC类型BPDU报文的次数可配置(缺省的单位时间是2秒,缺省的处理次数是3次)。如果在单位时间内,RSTP进程在收到TC类型BPDU报文数量大于配置的阈值,那么RSTP进程只会处理阈值指定的次数;对于其他超出阈值的TC类型BPDU报文,定时器到期后,RSTP进程只对其统一处理一次。这样可以避免频繁的删除MAC地址表项,从而达到保护交换机的目的。

发布了37 篇原创文章 · 获赞 31 · 访问量 4940

猜你喜欢

转载自blog.csdn.net/qq_46254436/article/details/105225846