跳到主内容

LYRA

Lyra 正在加载

交换机笔记(四)

网络技术鬼鬼

上一篇结尾列了 802.1D STP 的三宗罪:慢、只有一棵树、被动等计时器。这篇记录它的两个后继者:RSTP(802.1w)解决“慢”,MSTP(802.1s)解决“只有一棵树”。

一、RSTP 解决了什么

RSTP(Rapid STP)2001 年以 802.1w 发布,随后被收编进 802.1D-2004。它的选举规则——比 BID、算 RPC、选根端口和指定端口——和 802.1D 完全一致,改的是收敛方式:理想情况下秒级甚至亚秒完成切换,而不是 30~50 秒。

二、端口角色与状态的变化

1. 状态从五种精简到三种

802.1D 的 Disabled、Blocking、Listening 三个状态都不转发数据也不学 MAC,RSTP 把它们合并成一个 Discarding

802.1D RSTP 学 MAC 转发数据
Disabled / Blocking / Listening Discarding
Learning Learning
Forwarding Forwarding

2. 阻塞端口有了明确的分工

802.1D 里被阻塞的端口只有“等着”一个身份,RSTP 把它们正名为两种备份角色:

  • Alternate Port(预备端口):根端口的备份。它从别的交换机那里收到了更优的 BPDU,说明这条路能到根桥但不是当前最优,一旦根端口故障,它可以立刻顶上。
  • Backup Port(备份端口):指定端口的备份。它收到的是本机其他端口发出的更优 BPDU——典型场景是一台交换机的两个端口接到同一台 Hub 上。

过时结论:Backup Port 依赖“两个端口在同一个共享网段上”这个前提,也就是下接 Hub 的场景。今天的链路全是点对点全双工,Backup Port 在实际网络中几乎绝迹,教材里保留它主要是为了把角色体系讲完整。

此外 RSTP 新增 边缘端口(Edge Port):直连终端的端口,管理员手工指定(华为命令 stp edged-port enable)。边缘端口不参与生成树计算,链路 up 后直接进入转发状态——接 PC 的端口没必要等 30 秒。注意边缘端口一旦收到 BPDU 会自动变回普通端口,防止有人私接交换机造成环路;配合 BPDU 保护功能还可以在收到 BPDU 时直接关闭端口。

RSTP 端口角色

三、RSTP 为什么快

1. 不再被动等根桥的 BPDU

802.1D 里只有根桥发配置 BPDU,其他桥接力转发,Max Age 20 秒收不到才认为故障。RSTP 改成每台桥都自主每 2 秒(Hello Time)发送 BPDU,连续 3 个 Hello(6 秒)没收到对端 BPDU 就判定邻居失效。发现故障的时间从 20 秒缩到 6 秒。

2. P/A 握手机制

这是 RSTP 的核心改进。802.1D 里端口从 Discarding 到 Forwarding 要固定等 30 秒,RSTP 用一次显式握手代替干等:

  1. 新链路 up,两端端口先处于 Discarding,互发 BPDU;
  2. 选举中胜出的指定端口发出的 BPDU 带 Proposal 位,向对方提议“我要转发了”;
  3. 对端收到后执行同步(Sync):把本机所有非边缘指定端口临时阻塞,确保自己不会产生环,然后回一个带 Agreement 位的 BPDU;
  4. 提议方收到 Agreement,端口立即进入转发状态,不等任何计时器;
  5. 对方那些被临时阻塞的端口再各自向更下游发起自己的 P/A 握手,像水波一样扩散到全网。

整张网一次收敛就是一串握手,每一跳只花一次报文往返。前提条件:链路是点对点全双工。半双工共享链路上无法安全地做 P/A,只能退回 802.1D 的计时器模式。

P/A 握手机制

3. 拓扑变化处理重做了

802.1D 的 TCN → TCA → 根桥发 TC → 全网缩短老化的流程被整个换掉:

  • 只有“非边缘端口进入转发状态“才算拓扑变化,链路 down 不再单独上报;
  • 发现变化的桥直接从所有指定端口和根端口泛洪 TC 置位的 BPDU,持续 2 个 Hello 时间(4 秒);
  • 收到 TC 的桥立即清空从这些端口学到的 MAC 表项,而不是把老化时间缩到 15 秒干等。

没有了 TCN BPDU 这种报文,也不再需要根桥中转确认,MAC 表的刷新从十几秒变成即刻。

4. 与 STP 的兼容

RSTP 端口收到 802.1D 的 BPDU(Version 0)后,会把该端口降级为 STP 模式运行,收敛回到计时器时代。混合组网时旧设备会成为整网的速度瓶颈。

四、MSTP:从一棵树到多棵树

1. 单生成树的痛点

802.1D 和 RSTP 都是单生成树:所有 VLAN 共用一棵拓扑。结果是被阻塞的链路对所有 VLAN 都阻塞,冗余带宽完全闲置,还可能出现次优路径。思科的私有方案 PVST+ 给每个 VLAN 各算一棵树,能实现按 VLAN 的负载分担,但 VLAN 一多,每台交换机要维护成百上千棵树,CPU 和 BPDU 开销都吃不消。

MSTP(802.1s-2002,后并入 802.1Q-2005)取折中:把 VLAN 分组映射到少数几棵实例上,一棵实例管一批 VLAN。比如 VLAN 1019 走实例 1(根在左边),VLAN 2029 走实例 2(根在右边),两条上行链路都在转发,负载分担达成,而实例数量通常只有个位数。

MSTP 域与实例负载分担

2. MST 域(Region)

多台交换机组成一个 MST 域的前提是三样配置完全一致

  1. 域名(Region Name);
  2. 修订级别(Revision Level);
  3. VLAN 与实例的映射表。

交换机把这三样算出一个摘要(Digest)放进 BPDU,摘要不同就是不同的域。改任何一个映射都要记得同步全网,否则一台设备会悄悄自立门户成单独一个域。

3. IST、MSTI、CST、CIST

概念 含义
IST(实例 0) 内部生成树,每个域必有且只有一个,未映射到其他实例的 VLAN 默认全在 IST 上
MSTI(实例 1~64) 用户创建的实例,每棵实例独立选举、独立拓扑
CST 公共生成树,连接各个 MST 域和域外 STP/RSTP 设备
CIST 公共与内部生成树 = 各域的 IST + 域间 CST

实例总数最多 65 个(064,IST 占一个),实例号本身的可配范围是 04094,但每个域最多同时运行 65 棵,部分平台限制更少(思科一些机型只支持 16 棵),实际部署 2~4 棵就够用。

对外,整个 MST 域表现得像一台虚拟桥:域外设备只看到 CIST 计算出的一个整体,域内各实例的细节不会泄漏出去。MSTP 的 BPDU 是 Version 3,用一份 BPDU 携带 IST 加所有 MSTI 的信息(MRecord),不需要每棵实例各发一份。

4. 华为配置示例

[SW] stp mode mstp
[SW] stp region-configuration
[SW-mst-region] region-name RG1
[SW-mst-region] revision-level 1
[SW-mst-region] instance 1 vlan 10 to 19
[SW-mst-region] instance 2 vlan 20 to 29
[SW-mst-region] active region-configuration

active region-configuration 这一步漏掉的话,域配置不生效——又一个经典踩坑点。华为 S 系列交换机默认就运行在 MSTP 模式;思科默认是 PVST+ 或 Rapid PVST+。

五、生成树在今天

生成树并没有被淘汰,但使用范围明显收缩:

  • 园区网接入层仍大量使用 RSTP/MSTP,防环兜底。
  • 数据中心越来越多地用堆叠、M-LAG 把双上行做成跨设备聚合,逻辑上根本没有环;或者干脆用三层 CLOS 架构(BGP/EVPN),二层域被切得很小,生成树用不上。

过时结论:「二层网络越大越好,一个生成树域管全网」。十多年前“大二层”确实是追求方向,结果是广播域过大、收敛慢、故障影响面不可控。今天的共识是把二层域做小,能路由就不桥接。生成树从“网络的主干技术”退成了“接入层的兜底机制”,这个定位变化本身就值得记录。

六、小结

  • RSTP 把状态精简为三种,阻塞端口正名为 Alternate/Backup,新增边缘端口。
  • 变快的原因:每桥自主发 BPDU、6 秒判定故障、P/A 握手代替 30 秒干等、拓扑变化即刻清 MAC 表。
  • MSTP 把 VLAN 映射到少数实例,按实例选根实现负载分担;域的三要素(域名、修订级别、映射表)必须全网一致。
  • 802.1w 和 802.1s 作为独立标准都已并入 802.1Q;Backup Port、大二层等概念已过时,但作为理解协议设计的反例很有价值。

版权许可

本文采用 CC BY-SA 4.0 协议授权

保留署名与相同方式共享即可转载、引用或再创作。转载时请注明出处并附上本文链接。

评论

留言系统基于 Disqus,发言前可查看 评论规则。部分网络环境可能无法正常加载。