一、RSTP介绍
我们看到了经典 STP (802.1D) 为了维持无环拓扑所付出的代价:繁琐的 TCN/TCA 握手机制和漫长的计时器等待。在网络故障发生时,30~50 秒的收敛时间在现代业务面前几乎是不可接受的。
RSTP(Rapid Spanning Tree Protocol,802.1w) 正是为解决这一问题定义的标准。它并非对传统 STP 的简单优化,而是从协议机制、BPDU 格式、端口角色与状态、收敛逻辑上的全面重构。
1. STP(802.1D)的不足
STP 的核心痛点在于被动等待 与粗放管理:
- 收敛完全被动,高度依赖定时器。所有端口从阻塞到转发,必须经过固定时长的 Listening、Learning 状态,整体收敛时间长达 30~50 秒,无法满足实时业务需求。
- BPDU 发送机制僵化 。只有根桥能主动发送配置 BPDU,非根桥只能被动中继,无法主动发送 BPDU,故障感知慢、响应滞后。
- 端口状态与角色划分粗糙。STP 有 5 种端口状态但端口角色只有三种,但 Blocking、Listening、Learning 都不转发流量,意义重复,管理不精细。
- 次等 BPDU 处理效率低。收到更差的 BPDU 时不主动回应,只能等待超时刷新,进一步拖慢收敛。
- 无快速收敛机制,缺少安全保护。缺乏 BPDU 保护、根保护、环路保护等功能,网络易震荡、不安全。
2. RSTP 的优化
(1)重构端口角色与状态
- 角色优化:将 STP 的 3 种端口角色扩展为 5 种。
- 新增 Alternate Port(根端口备份) ,接收来自其他交换机 的更优 BPDU,成为根端口的备用端口 ,当根端口失效,Alternate 可以立即切换为新根端口,是实现故障快速切换的关键角色。
- 新增Backup Port(指定端口备份) ,接收来自本机 发出的 BPDU,成为指定端口的本地备份,当本网段指定端口失效,Backup 立即升级为指定端口。
- 新增 Edge Port(边缘端口 ),直接连接 PC、服务器等终端设备 ,端口 UP 后直接进入转发 ,不参与生成树计算、不触发拓扑变更,实现即插即用。
- 保留 Root Port(根端口)、Designated Port(指定端口)。
- 状态优化 :将 STP 的 5 种端口状态(Listening、Learning、Blocking、Forwarding、Disabled),精简为 3 种 ------Discarding(丢弃)、Learning(学习)、Forwarding(转发),将原有的 Blocking、Listening、Disabled 统一合并为 Discarding,消除冗余状态带来的延迟。
- 核心改进:实现端口角色与状态解耦.
-
在 STP 中,只能通过端口状态(Blocking / Listening)间接推测端口角色。
-
RSTP 实现了角色与状态完全解耦 :端口角色 决定端口的 "身份与作用"(根端口、备份、替代等);端口状态决定端口当前 "能否转发、能否学习 MAC"。
STP 的 Blocking 端口是"盲目"的,故障后需要问根桥"我现在该干嘛?";
RSTP 的 Alternate/Backup 端口 是"清醒"的,它们早就知道"如果老大挂了,我就是老大"。这种本地决策机制消除了向根桥汇报的延迟。
(2)改进 BPDU 处理机制
- 发送机制 革新:打破 STP "仅根桥主动发送 BPDU " 的限制,所有交换机(无论是否为根桥),均按 Hello Time(默认 2s)主动发送 BPDU,形成分布式实时心跳,摆脱对根桥的依赖。
- 超时机制 优化:不再依赖 STP 漫长的 Max Age(20s),采用 "超时时间 = Hello Time×3×Timer Factor"(默认约 6s),只要连续 3 个 Hello 周期(约 6s)收不到邻居的 BPDU,设备就会立即判定邻居失效或链路中断,大幅缩短故障感知时间。
- 次等 BPDU 快速处理:
- 运行 STP的 设备收到优先级低于自身存储的 BPDU(即次等 BPDU)时,只会直接忽略必须等待 Max Age 超时后,才能刷新自身存储的 BPDU 信息。
- RSTP 设备收到优先级低于自身的次等 BPDU 时,会立即执行两个动作:① 直接丢弃该劣等 BPDU,不做任何无效处理;② 立刻将自己本地存储的、更优的 BPDU 回发给对端设备。
- RSTP 对端设备收到更优 BPDU 后,会立即更新自身的拓扑信息和端口角色,整个过程不依赖任何定时器,实现拓扑的瞬时同步,大幅加快收敛速度。
- BPDU 报文中新增字段,明确携带端口角色、状态等关键信息,设备收到 BPDU 后,可直接获取对端端口的身份和作用,无需通过状态推导,进一步提升拓扑判断和收敛效率。
(3)引入快速收敛机制
- P/A(Proposal/Agreement)握手机制:新链路启用时,通过双向握手确认无环,跳过 STP 的 30 秒(Listening 15s + Learning 15s)。
- 快速切换机制:Alternate、Backup两种备份端口角色。
- Alternate 端口(根端口备份):根端口失效时,无需等待和上报根桥,立即切换为新的根端口,快速承接根端口功能;
- Backup 端口(指定端口备份):本网段指定端口失效时,立即升级为指定端口,不影响全网拓扑。
- 边缘端口机制:
-
直接连接终端(PC / 服务器)的端口,不参与 STP 计算,直接进入 Forwarding 状态,即插即用,不触发拓扑变更,提升终端接入效率。
-
边缘端口若意外收到 BPDU,会自动丧失边缘端口特性,转为普通端口参与 STP 计算,保障网络无环。
(4)优化拓扑变更机制
- 去中心化处理。
- 废除 STP 中依赖根桥、流程繁琐的 TCN/TCA 握手机制,不再使用 TCN、TCA 这类专用报文;
- 由 "根桥集中控制" 改为去中心化处理 :任何一台交换机一旦检测到拓扑变化,都可以直接发起拓扑变更(TC)通知;
- 采用双向并行泛洪 方式,从本机所有指定端口和根端口 向外发送带有 TC 标志的 RST BPDU;
- 其他设备收到 TC 标志的 BPDU 后,无需等待根桥指令,直接继续泛洪并同步更新拓扑,大幅提升变更传播速度。
- MAC 表处理优化 :收到 TC 标志 BPDU 后,立即清除动态 MAC 表项,替代 STP 缩短老化时间为 Forward Delay (15 s)的方式,加快流量转发恢复。
(5)增加安全保护机制
新增 4 种核心安全保护功能,解决 STP 无安全保护、易震荡的缺陷:
- BPDU 保护:防止边缘端口意外收到 BPDU,避免终端端口被误阻塞;
- 根保护:防止非法设备抢占根桥位置,保障拓扑稳定;
- 环路保护:避免因 BPDU 丢失导致端口误转发,产生环路;
- TC 泛洪保护:抑制频繁 TC 报文引发的 MAC 表频繁刷新,避免网络震荡。
二、RSTP报文格式
RSTP与STP报文的区别:
- Protocol Version Identifier:协议版本。
- STP为 0 ;
- RSTP为 2 ;
- BPDU Type:BPDU类型。
-
STP 使用 0x00 表示配置BPDU,0x80 表示 TCN BPDU;
-
RSTP 使用 0x02 表示 RST BPDU(Rapid Spanning-Tree BPDU)。
- Flags:标记。
-
位 6 表示 Agreement,
-
位 5 表示 Forwarding,
-
位 4 表示 Learning,
-
位 3 和 2 表示端口角色:00:未知,01:根端口,10:Alternate / Backup,11:指定端口,
-
位 1 表示 Proposal.
-
STP使用了位 7 表示 TCA,位 0 表示 TC;
-
RSTP把保留的中间6位使用起来了。
三、P/A 机制:基于同步确认的快速收敛逻辑
1. 核心说明
P/A(Proposal/Agreement)是 802.1w 用于跳过 Forward Delay、实现端口快速转发的机制。
- Proposal(P):指定端口向下游提议:我是该链路的指定端口,请求快速转发。
- Agreement(A) :设备完成本地同步后发出的确认:本机已无环,可安全快转。由于 A 是对本地无环状态 的宣告,因此上游、下游设备都可以发送 A=1,并非只有某一端能发。
- 核心思想:先确认无环,再快速转发。
2.P/A流程
- 上游指定端口(DP) 发送 BPDU**:P=1、A=1** 。P=1:提议自身为该链路的指定端口,请求快速转发;A=1:宣告本机已完成 Sync 同步,内部无环;同时本地执行同步:将所有非边缘、非根端口置为 Discarding,确保无环。
- 下游根端口(RP) 收到 BPDU,确认上游路径最优,本机触发 Sync 同步,将自身所有非边缘、非根端口置为 Discarding ,确保内部无环。完成同步后,由根端口向上游指定端口回复 BPDU:P=0、A=1 ,作为 Agreement 确认,告知上游已无环、允许快速转发。
- 上游 DP 收到该 A=1 确认后,立即进入 Forwarding 状态,跳过 Forward Delay。
- 下游设备完成同步后,**自身的指定端口(DP)**继续向下一级发送 P=1、A=1,将 P/A 机制逐级传递,完成整棵生成树的快速收敛。
- Alternate/Backup 端口不参与P/A流程。
四、RSTP 快收敛与报文详解

1.始发BPDU
SW C 和 SW D 自认为都是根,始发RST BPDU,包含:
- P = 1 :发起协商,我是该链路的指定端口(Port Role = 3)。
- A = 1 : 本地已完成同步,将自身所有非边缘、非根端口置为 Discarding ,确保内部无环(Forwading = 0,Learning = 0)。

2.P/A快速收敛转发
**(1)**SW D 收到 SW C 的更优 BPDU,确认 SW C 为真正根桥,自身放弃根桥声明,转为非根桥设备。回复BPDU:
- A = 1 :同意对方协商,确认对方路径离根更优,本端口成为该链路的根端口(Port Role = 2),本机已完成同步无环。
- P = 0 :本端口不再发起提议协商,根端口立即进入转发状态,完成 P/A 快速收敛(Forwarding = 1,Learning = 1),跳过 Forward Delay。
- TC = 1:本次端口状态变为转发,拓扑发生变更,置位 TC 标志,通知全网刷新 MAC 表。
(2) SW C 收到 SW D 回复的 P=0、A=1 后,确认下游已同步无环,其指定端口立即进入 Forwarding 状态(Forwarding = 1,Learning = 1),完成整条链路的快速收敛。

五、RSTP 慢收敛情况
在 RSTP 中,只有指定端口 DP ↔ 根端口 RP 之间才能完成完整的 P/A 协商,实现快速收敛。
除此之外,凡是无法收到 A=1 确认的场景,都无法触发快速收敛,只能走传统 STP 的慢收敛流程。
最典型、最常见的场景就是:
端口角色为 Alternate(备用端口) 时,本机已经存在更优的根端口 RP,这条备份链路本来就应该被阻塞,不需要转发流量,也不需要快速收敛。所以 Alternate 端口不参与 P/A、不回复 A=1。上游指定端口收不到 A=1,就只能等待 2 个 Forward Delay,进入慢收敛。
如:SW A 的 G0/0/2 被选举为 Alternate 后,不再参与 P/A,也不回复 A=1,因此该链路上根桥 SW C 的指定端口 G0/0/1 也只能等待 2 个 Forward Delay,进入慢收敛。
1.发送自身BPDU
SW C 和 SW A 都发送自身认为的最优 BPDU:
- SW A 从自身根端口 G0/0/1 收到 BPDU 后,从指定端口 G0/0/2 发送;此时该端口为指定端口,会发起 P/A 协商,状态为不转发、不学习;
- SW C(根桥)从指定端口 G0/0/1 继续泛洪自身最优 BPDU。

2.根备份端口链路慢收敛
根备份端口选举与慢收敛过程:
- SW A 在 G0/0/2 收到了与根端口 G0/0/1 相同的根桥 BPDU ,但此链路开销更大(手动设置为 200000),因此端口角色由指定端口切换为 Alternate(根备份端口);
- SW C 原本等待对方回复 A=1,以进入快速收敛;
- 但由于 SW A 已将 G0/0/2 选为根备份端口,该端口不再参与 P/A 协商、不再回复 A=1,进入静默状态;
- SW C 始终收不到 A=1,只能等待 2 个 Forward Delay 后才逐步切换状态:收到 SW A 的 BPDU 并首次发送:15:46:19;进入 Learning 状态:15:46:29;进入 Forwarding 状态:15:46:45。

六、RSTP最终收敛拓扑
