STP拓扑变更机制

为什么要有STP拓扑变化机制

网络中发生拓扑变化时,例如链路中断或接口异常Down等情况,由于MAC地址老化时间的存在(缺省为5分钟),如果不及时通知上游设备,则可能会导致上游设备的报文在这段时间内一直向一个不可达的链路发送。

拓扑改变导致MAC地址表错误

1stp3434

本例中,SW3中的MAC地址表项定义了通过端口GigabitEthernet 0/0/2可以到达主机1,通过端口GigabitEthernet 0/0/3可以到达主机2。由于SW2的根端口产生故障,导致生成树拓扑重新收敛,在生成树拓扑完成收敛之后,从主机1到主机2的帧仍然不能到达目的地。这是因为MAC地址表项老化时间是300秒,主机2发往主机1的帧到达SW3后,SW3会继续通过端口GigabitEthernet 0/0/2转发该数据帧。那么该怎么快速恢复转发?

2stp821462

拓扑变更以及MAC地址表项更新的具体过程如下:

SW2感知到网络拓扑发生变化后,会立即向SW3发送TCN BPDU报文。
SW3收到SW2发来的TCN BPDU报文后,会把配置BPDU报文中的Flags的TCA位设置1,然后发送给SW2,告知SW2我已经收到你发送的TCN BPDU。
SW3向根桥转发TCN BPDU报文。
SW1把配置BPDU报文中的Flags的TC位和TCA位设置为1后发送,通知下游设备我已经收到你发送的TCN BPDU,并通知下游交换机把MAC地址表项的老化时间由默认的300 s修改为Forward Delay的时间(默认为15 s),之后会持续不断的发送TC bit = 1的BPDU持续35s。
最多等待15 s之后,SW3中的错误MAC地址表项会被自动清除。此后,SW3就能重新开始MAC表项的学习及转发操作。

说明:

  • TCN BPDU报文主要用来向上游设备乃至根桥通知拓扑变化。
  • TCA标记置位的配置BPDU报文主要是上游设备用来告知下游设备已经知道拓扑变化,通知下游设备停止发送TCN BPDU报文。
  • 置位的TC标记的配置BPDU报文主要是上游设备用来告知下游设备拓扑发生变化,请下游设备直接删除桥MAC地址表项,从而达到快速收敛的目的。
感知拓扑改变

什么情况下STP会感知到拓扑发生了改变呢?有下面四种!

(1)当DP端口进入到Forwarding状态认为拓扑发生了改变。

bian1014293

如上图当S2的g0/0/3接口(与主机直接相连的接口都是DP端口)经过大概30s进入到Forwarding状态之后,S2的RP端口会立即向根桥发送一个TCN BPDU告知根桥拓扑发生了改变,根桥也会向S2交换机回复一个TC bit = 1和TCA bit = 1的BPDU,并且根桥会将TC bit = 1的报文泛洪到全网交换机,持续35s。 S3的DP接口从shutdown重新进入到Forwarding状态与此情况类似。

(2)根桥的DP失效直接发送TC BPDU。
bian272946542

如上图,当根桥的DP失效之后,S3交换机的RP也随即失效,DP立即成为RP并向S2的AP持续不断的发送TCN BPDU。当S2的AP经过大概30s进入到Forwarding状态之后会向S3的DP回复一个TCA bit = 1的BPDU,告知S3我已收到你发送的TCN BPDU并且通过自己的RP将TCN BPDU发送给根桥,根桥也会向S2交换机回复一个TC bit = 1和TCA bit = 1的BPDU,并且根桥会将TC bit = 1的报文泛洪到全网交换机持续35s。

(3)RP失效或者RP进入到Forwarding状态。
S3的RP失效其实等同于根桥的DP失效导致S3的RP失效。S2的RP失效等同于 1.拓扑改变导致MAC地址表错误。
(4)非根桥的DP端口失效不认为拓扑发生了改变。
bian44841788

如上图两种情况,非根桥的DP失效都不会认为拓扑发生了改变。

总结:stp发生拓扑变更的条件
1、处于转发状态或者监听状态的端口过渡到阻塞状态,这个状态通常是链路故障
2、处于未启用状态的端口进入转发状态,这个状态通常是增加了新的链路
3、交换机从指定端口收到TCNBPDU报文。

stp缺点:1.收敛速度慢,故障切换时间太长(30-50秒)2.网络中大量主机频繁上下线,会导致TCN BPDU大量发送,导致Mac地址表不稳定

RSTP对STP的改进:

  • RSTP对STP的改进:
    • 通过端口角色的增补,简化了生成树协议的理解及部署;
    • 端口状态的重新划分;
    • 配置BPDU格式的改变,充分利用了STP协议报文中的Flag字段,明确了端口角色;
    • 配置BPDU的处理发生变化;
    • 快速收敛;
    • 增加保护功能。
改进点1:端口角色的改进:

RSTP的端口角色共有4种:根端口、指定端口、Alternate端口和Backup端口。

根端口和指定端口的作用同STP中定义,Alternate端口和Backup端口的描述如下:

  • 从配置BPDU报文发送角度来看:
    • Alternate端口就是由于学习到其它网桥发送的配置BPDU报文而阻塞的端口
    • Backup端口就是由于学习到自己发送的配置BPDU报文而阻塞的端口
  • 从用户流量角度来看:
    • Alternate端口提供了从指定桥到根的另一条可切换路径,作为根端口的备份端口
    • Backup端口作为指定端口的备份,提供了另一条从根桥到相应网段的备份通路

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

改进点2:端口状态的改进

RSTP的状态规范缩减为3种,根据端口是否转发用户流量和学习MAC地址来划分:

  • Discarding状态:不转发用户流量也不学习MAC地址
  • Learning状态:不转发用户流量但是学习MAC地址
  • Forwarding状:既转发用户流量又学习MAC地址。
STP端口状态 RSTP端口状态 端口在拓扑中的角色
Forwarding Forwarding 包括根端口、指定端口
Learning Learning 包括根端口、指定端口
Listening Discarding 包括根端口、指定端口
Blocking Discarding 包括Alternate端口、Backup端口
Disabled Discarding 包括Disable端口
改进点3:配置BPDU - RST BPDU

RSTP的配置BPDU充分利用了STP报文中的Flag字段,明确了端口角色

  • 除了保证和STP格式基本一致之外,RSTP作了如下变化:
    • Type字段:配置BPDU类型不再是0而是2,所以运行STP的设备收到RSTP的配置BPDU时会丢弃
    • Flag字段:使用了原来保留的中间6位,这样改变的配置BPDU叫做RST BPDU
RST BPDU报文格式:
RST BPDU与STP配置BPDU报文格式不同点
  • 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:配置BPDU的处理
RSTP对配置BPDU的发送方式进行了改进

在拓扑稳定后,无论非根桥设备是否接收到根桥传来的配置BPDU报文,非根桥设备仍然按照Hello Time规定的时间间隔发送配置BPDU,该行为完全由每台设备自主进行

更短的BPDU超时时间

如果一个端口在超时时间(即三个周期,超时时间=Hello Time×3)内没有收到上游设备发送过来的配置BPDU,那么该设备认为与此邻居之间的协商失败

STP需要先等待一个Max Age

处理次优BPDU

当一个端口收到上游的指定桥发来的RST BPDU报文时,该端口会将自身缓存的RST BPDU与收到的RST BPDU进行比较如果该端口缓存的RST BPDU优于收到的RST BPDU,那么该端口会直接丢弃收到的RST BPDU,立即回应自身缓存的RST BPDU,从而加快收敛速度

  • STP: STP只有指定端口会立即处理次优BPDU,其他端口会忽略次优BPDU,等到Max Age计时器超时后,缓存的次优BPDU才会老化,然后发送自身更优的BPDU,进行新一轮的拓扑收敛。
  • RSTP: RSTP处理次优BPDU报文不再依赖于任何定时器,解决拓扑收敛,同时RSTP的任何端口角色都会处理次优BPDU,从而加快了拓扑收敛。
改进点5:快速收敛机制
快速收敛机制:
  • 如果网络中一个根端口失效,那么网络中最优的Alternate端口将成为根端口,进入Forwarding状态。因为通过这个Alternate端口连接的网段上必然有个指定端口可以通往根桥
  • 如果网络中一指定端口失效,那么网络中最优的Backup端口将成为指定端口,进入Forwarding状态。因为Backup端口作为指定端口的备份,提供了另一条从根桥到相应网段的备份通路

##### 边缘端口 (Edge Port)机制:

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

边缘端口不参与RSTP计算,可以由Discarding直接进入Forwarding状态,同时边缘端口的UP和Down,不会引起网络拓扑的变动

但是一旦边缘端口收到配置BPDU,就丧失了边缘端口属性,成为普通STP端口,并重新进行生成树计算,从而引起网络震荡

Proposal/Agreement机制:

简称P/A机制,RSTP通过P/A机制加快了上游端口进入Forwarding状态的速度。 当一个端口被选举成为指定端口之后,会先进入Discarding状态,再通过P/A机制快速进入Forwarding状态

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

改进点6:拓扑变更机制

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

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

RSTP与STP的兼容

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

当一个网段里既有运行STP的交换设备又有运行RSTP的交换设备,STP交换设备会忽略RSTP的BPDU

运行RSTP的交换设备在某端口上接收到运行STP的交换设备发出的配置BPDU,在两个Hello Time时间之后,便把自己的端口转换到STP工作模式,发送配置BPDU,从而实现了互操作。