Skip to content

STP 状态与收敛机制详解

STP 协议通过端口状态机来控制环路的产生和解除。理解端口状态和计时器是排查生成树故障、优化网络收敛速度的关键。

1. 端口状态机 (Port State Machine)

传统的 IEEE 802.1D STP 定义了 5 种端口状态。端口从初始化到转发数据,必须经历一系列状态转换,以防止临时环路的产生。

Disabled
端口启用 (Up)
Blocking
被选为 RP/DP
Listening
Forward Delay (15s)
Learning
Forward Delay (15s)
Forwarding
收到更优BPDU / 链路故障

状态详解表

状态英文描述发送 BPDU接收 BPDU学习 MAC转发数据典型停留时间
禁用Disabled端口物理 Down 或被管理员 shutdown-
阻塞Blocking防止环路的初始状态,只听不说Max Age (20s)
侦听Listening正在选举 RP/DP,准备构建生成树Forward Delay (15s)
学习Learning准备转发,开始构建 MAC 地址表Forward Delay (15s)
转发Forwarding端口正常工作,参与数据转发-

RSTP (802.1w) 的改进:将 Disabled, Blocking, Listening 合并为 Discarding 状态,简化了状态机。


2. 关键计时器 (STP Timers)

STP 的稳定性依赖于三个核心计时器。这些参数由根桥 (Root Bridge) 决定,并通过 BPDU 通告给全网非根交换机

计时器默认值描述作用
Hello Time2 秒根桥发送配置 BPDU 的间隔维持生成树的存活检测。
Max Age20 秒BPDU 的最大生存时间如果端口 20s 内没收到 BPDU,认为上游故障,重新计算 STP。
Forward Delay15 秒状态切换延迟Listening -> Learning 和 Learning -> Forwarding 的停留时间。

为什么需要 Forward Delay (15s * 2 = 30s)?

在网络拓扑发生变化时,BPDU 传播到全网需要时间。如果不等待就直接转发,不同交换机对拓扑的认知可能不一致,从而导致临时环路。 STP 强制端口等待 2 倍的 Forward Delay (30s),确保全网拓扑已经稳定,才允许转发数据。


3. 故障收敛场景 (Convergence)

当交换机检测到自己的 RP 端口物理 Down(例如网线被拔掉):

  1. 交换机立即知道根路径失效。
  2. 如果存在备份端口 (AP/Blocking),它会立即尝试切换为 RP。
  3. 备份端口进入 Listening -> Learning -> Forwarding
  4. 收敛时间:约 30 秒 (2 * Forward Delay)。

当上游交换机故障,但本端交换机物理链路没有 Down(例如中间经过了 Hub 或光电转换器):

  1. 本端交换机收不到根桥的 BPDU,但端口状态仍为 Up。
  2. 本端交换机等待旧的 BPDU 老化 (Max Age = 20s)。
  3. 老化后,重新选举,端口从 Blocking 进入 Listening -> Learning -> Forwarding (30s)。
  4. 收敛时间:20s + 30s = 50 秒

4. 拓扑变更机制 (Topology Change)

当网络拓扑发生变化(如端口 Up/Down)时,MAC 地址表中的旧条目可能会导致数据无法送达.STP 设计了 TCN 机制来加速 MAC 地址表的老化。

4.1 TCN 交互流程

变更点 SW
上游 SW
根桥 Root
感知到拓扑变化 (Port Up/Down)
➡️ TCN BPDU
收到 TCN
⬅️ TCA (确认)
➡️ 继续透传 TCN BPDU
收到 TCN
⬅️ TC 置位的配置 BPDU (持续 35s)
⬅️ 泛洪 TC BPDU
全网感知拓扑变更

4.2 MAC 地址表刷新

收到 TC 置位 BPDU 的交换机,会将 MAC 地址表的老化时间(Aging Time)从默认的 300 秒 缩短为 15 秒 (Forward Delay)。

  • 效果:长时间未通信的 MAC 条目被快速清除,交换机重新广播学习新的 MAC 地址位置,从而恢复连通性。