「RSTP」- 链路故障

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

问题描述

根桥失效

在 STP 中,需要等待 20s 没有收到 BPDU 报文(老化失效),然后端口状态转化 30s 时间,累计 50s 时间。

在 RSTP 中,等待 3 x Hello Time = 6s 时间(注意,这不会影响 BPDU 的失效时间,依旧为 20s 时间,但是这不会参与链路故障检测),如果 Non-root Bridge 未收到 Root Bridge 的 BPDU 帧,则认为 Root Bridge 失效,开始 P/A 选举。

根端口失效

如果网络中一个 Root Port 失效,那么网络中最优的 Alternate Port 将成为 Root Port,进入Forwarding状态。因为通过这个Alternate Port 连接的网段上必然有个 Designated Port 可以通往 Root Bridge。

指定端口失效

如果网络中一指定端口失效,那么网络中最优的 Backup Port 将成为指定端口,进入Forwarding状态。因为Backup端口作为指定端口的备份,提供了另一条从根桥到相应网段的备份通路。

解决方案

在 STP 中,发送 TCN BPDU,TCA,TC 报文。如果拓扑发生变化,需要先向 Root Bridge 传递 TCN BPDU,再由 Root Bridge 来通知拓扑变更,泛洪 TC 置位的 CFG BPDU。

在 RSTP 中,通过新的拓扑变更机制,TC 置位的 RST BPDU 会快速的在网络中泛洪。

在 RSTP 中,直接由故障设备(拓扑发生变化的设备)直接向上游发送 TC 报文。当交换机收到 TC 报文后,开始清空接口的 MAC 地址表(除了收到 TC 报文的接口、Edge Port 以外的端口)。

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

处理次优 BPDU 数据帧

当一个端口收到上游的指定桥发来的RST BPDU报文时,该端口会将自身缓存的RST BPDU与收到的RST BPDU进行比较。

如果该端口缓存的RST BPDU优于收到的RST BPDU,那么该端口会直接丢弃收到的RST BPDU,立即回应自身缓存的RST BPDU,从而加快收敛速度。

STP只有指定端口会立即处理次优BPDU,其他端口会忽略次优BPDU,等到Max Age计时器超时后,缓存的次优BPDU才会老化,然后发送自身更优的BPDU,进行新一轮的拓扑收敛。

RSTP处理次优BPDU报文不再依赖于任何定时器(即不再依赖于BPDU老化)解决拓扑收敛,同时RSTP的任何端口角色都会处理次优BPDU,从而加快了拓扑收敛。