3、STP端口状态与角色

聊到STP,很多人第一反应就是「阻塞」、「转发」这些词。嗯,没错,但光知道这几个词可不够。我见过不少工程师,配置STP时只记得把端口敲成portfast,结果环路一出现,整个网络直接瘫痪。

今天咱们就把端口状态和角色彻底讲透。你想想看,STP本质上就是个选举过程——选谁当根桥,选哪个端口转发数据,哪个端口 standby。搞明白这些,你才算真正入了门。

3.1 端口状态:从阻塞到转发的四步走

STP的端口状态有四种:BlockingListeningLearningForwarding。注意,这里没有「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 PortDesignated PortAlternate 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时,重点关注以下几点:

  1. 确认根桥位置:用show spanning-tree查看根桥ID,确保核心交换机是根桥。
  2. 检查端口角色:用show spanning-tree interface看端口是Root还是Alternate。
  3. 注意收敛时间:默认30秒,如果网络对中断敏感,考虑启用PortFast或升级到RSTP。

警告:千万不要在连接终端的端口上禁用STP!我曾经见过有人为了省事,直接把STP关了,结果一根网线插错位置,整个广播域直接崩溃。正确的做法是启用PortFast,而不是关STP。

好了,端口状态和角色就讲到这里。下一章咱们聊聊BPDU的格式,那才是STP真正「说话」的语言。你准备好了吗?