3、STP端口状态与角色
聊到STP,很多人第一反应就是「阻塞」、「转发」这些词。嗯,没错,但光知道这几个词可不够。我见过不少工程师,配置STP时只记得把端口敲成portfast,结果环路一出现,整个网络直接瘫痪。
今天咱们就把端口状态和角色彻底讲透。你想想看,STP本质上就是个选举过程——选谁当根桥,选哪个端口转发数据,哪个端口 standby。搞明白这些,你才算真正入了门。
3.1 端口状态:从阻塞到转发的四步走
STP的端口状态有四种:Blocking、Listening、Learning、Forwarding。注意,这里没有「Disable」状态,那是端口被管理员手动 shutdown 的情况,不属于STP的范畴。
我个人习惯把这四个状态比喻成「过安检」:
- Blocking(阻塞):端口被拦在外面,不收发任何数据帧,也不学习MAC地址。唯一能做的就是听BPDU。
- Listening(侦听):端口开始参与选举了,能收BPDU,但依然不转发数据。这个阶段大概持续15秒(默认Forward Delay的一半)。
- Learning(学习):端口开始构建MAC地址表了,但数据帧还是不转发。再等15秒。
- Forwarding(转发):终于放行了,正常收发数据。
关键点:从Blocking到Forwarding,默认需要30秒(15秒Listening + 15秒Learning)。这就是为什么交换机刚启动时,网络要等半分钟才能通。
我在项目中遇到过一个问题:某工厂的产线网络,每次重启核心交换机,生产线就要停30秒。后来排查发现,就是STP收敛时间太长。解决办法?嗯,后面讲RSTP时会细说。
3.2 端口角色:谁说了算?
端口状态是「做什么」,端口角色是「是什么」。STP定义了三种角色:Root Port、Designated Port、Alternate Port。
| 角色 | 含义 | 出现位置 |
|---|---|---|
| Root Port(根端口) | 到达根桥路径最短的端口 | 非根桥上,每个非根桥只有一个 |
| Designated Port(指定端口) | 每个网段上负责转发数据的端口 | 每个网段只有一个 |
| Alternate Port(替代端口) | 根端口的备份,处于阻塞状态 | 非根桥上,当根端口失效时启用 |
说白了,选举规则就一条:谁离根桥近,谁就当指定端口。距离用「根路径开销」来衡量,开销越小越优先。
避坑指南:我曾经遇到一个案例,两台交换机之间连了两根线,结果STP把其中一根阻塞了。按理说没问题,但用户抱怨带宽不够。后来发现,他们以为STP会做负载均衡——其实不会。STP只留一条路径,另一条就是备用。
3.3 状态与角色的对应关系
这里有个容易混淆的点:角色和状态不是一一对应的。一个端口可以同时是「Root Port」和「Forwarding状态」,也可以是「Alternate Port」和「Blocking状态」。
举个例子:
- 根桥上的所有端口都是Designated Port,且处于Forwarding状态。
- 非根桥上的Root Port处于Forwarding状态。
- 非根桥上的Alternate Port处于Blocking状态。
你可能会问:「那Listening和Learning状态对应什么角色?」嗯,这两个是过渡状态,角色在Listening阶段就已经确定了。端口在进入Listening时,角色就已经选好了。
3.4 实战中的注意事项
我建议你在配置STP时,重点关注以下几点:
- 确认根桥位置:用
show spanning-tree查看根桥ID,确保核心交换机是根桥。 - 检查端口角色:用
show spanning-tree interface看端口是Root还是Alternate。 - 注意收敛时间:默认30秒,如果网络对中断敏感,考虑启用PortFast或升级到RSTP。
警告:千万不要在连接终端的端口上禁用STP!我曾经见过有人为了省事,直接把STP关了,结果一根网线插错位置,整个广播域直接崩溃。正确的做法是启用PortFast,而不是关STP。
好了,端口状态和角色就讲到这里。下一章咱们聊聊BPDU的格式,那才是STP真正「说话」的语言。你准备好了吗?