4、STP收敛过程:STP收敛的步骤、收敛时间计算、收敛过程中的问题

聊到STP,大家最关心的其实就一件事——收敛

说白了,就是交换机从“懵圈”到“清醒”需要多久。我刚开始接触STP那会儿,总觉得这玩意儿慢吞吞的,后来在项目里吃过亏,才真正理解了它的每一步设计都是有道理的。

好,咱们直接进入正题。

4.1 STP收敛的四个步骤

STP收敛不是一蹴而就的。它分四步走,每一步都有明确的任务。我习惯把这四步记成:选根、选端口、定角色、进状态

  1. 选举根桥(Root Bridge)
    所有交换机先发BPDU,比比谁的Bridge ID最小。最小的那个,就是老大。
  2. 选举根端口(Root Port)
    非根桥上,到根桥路径开销最小的那个端口,就是根端口。
  3. 选举指定端口(Designated Port)
    每条链路上,离根桥最近的端口,就是指定端口。
  4. 阻塞剩余端口(Blocking Port)
    既不是根端口也不是指定端口的,统统进入阻塞状态。

嗯,这里要注意:每一步都依赖上一步的结果。根桥没选出来,后面的端口选举全是白搭。我在一次割接中遇到过,两台交换机因为BPDU版本不匹配,根桥一直选不出来,整个网络瘫痪了将近两分钟。从那以后,我每次上线前都会先检查一下BPDU的版本兼容性。

4.2 收敛时间计算

STP的收敛时间,其实是可以算出来的。你想想看,它主要取决于两个计时器:Hello TimeMax Age

计时器 默认值 作用
Hello Time 2秒 根桥发送BPDU的间隔
Max Age 20秒 BPDU老化时间,超过这个时间没收到BPDU,就认为链路断了
Forward Delay 15秒 Listening和Learning状态各停留的时间

那收敛时间怎么算?

我直接给你一个公式:

收敛时间 ≈ Max Age + 2 × Forward Delay

代入默认值:

20秒 + 2 × 15秒 = 50秒

没错,默认情况下,STP收敛需要50秒。我第一次算出来的时候也吓了一跳——50秒!这在现在的网络里,用户早炸锅了。

为什么会这么慢?

因为STP设计时考虑的是“稳”,不是“快”。它宁愿多花点时间确认拓扑稳定,也不愿意出现环路。你想想看,环路一旦出现,整个网络瞬间瘫痪,那可比50秒的等待要命多了。

重要提示: 50秒是标准STP(802.1D)的收敛时间。后来有了RSTP(快速生成树),收敛时间可以缩短到1秒以内。但那是后话了,咱们先把基础打牢。

4.3 收敛过程中的问题

STP收敛不是一帆风顺的。我在实际项目中遇到过不少坑,挑几个典型的说说。

4.3.1 临时环路

嗯,这个最要命。STP在收敛过程中,端口状态会经历:Blocking → Listening → Learning → Forwarding

在Listening和Learning阶段,端口虽然不转发数据,但已经开始处理BPDU了。如果这时候拓扑发生变化,比如某条链路突然断了,STP需要重新计算。在重新计算的那几十秒里,有可能出现临时环路

我曾经在一个数据中心遇到过这种情况。一台接入交换机的上行链路闪断了一下,结果整个机房的广播风暴持续了将近30秒,所有业务全部中断。后来排查发现,就是STP收敛过程中产生了临时环路。

避坑指南: 我曾经在配置STP时忽略了PortFast,导致服务器接入端口每次重启都要等30秒才能通信。后来我养成了一个习惯——所有接入终端(PC、服务器)的端口,只要确认不会形成环路,一律开启PortFast。这样端口可以直接跳过Listening和Learning,瞬间进入Forwarding状态。

4.3.2 BPDU延迟

BPDU在网络中传输是有延迟的。如果网络规模比较大,或者中间有拥塞,BPDU可能不能及时到达。这会导致交换机误判链路状态,从而触发不必要的重新计算。

我记得有一次,一个客户反映他们的网络每隔几分钟就会卡一下。我抓包一看,发现BPDU的到达时间很不规律,有时候甚至超过20秒才收到。后来发现是中间有一台交换机CPU负载过高,导致BPDU被延迟处理了。

4.3.3 配置错误

这个最常见。比如:

  • 两台交换机的Bridge ID设置相同,导致选举混乱
  • 路径开销设置不合理,导致次优路径被选中
  • 手动配置了阻塞端口,但没考虑到冗余链路

我建议,在部署STP之前,先画一张清晰的拓扑图,标出每台交换机的优先级、每个端口的角色。然后对照着图去配置,能避免90%的配置错误。

4.3.4 收敛时间过长

前面说了,默认50秒。这在核心层可能还能忍,但在接入层,用户根本等不了。你想想看,一个办公室几十号人,突然断网50秒,那场面……

怎么优化?

  • 调整计时器:缩短Hello Time和Max Age,但要注意不能太短,否则容易误判
  • 使用RSTP:这是最根本的解决办法
  • 合理规划网络层次:减少STP重新计算的触发频率

小技巧: 我个人习惯在核心层使用RSTP,在接入层使用STP。这样既能保证核心层的快速收敛,又能兼容老旧的接入设备。当然,前提是设备都支持混合模式。

4.4 总结一下

STP收敛,说白了就是交换机们通过BPDU“开会”,选出一个老大,然后大家各自站好位置。这个过程需要时间,默认50秒。收敛过程中可能出现临时环路、BPDU延迟、配置错误等问题。

嗯,我建议你在实际项目中,一定要先做STP的收敛测试。模拟一下链路故障,看看实际收敛时间是多少,有没有出现环路。别等到上线了才发现问题,那时候就晚了。

好,这一章就到这里。下一章咱们聊聊RSTP,看看它是怎么把50秒缩到1秒以内的。