第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 秒的等待是值得的。
八、思考
- STP 的 5 种端口状态按顺序列出,并说明哪些状态可以转发数据。
- 一个端口从 Up 到进入 Forwarding 大概需要多少秒?分别花在哪些阶段?
- 端口在 Blocking 状态下能不能接收 BPDU?能不能发送 BPDU?
- 为什么端口进入 Forwarding 之前要先经过 Learning 阶段?
- 主链路断了,阻塞端口切换到转发需要多久?
- 如果一个关键链路故障,STP 的 50 秒收敛时间对业务有什么影响?怎么改善?
下篇预告:第18篇《RSTP快速生成树_边缘端口与PA机制》——掌握RSTP快速生成树的边缘端口和PA机制。