一、网络冗余的"双刃剑"

在一个可靠的网络中,冗余链路是必不可少的。想象一个企业园区网:核心交换机与汇聚交换机之间通常会有两条甚至多条物理链路相连,目的是当其中一条链路发生故障时,流量可以自动切换到备用链路,保证业务不中断。

然而,冗余链路带来了一个致命的问题——二层环路

1
2
3
4
   [SW1]
/ \
/ \
[SW2]---[SW3]

在以太网帧的头部,没有 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
2
3
4
桥 ID = 优先级(2B) + MAC地址(6B)

默认 32768
可配置为 4096 的倍数

第二步:每个非根桥选举根端口(Root Port, RP)

每个非根桥选举一个离根桥"最近"的端口作为根端口,负责接收来自根桥的 BPDU。比较依据:

  1. 到达根桥的**根路径开销(Root Path Cost)**最小
  2. 若开销相同,比较上游桥 ID 最小
  3. 若仍相同,比较上游端口 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 需要重新计算生成树。过程是:

  1. 检测到变化的交换机向根桥发送 TCN BPDU(拓扑变更通知)
  2. 根桥收到后,向全网泛洪 TC BPDU(拓扑变更),设置 TC 标志
  3. 收到 TC 消息的交换机将 MAC 地址表的老化时间从 300 秒缩短为 15 秒(Forward Delay)
  4. 加速清除过期的 MAC 地址条目

整个拓扑收敛过程可能需要 30~50 秒,在此期间网络处于不稳定状态。

三、STP 的"阿喀琉斯之踵":三个致命缺陷

3.1 收敛速度太慢

如前所述,30~50 秒的收敛时间对于现代网络是不可接受的。VoIP 电话、视频会议、实时交易系统——哪怕 3 秒钟的中断都可能造成严重影响,更不用说 50 秒。

3.2 计时器驱动的被动机制

STP 完全依赖计时器来驱动状态迁移。每个状态必须"等够"规定时间才能进入下一状态,即使物理链路早已稳定。这种一刀切的等待策略在快速变化的网络拓扑中显得格外笨拙。

1
2
端口 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
2
3
4
5
6
7
      [根桥]
|
+-----+-----+
| |
[SW2] [SW3]
| |
+-----+-----+ ← 这条链路一端是 DP,另一端就是 Alternate

改进二:端口状态的简化

RSTP 将 STP 的五种状态精简为三种:Discarding(丢弃)、Learning(学习)、Forwarding(转发)。Blocking、Disabled 和 Listening 被合并为 Discarding——对用户数据来说,这三种状态的行为完全一致(都不转发),没必要区分。

改进三:Proposal/Agreement 握手机制

这是 RSTP 最核心的创新。端口状态迁移不再依赖计时器,而是通过逐跳握手来完成。当一条链路被确定为 P2P(点对点)链路时,相邻交换机通过 Proposal 和 Agreement 消息快速协商,将端口直接推入 Forwarding 状态。

1
2
3
4
SW1(DP)                            SW2(RP)
|--- Proposal(我想转发)---------->|
|<-- Agreement(同意,你转吧)-------|
|============================> 开始转发数据!

整个过程只需一次往返,秒级完成

改进四:边缘端口(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
2
3
4
5
6
7
RSTP 交换机发送 RST BPDU(Version = 2)

对端是 STP 交换机,只认识 STP BPDU(Version = 0)

RSTP 交换机检测到这一情况

该端口降级为 STP 模式,发送 STP BPDU

5.2 混合组网下的行为

在一个 RSTP 和 STP 混跑的网络中:

  • RSTP 区域内部依然可以享受快速收敛
  • 与 STP 相连的边界端口按 STP 规则运行(30~50 秒收敛)
  • 最终整网收敛速度取决于最慢的那个部分

这实际上提示我们:要想充分发挥 RSTP 的优势,全网应尽量统一升级到 RSTP

5.3 共享的基因

尽管 RSTP 做了如此多的改进,它的核心算法——根桥选举、路径开销计算、BPDU 优先级比较——与 STP 一脉相承。这意味着:

  1. 学习 RSTP 不需要推翻 STP 的知识体系
  2. STP 的配置经验可以直接迁移到 RSTP
  3. 理解 STP 是理解 RSTP 的前提

下一篇预告:在本文中我们了解了 RSTP 产生的动机和整体改进方向。下一篇文章将深入 RSTP 的核心机制——端口角色、端口状态机与 Proposal/Agreement 快速收敛协议——从协议层面揭示 RSTP 如何在 1~2 秒内完成拓扑收敛。