第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 是 是

RSTP 三种端口状态 - 图示

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 → 确认),在点对点链路上实现毫秒级收敛。

P/A(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 快速收敛

思考

  1. RSTP 的边缘端口直接进入 Forwarding 状态,如果一台用户在此端口下接了小交换机并形成了环路,会发生什么?
  2. P/A 机制要求链路是点对点类型,如果两台交换机之间通过集线器连接,P/A 还能正常工作吗?
  3. 如果一个 RSTP 网络中混入了一台只运行传统 STP 的交换机,整个网络的收敛速度会受影响吗?为什么?

下篇预告:第19篇:MSTP 多实例生成树:VLAN 与实例的映射