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 地址位置,从而恢复连通性。
真人撰写written by human