第18篇:RSTP 快速生成树:边缘端口与 P/A 机制
关键词:RSTP、802.1w、边缘端口、P/A机制、快速收敛、Discarding、Alternate端口、Backup端口
一、引言
传统 STP(802.1D)的 50 秒收敛时间在实际生产环境中是不可接受的。一次核心链路的故障恢复可能导致业务中断近一分钟,这对现代企业网络是不可容忍的。RSTP(Rapid Spanning Tree Protocol,IEEE 802.1w)通过边缘端口和 P/A(Proposal/Agreement)机制,将收敛时间从 50 秒缩短到秒级甚至亚秒级。本文将深入讲解 RSTP 的工作原理和快速收敛的实现方式。
二、核心概念
2.1 RSTP 对 STP 的改进
| 改进项 | 传统 STP | RSTP |
|---|---|---|
| 收敛时间 | 30~50 秒 | 1~2 秒 |
| 端口状态 | 5 种(Disable/Blocking/Listening/Learning/Forwarding) | 3 种(Disable/Discarding/Forwarding) |
| 端口角色 | 3 种(RP/DP/NDP) | 5 种(RP/DP/Alternate/Backup/Edge) |
| BPDU 发送 | 仅根桥发送 | 所有活动端口独立发送 |
| BPDU 周期 | 2 秒 | 2 秒(但每个端口独立计时) |
| 故障检测 | Max Age(20 秒) | 3 × Hello Time(6 秒) |
2.2 RSTP 三种端口状态
RSTP 将 STP 的 5 种状态简化为 3 种:
| RSTP 状态 | 对应 STP 状态 | 数据转发 | 学习 MAC |
|---|---|---|---|
| Discarding | Disable、Blocking、Listening | 否 | 否 |
| Learning | Learning | 否 | 是 |
| Forwarding | Forwarding | 是 | 是 |

2.3 RSTP 五种端口角色
| 端口角色 | 说明 | 对应 STP |
|---|---|---|
| 根端口(RP) | 到达根桥最优路径的端口 | 同 STP |
| 指定端口(DP) | 该链路上负责转发数据的端口 | 同 STP |
| 替代端口(Alternate Port) | 根端口的备份,接收来自根桥方向的 BPDU | NDP 的子集 |
| 备份端口(Backup Port) | 指定端口的备份,由同一台交换机的另一个端口环路形成 | NDP 的子集 |
| 边缘端口(Edge Port) | 连接终端的端口,不参与生成树计算 | 无 |
2.4 P/A(Proposal/Agreement)机制
P/A 机制是 RSTP 实现快速收敛的核心。通过"三手握手"(Proposal → Agreement → 确认),在点对点链路上实现毫秒级收敛。

三、技术细节
3.1 边缘端口(Edge Port)
边缘端口是直接连接终端设备的端口,不参与生成树计算,直接进入 Forwarding 状态。
| 特性 | 说明 |
|---|---|
| 状态迁移 | 端口 UP 后直接进入 Forwarding |
| BPDU 处理 | 边缘端口不发送 BPDU,且收到 BPDU 会失去边缘属性 |
| 拓扑变更 | 状态变化不触发拓扑变更通知 |
| 适用场景 | 连接 PC、服务器、打印机等终端 |
# 手动配置边缘端口
[HUAWEI] interface GigabitEthernet 0/0/1
[HUAWEI-GigabitEthernet0/0/1] stp edged-port enable
[HUAWEI-GigabitEthernet0/0/1] quit
# 全局启用(所有端口默认作为边缘端口)
[HUAWEI] stp global-edged-port enable
# 注意:级联端口需要手动关闭边缘端口
[HUAWEI] interface GigabitEthernet 0/0/24
[HUAWEI-GigabitEthernet0/0/24] stp edged-port disable
[HUAWEI-GigabitEthernet0/0/24] quit
# BPDU 保护(边缘端口收到 BPDU 则关闭)
[HUAWEI] stp bpdu-protection
3.2 P/A 机制详细流程
场景:新交换机 B 加入网络,连接到交换机 A(A 已稳定运行)。
| 步骤 | 动作 | 说明 |
|---|---|---|
| 1 | A 向 B 发送 Proposal BPDU | 标志位 Proposal=1 |
| 2 | B 收到 Proposal,比对本端 BPDU | B 发现 A 的 BPDU 更优 |
| 3 | B 将该端口设为根端口(Discarding) | 防止环路 |
| 4 | B 阻塞所有其他指定端口(转为 Discarding) | 保护现有拓扑 |
| 5 | B 向 A 回复 Agreement BPDU | 标志位 Agreement=1 |
| 6 | A 收到 Agreement,端口进入 Forwarding | A 侧立即转发 |
| 7 | B 收到 Agreement,端口进入 Forwarding | B 侧立即转发 |
| 8 | B 通知下游交换机,递归执行 P/A | 级联链路快速收敛 |
关键:整个握手过程在毫秒内完成,远快于 STP 的定时器等待。
3.3 链路类型的检测
RSTP 将链路分为两种类型,不同类型的链路收敛行为不同:
| 链路类型 | 说明 | 默认检测 |
|---|---|---|
| 点对点(Point-to-Point) | 直连两台设备 | 全双工链路自动检测 |
| 共享(Shared) | 连接到集线器等多设备共享介质 | 半双工链路 |
为什么区分链路类型? 点对点链路可以使用 P/A 机制实现快速收敛;共享链路无法确定对端情况,只能使用传统的定时器等待。
# 手动指定链路类型
[HUAWEI] interface GigabitEthernet 0/0/1
[HUAWEI-GigabitEthernet0/0/1] stp link-type point-to-point
[HUAWEI-GigabitEthernet0/0/1] quit
# 或
[HUAWEI-GigabitEthernet0/0/1] stp link-type shared
3.4 RSTP 与 STP 的兼容性
| 场景 | 说明 |
|---|---|
| RSTP 交换机互联 | 使用 RSTP BPDU(版本 2),快速收敛 |
| RSTP 交换机连 STP 交换机 | 自动切换到兼容模式(兼容 STP 行为) |
| BPDU 版本兼容 | RSTP BPDU 的 Version 字段为 2,STP 为 0 |
四、实战配置/案例分析
4.1 案例一:RSTP 快速收敛测试
场景:三台交换机运行 RSTP,主链路故障后观察收敛时间。
# 三台交换机均配置 RSTP
[SW-A] stp mode rstp
[SW-A] stp priority 4096 # SW-A 为根桥
[SW-B] stp mode rstp
[SW-C] stp mode rstp
# 验证端口角色
<SW-B> display stp brief
PortName PortRole PortSt
GE0/0/1 Root Forwarding ← 到根桥
GE0/0/2 Alternate Discarding ← 备份端口
# 模拟主链路故障
[SW-B] interface GigabitEthernet 0/0/1
[SW-B-GigabitEthernet0/0/1] shutdown
[SW-B-GigabitEthernet0/0/1] quit
# 观察备份端口状态变化
<SW-B> display stp brief
PortName PortRole PortSt
GE0/0/2 Root Forwarding ← 备份端口接管
# 本例是 shutdown 接口,交换机直接感知 link-down,切换在亚秒~1 秒内完成
# 若为链路闪断(物理层仍 up 但 BPDU 丢失),需等 3 × Hello Time(6 秒)判定失效后再切换
4.2 案例二:边缘端口与 BPDU 保护配置
# 场景:接入交换机,24 个端口连接 PC,1 个上联端口
[Access-SW] stp mode rstp
[Access-SW] stp enable
# 配置 BPDU 保护(全局启用)
[Access-SW] stp bpdu-protection
# 接入端口配置为边缘端口
[Access-SW] interface range GigabitEthernet 0/0/1 to GigabitEthernet 0/0/24
[Access-SW-Port-range] description To-PC
[Access-SW-Port-range] stp edged-port enable
[Access-SW-Port-range] storm-control broadcast min-rate 1000 max-rate 10000
[Access-SW-Port-range] quit
# 上联端口(不能是边缘端口)
[Access-SW] interface GigabitEthernet 0/0/25
[Access-SW-GigabitEthernet0/0/25] description To-Core
[Access-SW-GigabitEthernet0/0/25] stp edged-port disable
[Access-SW-GigabitEthernet0/0/25] quit
# 验证
<Access-SW> display stp brief
PortName PortRole PortSt
GE0/0/1 Edge Forwarding ← 边缘端口,立即转发
GE0/0/2 Edge Forwarding
...
GE0/0/25 Root Forwarding ← 上联端口,正常 RP
4.3 案例三:BPDU 保护触发端口关闭
故障描述:员工私自将小交换机接入 PC 端口,触发 BPDU 保护。
# 查看端口状态
<Access-SW> display interface GigabitEthernet 0/0/5
GigabitEthernet0/0/5 current state : UNREGISTRY
# UNREGISTRY 状态:BPDU 保护触发
# 查看日志
<Access-SW> display logbuffer
*Mar 15 09:30:25 2024 Access-SW %%01STP/4/BPDU_PROTECTION(l)[0]:
The port GE0/0/5 has been shut down due to BPDU protection.
# 恢复端口
[Access-SW] interface GigabitEthernet 0/0/5
[Access-SW-GigabitEthernet0/0/5] undo shutdown
[Access-SW-GigabitEthernet0/0/5] quit
# 长期方案:
# 1. 物理层面:限制信息插座只能插一台设备
# 2. 配置层面:保留 BPDU 保护,发现非法接入时告警而非关闭
# [Access-SW] stp bpdu-protection
# 默认行为是关闭端口;若需要告警而非关闭,可结合端口安全策略处理
4.4 案例四:RSTP 完整配置模板
# ========== 核心交换机(RSTP 模式)==========
[Core-SW] sysname Core-SW
[Core-SW] stp mode rstp
[Core-SW] stp enable
[Core-SW] stp root primary # 设为根桥(优先级设为 0)
# 上联端口
[Core-SW] interface GigabitEthernet 1/0/1
[Core-SW-GigabitEthernet1/0/1] stp edged-port disable
[Core-SW-GigabitEthernet1/0/1] stp link-type point-to-point
[Core-SW-GigabitEthernet1/0/1] quit
# ========== 接入交换机 ==========
[Access-SW] sysname Access-SW-01
[Access-SW] stp mode rstp
[Access-SW] stp enable
# BPDU 保护
[Access-SW] stp bpdu-protection
# 接入端口(边缘端口)
[Access-SW] interface range GigabitEthernet 0/0/1 to GigabitEthernet 0/0/24
[Access-SW-Port-range] stp edged-port enable
[Access-SW-Port-range] quit
# 上联端口
[Access-SW] interface GigabitEthernet 0/0/25
[Access-SW-GigabitEthernet0/0/25] stp edged-port disable
[Access-SW-GigabitEthernet0/0/25] quit
# ========== 验证 ==========
<Core-SW> display stp brief
<Access-SW> display stp
<Access-SW> display stp port
注意:RSTP 是单生成树协议,没有
instance概念;如果需要在 MSTP 下针对不同 VLAN 设置不同优先级,应使用stp instance X priority Y(前提是先stp mode mstp)。
五、总结
| 对比项 | 传统 STP | RSTP |
|---|---|---|
| 收敛时间 | 30~50 秒 | 1~2 秒 |
| 端口状态 | 5 种 | 3 种 |
| 端口角色 | 3 种 | 5 种(含 Alternate/Backup/Edge) |
| BPDU 发送 | 仅根桥 | 所有活动端口 |
| 故障检测 | 20 秒(Max Age) | 6 秒(3 × Hello) |
| 快速机制 | 无 | P/A 握手机制 |
| RSTP 端口角色 | 功能 | 数据转发 |
|---|---|---|
| Root Port | 到达根桥最优路径 | 是 |
| Designated Port | 链路转发端口 | 是 |
| Alternate Port | 根端口备份 | 否(Discarding) |
| Backup Port | 指定端口备份(同设备环路) | 否(Discarding) |
| Edge Port | 连接终端 | 是(立即转发) |
| 保护机制 | 命令 | 说明 |
|---|---|---|
| BPDU 保护 | stp bpdu-protection |
边缘端口收到 BPDU 关闭 |
| 根保护 | stp root-protection |
防止非根桥成为根桥 |
| 环路保护 | stp loop-protection |
端口收不到 BPDU 时阻塞 |
| 链路类型 | stp link-type point-to-point |
启用 P/A 快速收敛 |
思考
- RSTP 的边缘端口直接进入 Forwarding 状态,如果一台用户在此端口下接了小交换机并形成了环路,会发生什么?
- P/A 机制要求链路是点对点类型,如果两台交换机之间通过集线器连接,P/A 还能正常工作吗?
- 如果一个 RSTP 网络中混入了一台只运行传统 STP 的交换机,整个网络的收敛速度会受影响吗?为什么?
下篇预告:第19篇:MSTP 多实例生成树:VLAN 与实例的映射