RSTP快速生成树协议详解(一):从STP到RSTP的演进之路
一、网络冗余的"双刃剑"
在一个可靠的网络中,冗余链路是必不可少的。想象一个企业园区网:核心交换机与汇聚交换机之间通常会有两条甚至多条物理链路相连,目的是当其中一条链路发生故障时,流量可以自动切换到备用链路,保证业务不中断。
然而,冗余链路带来了一个致命的问题——二层环路。
1 | [SW1] |
在以太网帧的头部,没有 TTL(Time To Live)字段。IP 数据包有 TTL 来防止无限循环,但二层以太网帧一旦进入环路,就会永无止境地被转发。这就是广播风暴的根源。
环路带来的三大危害:
| 问题 | 描述 | 后果 |
|---|---|---|
| 广播风暴 | 广播帧在环路中无限复制转发 | 带宽被耗尽,网络瘫痪 |
| MAC 地址表震荡 | 同一 MAC 地址在交换机不同端口间反复翻转 | 交换机无法正确转发单播帧 |
| 重复帧 | 同一数据帧通过不同路径多次到达目的地 | 上层协议可能出错 |
正是为了解决这个矛盾——在保留冗余链路的同时消除环路,**生成树协议(Spanning Tree Protocol, STP)**应运而生。
二、传统 STP(802.1D)的工作原理
2.1 核心思想:将物理环路变成逻辑无环树
STP 的核心思路可以用一句话概括:在所有交换机之间选举出一个"根",然后每个非根交换机只保留一条到达根的最优路径,其余冗余链路全部阻塞。
这就像把一张网(Mesh)修剪成一棵树(Tree),从根到每个节点有且仅有一条路径。
2.2 四个关键步骤
STP 通过 BPDU(Bridge Protocol Data Unit)报文交换信息,完成以下四个步骤:
第一步:选举根桥(Root Bridge)
所有交换机初始都认为自己是根桥,向外发送 BPDU。比较 桥 ID(Bridge ID),由**桥优先级(2 字节)+ MAC 地址(6 字节)**组成,先比优先级(默认 32768),再比 MAC 地址,值越小越优。最终全网选举出一台桥 ID 最小的交换机作为根桥。
1 | 桥 ID = 优先级(2B) + MAC地址(6B) |
第二步:每个非根桥选举根端口(Root Port, RP)
每个非根桥选举一个离根桥"最近"的端口作为根端口,负责接收来自根桥的 BPDU。比较依据:
- 到达根桥的**根路径开销(Root Path Cost)**最小
- 若开销相同,比较上游桥 ID 最小
- 若仍相同,比较上游端口 ID 最小
第三步:每条网段选举指定端口(Designated Port, DP)
每条链路上选举一个指定端口,负责向该链路转发 BPDU。比较依据与根端口类似。
第四步:阻塞其余端口
既不是根端口也不是指定端口的,进入 Blocking 阻塞状态,不转发用户数据,只侦听 BPDU。
2.3 端口状态与计时器
STP 定义了五种端口状态,状态迁移由三个计时器控制:
| 状态 | 转发数据 | 学习 MAC | 侦听 BPDU | 持续时间 |
|---|---|---|---|---|
| Disabled | ✗ | ✗ | ✗ | — |
| Blocking | ✗ | ✗ | ✓ | Max Age (20s) |
| Listening | ✗ | ✗ | ✓ | Forward Delay (15s) |
| Learning | ✗ | ✓ | ✓ | Forward Delay (15s) |
| Forwarding | ✓ | ✓ | ✓ | — |
关键问题:一个端口从 Blocking 到 Forwarding 需要经历 30~50 秒(Max Age 20s + Listening 15s + Learning 15s = 50s)。在网络故障切换时,这意味着近一分钟的业务中断——这在今天的数据中心和实时应用场景中是完全不可接受的。
2.4 拓扑变更机制
当网络拓扑发生变化时(如链路断开、新设备加入),STP 需要重新计算生成树。过程是:
- 检测到变化的交换机向根桥发送 TCN BPDU(拓扑变更通知)
- 根桥收到后,向全网泛洪 TC BPDU(拓扑变更),设置 TC 标志
- 收到 TC 消息的交换机将 MAC 地址表的老化时间从 300 秒缩短为 15 秒(Forward Delay)
- 加速清除过期的 MAC 地址条目
整个拓扑收敛过程可能需要 30~50 秒,在此期间网络处于不稳定状态。
三、STP 的"阿喀琉斯之踵":三个致命缺陷
3.1 收敛速度太慢
如前所述,30~50 秒的收敛时间对于现代网络是不可接受的。VoIP 电话、视频会议、实时交易系统——哪怕 3 秒钟的中断都可能造成严重影响,更不用说 50 秒。
3.2 计时器驱动的被动机制
STP 完全依赖计时器来驱动状态迁移。每个状态必须"等够"规定时间才能进入下一状态,即使物理链路早已稳定。这种一刀切的等待策略在快速变化的网络拓扑中显得格外笨拙。
1 | 端口 UP → Blocking(等20s) → Listening(等15s) → Learning(等15s) → Forwarding |
3.3 拓扑变更开销巨大
每次拓扑变更都需要向根桥逐跳上报 TCN,再由根桥向全网泛洪 TC。整个过程是串行的:下层交换机 → 上层交换机 → 根桥 → 全网。当网络规模较大时,收敛时间进一步增长。
核心问题总结:
STP 假设网络不可靠,所以用保守的计时器来"等"。但在现代网络中,链路状态的变化大部分是确定性的——要么通,要么断。RSTP 正是基于这一假设,从"被动等待"转向了"主动协商"。
四、RSTP(802.1w)的诞生与设计哲学
4.1 协议定位
**RSTP(Rapid Spanning Tree Protocol)**由 IEEE 802.1w 标准定义,后并入 802.1D-2004。它的定位非常明确:在不改变 STP 核心算法(根桥选举、路径开销计算)的前提下,大幅提升收敛速度。
它与 STP 的关系可以类比为:
| STP(802.1D-1998) | RSTP(802.1w / 802.1D-2004) |
|---|---|
| 被动等待计时器 | 主动握手协商 |
| 5 种端口状态 | 3 种端口状态 |
| 2 种端口角色(根/指定) | 4 种端口角色 |
| 收敛 30~50 秒 | 收敛 1~2 秒(理想情况) |
4.2 RSTP 的核心改进方向
RSTP 在四个方面对 STP 进行了本质性的改进:
改进一:端口角色的细分
STP 只有根端口和指定端口两种角色。RSTP 新增了 Alternate 端口(替代端口)和 Backup 端口(备份端口)。这两种角色的引入使得交换机在根端口失效时,可以立即切换到预计算好的替代路径,无需重新计算。
1 | [根桥] |
改进二:端口状态的简化
RSTP 将 STP 的五种状态精简为三种:Discarding(丢弃)、Learning(学习)、Forwarding(转发)。Blocking、Disabled 和 Listening 被合并为 Discarding——对用户数据来说,这三种状态的行为完全一致(都不转发),没必要区分。
改进三:Proposal/Agreement 握手机制
这是 RSTP 最核心的创新。端口状态迁移不再依赖计时器,而是通过逐跳握手来完成。当一条链路被确定为 P2P(点对点)链路时,相邻交换机通过 Proposal 和 Agreement 消息快速协商,将端口直接推入 Forwarding 状态。
1 | SW1(DP) SW2(RP) |
整个过程只需一次往返,秒级完成。
改进四:边缘端口(Edge Port)
对于连接终端用户或服务器的端口(不会形成环路的端口),可以直接配置为边缘端口。边缘端口 UP 后立即进入 Forwarding 状态,不需要参与生成树计算,也不发送 BPDU。这与 STP 中所有端口都要经历漫长状态迁移的做法形成了鲜明对比。
4.3 BPDU 格式的变化
RSTP 对 BPDU 格式也做了扩展。传统 STP 的 BPDU 只使用了 Flag 字段中的 2 个比特(TC 和 TCA),其余 6 个比特保留。RSTP 充分利用了这 6 个比特:
| 比特位 | 含义 |
|---|---|
| Bit 0 | TCA(拓扑变更确认) |
| Bit 1 | Agreement(同意) |
| Bit 2 | Forwarding(本端口处于转发状态) |
| Bit 3 | Learning(本端口处于学习状态) |
| Bit 4 | Port Role (2 bits,端口角色) |
| Bit 6 | Proposal(提议) |
| Bit 7 | TC(拓扑变更) |
此外,RST BPDU 的 Version 字段为 2(STP 为 0),Message Age 和 Max Age 的计算方式也有所不同。RSTP 交换机即使没有收到来自根桥的 BPDU,也会每 Hello Time(默认 2 秒)主动发送 BPDU,而 STP 中非根桥只是转发根桥的 BPDU。
五、RSTP 与 STP 的兼容性设计
RSTP 并非要完全取代 STP,而是设计为可以向后兼容。当 RSTP 交换机的端口检测到对端运行的是传统 STP 时,该端口会自动降级为 STP 模式运行。
5.1 降级机制
1 | RSTP 交换机发送 RST BPDU(Version = 2) |
5.2 混合组网下的行为
在一个 RSTP 和 STP 混跑的网络中:
- RSTP 区域内部依然可以享受快速收敛
- 与 STP 相连的边界端口按 STP 规则运行(30~50 秒收敛)
- 最终整网收敛速度取决于最慢的那个部分
这实际上提示我们:要想充分发挥 RSTP 的优势,全网应尽量统一升级到 RSTP。
5.3 共享的基因
尽管 RSTP 做了如此多的改进,它的核心算法——根桥选举、路径开销计算、BPDU 优先级比较——与 STP 一脉相承。这意味着:
- 学习 RSTP 不需要推翻 STP 的知识体系
- STP 的配置经验可以直接迁移到 RSTP
- 理解 STP 是理解 RSTP 的前提
下一篇预告:在本文中我们了解了 RSTP 产生的动机和整体改进方向。下一篇文章将深入 RSTP 的核心机制——端口角色、端口状态机与 Proposal/Agreement 快速收敛协议——从协议层面揭示 RSTP 如何在 1~2 秒内完成拓扑收敛。

