4. RSTP快速收敛:从30秒到1秒的蜕变

说实话,我刚入行那会儿,最怕的就是STP收敛。你想想看,一个链路断了,要等30到50秒才能恢复通信。在金融、工业控制这些场景里,30秒的断网足以造成灾难性后果。RSTP(Rapid Spanning Tree Protocol,802.1w)就是为了解决这个问题而生的。

RSTP不是另起炉灶,它保留了STP的核心思想——选举根桥、确定端口角色、阻塞冗余链路。但它把收敛时间从秒级压缩到了毫秒级。怎么做到的?我带你一个一个看。

4.1 RSTP的改进点:到底改了啥?

RSTP对STP的改进,说白了就是三件事:端口角色细化、状态机精简、主动握手替代被动等待。我整理了一张对比表,你看一眼就明白了。

对比项 STP(802.1D) RSTP(802.1w)
端口角色 根端口、指定端口、阻塞端口 根端口、指定端口、替代端口、备份端口
端口状态 Disabled、Blocking、Listening、Learning、Forwarding Discarding、Learning、Forwarding(只有3种)
收敛机制 被动等待(Max Age + Forward Delay) 主动握手(Proposal/Agreement)
收敛时间 30~50秒 1~3秒(典型值)
拓扑变更 TCN通知,泛洪刷新 直接发送TC置位BPDU,快速刷新

你看,RSTP把5种状态砍成了3种。为什么?因为Listening和Blocking在行为上其实都是"不转发数据",合并成Discarding更合理。我个人习惯把Discarding理解为"端口活着但不干活"。

核心变化一句话:RSTP让每个端口知道自己"如果当前角色失效,我该顶替谁"。这就是替代端口和备份端口存在的意义——它们预计算好了退路,不需要重新协商。

4.2 边缘端口:接入终端的"快车道"

边缘端口(Edge Port)是RSTP里我最喜欢的一个特性。它解决了一个很实际的问题:接入终端(PC、打印机、摄像头)的端口,根本不需要参与STP计算。

你想想看,一台PC开机,网口刚插上,STP要经历Listening→Learning→Forwarding,等30秒才能上网。用户早就骂娘了。边缘端口就是告诉交换机:"这个口连的是终端设备,直接转发,别磨叽。"

我的配置习惯:在接入层交换机上,把所有接PC的口都配成边缘端口。但有个坑——如果这个口被人误接了交换机,就会形成环路。所以一定要同时开启BPDU Guard。一旦边缘端口收到BPDU,立即err-disable,防止环路。

边缘端口的行为很简单:

  • 上电后直接进入Forwarding状态,跳过Discarding和Learning
  • 不参与RSTP计算,不发送/处理BPDU
  • 如果收到BPDU(说明有人接了交换机),立即失去边缘属性

我记得有一次排查一个"端口反复up/down"的问题,最后发现就是边缘端口收到了BPDU,触发了BPDU Guard,端口被err-disable。嗯,这里要注意:边缘端口+BPDU Guard是黄金搭档,缺一不可。

4.3 P/A机制:RSTP的"闪电战"

P/A(Proposal/Agreement)机制是RSTP收敛速度的核心。它替代了STP里那个磨叽的"Max Age + Forward Delay"等待流程。

STP为什么慢?因为它要等所有交换机都"想清楚"——等Max Age超时(20秒),再等Forward Delay(15秒×2)。RSTP的做法是:直接问,直接答,不等。

P/A的流程是这样的:

  1. Proposal(提议):某端口被选为指定端口后,立即向下游发送Proposal BPDU,说"我要当指定端口,你同意吗?"
  2. 阻塞下游非边缘端口:下游交换机收到Proposal后,立即把自己的所有非边缘端口置为Discarding(防止临时环路)
  3. Agreement(同意):下游交换机确认自己已经阻塞了非边缘端口,回复Agreement BPDU
  4. 快速转发:上游收到Agreement后,立即将端口置为Forwarding

整个过程在1秒内完成。我画了一张流程图,帮你理解这个握手过程。

RSTP P/A 握手流程图 交换机A(上游) 交换机B(下游) ① Proposal(提议) "我要当指定端口,同意吗?" 阻塞非边缘端口 ② Agreement(同意) "我已阻塞,你可以转发了" 端口立即进入Forwarding ⚠ 关键要点: • P/A握手只在点到点链路上生效(全双工链路) • 如果链路是半双工或共享介质,RSTP会回退到STP的等待模式 • 边缘端口不参与P/A握手,直接进入Forwarding

我曾经踩过的坑:有一次在核心层部署RSTP,发现P/A握手总是不成功。排查了半天,发现是某条链路被配置成了半双工。RSTP检测到非点到点链路,自动回退到STP模式,收敛时间又变成了30秒。所以,RSTP要想快,链路必须全双工。

4.4 与STP的兼容性:老设备怎么办?

现实网络里,不可能一夜之间把所有交换机都换成支持RSTP的。新旧混跑是常态。RSTP在设计时就考虑到了这一点——它通过协议版本协商和迁移计时器来兼容STP。

具体来说:

  • RSTP交换机发送RSTP BPDU(版本2),协议标识符为2
  • STP交换机发送STP BPDU(版本0),协议标识符为0
  • RSTP交换机如果收到STP BPDU,会立即切换到STP兼容模式

这里有个关键点:RSTP兼容STP,但STP不认识RSTP。一旦RSTP交换机检测到某个端口收到了STP BPDU,它会在该端口上启用协议迁移,把自己的BPDU也降级为STP格式。但其他端口仍然运行RSTP。

兼容性核心原则:RSTP向下兼容STP,但兼容是有代价的——一旦某个端口回退到STP模式,该链路的收敛时间也会回退到30秒。所以,能全上RSTP就全上,别混跑。

我整理了一个兼容性场景表,方便你对照:

场景 行为 收敛时间
全RSTP网络 正常P/A握手,快速收敛 1~3秒
RSTP交换机连接STP交换机 RSTP端口降级为STP模式 30~50秒
RSTP交换机连接STP交换机(边缘端口) 边缘端口不参与STP,直接转发 0秒(但需开启BPDU Guard)
STP交换机连接RSTP交换机(反向) STP交换机无感知,正常STP流程 30~50秒

你看,只要网络里有一台老STP交换机,整个链路的收敛速度就被拖慢了。我个人建议:在升级RSTP时,从接入层开始,逐层向上替换。接入层设备多,但影响范围小;核心层设备少,但一旦混跑,影响面大。

4.5 实战避坑:RSTP部署的3个常见问题

这些年我帮客户排查过不少RSTP相关的问题,总结下来,最常见的坑就这三个:

  1. 边缘端口没配BPDU Guard——结果有人误插交换机,环路产生,全网广播风暴。我曾经见过一个客户,整个办公网上不了,就是因为一个边缘端口被人插了一台小交换机。
  2. 链路是半双工——RSTP检测不到点到点链路,自动回退STP。你配了RSTP,但收敛还是30秒。排查方法:看端口状态,如果显示"shared",说明回退了。
  3. 协议迁移震荡——RSTP端口一会儿收到RSTP BPDU,一会儿收到STP BPDU,导致端口在两种模式间反复切换。这通常是因为网络里有一台设备配置了"spanning-tree mode stp"强制使用STP。

我的排查三板斧:

  • 第一斧:show spanning-tree——看端口角色和状态,确认是否在运行RSTP
  • 第二斧:show spanning-tree detail——看端口是否被识别为点到点、边缘端口
  • 第三斧:debug spanning-tree events——看P/A握手是否成功,有没有协议迁移

RSTP不是魔法,它只是把STP里那些"被动等待"变成了"主动握手"。理解了这一点,你就能用好它。嗯,关于RSTP的核心内容就这些,记住三个关键词:边缘端口提速、P/A握手加速、兼容STP保底。