第17篇:STP 端口状态迁移——从 Disable 到 Forwarding

一、写在前面

上一篇文章我们学了 STP 的选举过程,选举出端口角色后,端口进入什么状态?能不能直接转发数据?

答案是否定的。STP 端口有 5 种状态,端口从 Up 到开始转发数据有一个"冷静期",这是为了防止临时环路。


二、STP 的 5 种端口状态

状态 是否转发数据 是否学习 MAC 是否处理 BPDU
Disabled
Blocking
Listening
Learning
Forwarding

状态迁移图

  端口 UP
     │
     ▼
  Blocking     (监听 BPDU,不转发数据)
     │ 20s (Max Age)
     ▼
  Listening    (发送/接收 BPDU,选举角色)
     │ 15s (Forward Delay)
     ▼
  Learning     (学习 MAC 地址,构建 MAC 表)
     │ 15s (Forward Delay)
     ▼
  Forwarding   (开始正常转发数据)

从端口 Up 到开始转发数据 = 20 + 15 + 15 = 50 秒。


三、每种状态详细说明

3.1 Disabled(管理关闭)

端口被手动 shutdown 或整机初始化。

> 不能发任何数据
> 不能收 BPDU
> 不学习 MAC

触发:端口被 shutdown、初始化、故障。

3.2 Blocking(阻塞——最重要!)

端口 Up 后的第一站。这是 STP 防止环路的第一道防线

> 不能转发用户数据
> 不能学习 MAC
> 但可以接收 BPDU(用于参与选举)

如果端口被选为阻塞端口(Alternate Port),它将永远停留在 Blocking。
只有收到更好的 BPDU 时刷新 Max Age 计时器。

为什么要有 Blocking? - 端口刚 UP,不知道网络拓扑 - 如果直接转发,可能在选举完成前形成临时环路 - 必须"先听再说",不能"先说再听"

3.3 Listening(侦听)

从 Blocking 进入 Listening 的条件:端口在 Max Age(20 秒)内没有收到更好的 BPDU,认为可以参与选举了。

> 发送 BPDU(向邻居通告自己的信息)
> 接收并处理 BPDU(参与根桥/根端口/指定端口的选举)
> 不能转发用户数据
> 不能学习 MAC

持续时间:15 秒(Forward Delay)

在这 15 秒里,交换机和邻居"互相交流、选举",确定这个端口最终的角色。

3.4 Learning(学习)

Listening 结束后,端口知道自己的角色了。如果是 Root Port 或 Designated Port,进入 Learning。

> 开始学习 MAC 地址(构建 MAC 表)
> 仍然不能转发用户数据
> 继续交换 BPDU

持续时间:15 秒(Forward Delay)

为什么转发前要先学习 MAC? - 端口进入 Forwarding 后要开始大量转发数据 - 如果 MAC 表是空的,所有帧都要泛洪 → 浪费带宽 - 提前学习一些 MAC,减少泛洪

3.5 Forwarding(转发)

经过 20 + 15 + 15 = 50 秒的"冷静期"后,端口终于可以干活了。

> 正常转发用户数据
> 正常学习 MAC
> 正常收发 BPDU

四、端口角色与状态的关系

端口角色 最终状态
Root Port(根端口) Forwarding
Designated Port(指定端口) Forwarding
Alternate Port(替代端口/阻塞端口) Blocking(永久)
Backup Port(备份端口) Blocking(永久)

所以端口角色的选举结果,决定了哪个端口最终能进入 Forwarding。


五、链路故障时的状态变化

5.1 阻塞端口链路变成活跃链路(切换)

假设有一条冗余链路被阻塞。当主链路断了:

主链路断 → 阻塞端口发现收不到 BPDU

1. Max Age 超时(20 秒)
   → 阻塞端口认为根桥不可达
   → 从 Blocking 进入 Listening

2. Listening(15 秒)
   → 重新选举

3. Learning(15 秒)

4. Forwarding

总耗时:约 50 秒

50 秒! 这就是 STP 的收敛时间——对现代网络来说太慢了。

5.2 新设备接入

新交换机接入 → 发送 BPDU
→ 原有交换机重新选举
→ 也大约需要 30~50 秒才能稳定

六、通过命令查看状态

# 查看所有端口的 STP 状态
[SW1] display stp brief
Bridge ID    : 32768.00e0-fc12-3456
Root Bridge  : 8192.00e0-fc00-0001

Port                Role         State          Cost        Pri.Native
GigabitEthernet0/0/1   DESI         FORWARDING     19          128.1
GigabitEthernet0/0/2   ROOT         FORWARDING     19          128.2
GigabitEthernet0/0/3   ALTE         BLOCKING       19          128.3
                                    ↑ 重要角色

# 查看端口详细 STP 信息
[SW1] display stp interface gigabitethernet 0/0/3
-------[CIST Global Info][Port 3(GigabitEthernet0/0/3)]-----
Port Protocol          : Enabled
Port Role              : Alternate Port
Port Priority          : 128
Port Cost (Config)     : 19
Port State             : BLOCKING

# 查看 STP 拓扑变更记录
[SW1] display stp topology-change
CIST topology change information
  Number of topology changes : 12
  Time since last topology change : 0 days 0h:15m:30s
  Topology change initiator (port) : GigabitEthernet0/0/3

七、为什么需要 50 秒?

很多新工程师不理解:"为什么不让端口直接进入 Forwarding?"

原因很简单——为了绝对避免环路

如果直接转发 后果
端口 UP 后直接转发用户数据 如果该端口是阻塞端口,等于环路的"开关"没关 → 广播风暴
先 Blocking 20 秒 确保收到所有 BPDU,完整了解拓扑
再 Listening 15 秒 确保选举完成,知道哪个端口该阻塞
再 Learning 15 秒 构建 MAC 表,减少泛洪

STP 的设计哲学是:宁可慢,不能错。一个环路故障可以让整个网络瘫痪,50 秒的等待是值得的。


八、思考

  1. STP 的 5 种端口状态按顺序列出,并说明哪些状态可以转发数据。
  2. 一个端口从 Up 到进入 Forwarding 大概需要多少秒?分别花在哪些阶段?
  3. 端口在 Blocking 状态下能不能接收 BPDU?能不能发送 BPDU?
  4. 为什么端口进入 Forwarding 之前要先经过 Learning 阶段?
  5. 主链路断了,阻塞端口切换到转发需要多久?
  6. 如果一个关键链路故障,STP 的 50 秒收敛时间对业务有什么影响?怎么改善?

下篇预告:第18篇《RSTP快速生成树_边缘端口与PA机制》——掌握RSTP快速生成树的边缘端口和PA机制。