从 VLAN 到 MSTP 的交换网络入门

目录

[一篇看懂 VLAN 划分、生成树防环与快速收敛](#一篇看懂 VLAN 划分、生成树防环与快速收敛)

开篇

先打好底子

二层交换机到底做什么

两个容易混淆的地址

[VLAN 把一个广播域分成多个逻辑网络](#VLAN 把一个广播域分成多个逻辑网络)

[VLAN 解决什么问题](#VLAN 解决什么问题)

[交换机如何给帧贴上 VLAN 标签](#交换机如何给帧贴上 VLAN 标签)

[VLAN 有哪些划分办法](#VLAN 有哪些划分办法)

[端口类型:Access、Trunk 与 Hybrid](#端口类型:Access、Trunk 与 Hybrid)

[Access 端口](#Access 端口)

[Trunk 端口](#Trunk 端口)

[Hybrid 端口](#Hybrid 端口)

[VLAN 之间如何通信](#VLAN 之间如何通信)

[每个 VLAN 使用路由器的独立物理接口](#每个 VLAN 使用路由器的独立物理接口)

单臂路由

[三层交换机的 VLANIF 接口](#三层交换机的 VLANIF 接口)

二层环路为什么危险

[STP 用一棵无环的树管理冗余链路](#STP 用一棵无环的树管理冗余链路)

[STP 做什么](#STP 做什么)

[BPDU 是交换机之间的"选举消息"](#BPDU 是交换机之间的“选举消息”)

根桥和端口角色如何选出来

[STP 端口状态和等待时间](#STP 端口状态和等待时间)

[拓扑变化为什么还要更新 MAC 表](#拓扑变化为什么还要更新 MAC 表)

链路开销标准

[RSTP 让备用路径更快接管](#RSTP 让备用路径更快接管)

[RSTP 相比 STP 改了什么](#RSTP 相比 STP 改了什么)

[三种让 RSTP 快起来的机制](#三种让 RSTP 快起来的机制)

[RSTP 的拓扑变化处理](#RSTP 的拓扑变化处理)

[STP 与 RSTP 混用时要留意](#STP 与 RSTP 混用时要留意)

[MSTP 让多个 VLAN 分担多条链路](#MSTP 让多个 VLAN 分担多条链路)

为什么需要多个生成树实例

[MST 区域和树的名词](#MST 区域和树的名词)

[MSTP 怎样计算](#MSTP 怎样计算)

[MSTP 中的快速握手与兼容问题](#MSTP 中的快速握手与兼容问题)

生成树保护机制

[BPDU 保护](#BPDU 保护)

根桥保护

环路保护

[TC 保护](#TC 保护)

做实验时的检查顺序

原讲义实验任务

最后把关系串起来

阅读与配置提醒


一篇看懂 VLAN 划分、生成树防环与快速收敛

开篇

如果把交换机网络想成一栋办公楼,VLAN 就像把一层楼分成多个彼此隔开的部门,STP 则像在楼内有多条走廊时安排一条主路、暂时封住多余路口,避免人流在环形走廊里打转。RSTP 让备用通道能够更快接管,MSTP 则允许不同 VLAN 使用不同的无环路径,让冗余链路真正分担流量。

这三项技术解决的是一条连续的问题链:先划分二层网络的边界,再消除冗余链路带来的环路,最后缩短故障切换时间并提高链路利用率。理解这个顺序,比单独背命令更重要。

先打好底子

二层交换机到底做什么

以太网帧进入交换机后,交换机会查看帧里的目的 MAC 地址,并根据 MAC 地址表决定从哪个端口转发。MAC 地址表可以理解成"设备地址到交换机端口的通讯录"。交换机还会把源 MAC 地址和帧进入的端口记下来。

如果目的地址是广播地址,或交换机还不知道目的 MAC 在哪里,它会把帧泛洪到同一广播域中的其他端口。这里的"泛洪"不是故障,而是二层网络为找到接收方采取的正常动作。

广播域是广播帧能够到达的范围。广播域太大时,广播流量会占用链路和设备处理能力;而如果二层网络里有环路,广播帧甚至可能不断绕圈。因此网络需要既能划小广播域,也能避免环路的技术。

两个容易混淆的地址

同一网段的设备互相通信时,IP 地址表示网络层要找的目标,MAC 地址表示当前这段链路上实际要交付给谁。跨网段通信时,主机保留最终目标的 IP 地址,但这一跳的目的 MAC 地址通常是默认网关的 MAC。网关完成三层转发后,会重新封装一个以目标网段设备 MAC 地址为目的的以太网帧。

所以后文里看到"目的 IP 不变、MAC 地址发生变化",不要惊讶:IP 指向最终目的地,MAC 只负责当前这一跳。

VLAN 把一个广播域分成多个逻辑网络

VLAN 解决什么问题

路由器可以隔离广播域;普通二层交换机自身不会自动把一个广播域拆成多个。VLAN(Virtual Local Area Network,虚拟局域网)让管理员可以在交换机上按逻辑划分网络。一个物理交换网络因此可以被分成多个较小的广播域。

默认情况下,同一 VLAN 内的主机可以通过二层交换机通信;不同 VLAN 的主机不能只靠二层转发互通,需要路由器或三层交换机转发。可以把 VLAN 想成一间间有门禁的房间:同一房间内可以直接交谈,跨房间则必须经过负责转接的前台,也就是三层网关。

VLAN ID 的有效编号范围是 1 到 4094;0 和 4095 为保留值。VLAN 1 通常是设备默认 VLAN。需要注意,VLAN 能隔离二层广播域,但它本身不是加密手段,也不能替代防火墙等访问控制措施。

原讲义图 8-1 VLAN 划分前的大型广播域示意

交换机如何给帧贴上 VLAN 标签

一台终端通常发出普通以太网帧,不带 VLAN 标签。帧进入交换机端口时,交换机根据端口配置判断它属于哪个 VLAN。跨交换机传递时,交换机间链路可以在以太网帧中加入 IEEE 802.1Q 标签,标签里包含 VLAN ID。接收交换机读取 VLAN ID 后,只在对应 VLAN 内转发;帧从连接终端的端口发出时,通常会去掉标签,让终端仍收到普通以太网帧。

想象 PC-A 和 PC-B 属于 VLAN 10,分别接在两台交换机上:PC-A 发出帧后,第一台交换机将其归入 VLAN 10;交换机间的 Trunk 链路带着 VLAN 10 标签传送;第二台交换机只把它交给 VLAN 10 中合适的端口,并在交给 PC-B 前去掉标签。若允许列表不包含 VLAN 10,帧就无法通过这段链路。

在同一台交换机上通信时,交换机按目的 MAC 地址查表,但也会检查目标端口是否属于该帧所在的 VLAN。端口不属于该 VLAN 时,交换机不会把帧跨 VLAN 转发。

原讲义图 8-2 同一交换机内的 VLAN 通信拓扑

原讲义图 8-3 标准以太网帧与 802.1Q 带标签帧格式

原讲义图 8-4 同一 VLAN 跨交换机通信过程

VLAN 有哪些划分办法

最常见的是基于端口划分:把交换机某个端口配置到指定 VLAN,终端接上这个端口就进入对应 VLAN。配置直观、容易管理,但终端换到其他端口后,若新端口 VLAN 不同,就需要调整配置。

其他划分方式包括:

  • 基于 IP 地址:建立 IP 地址与 VLAN ID 的映射,终端迁移时较容易保持原有逻辑归属。

  • 基于 MAC 地址:建立 MAC 地址与 VLAN ID 的映射。设备身份相对稳定,但登记和维护容易出错,终端移动也需要维护对应关系。

  • 基于协议:根据协议类型或协议簇映射 VLAN。

  • 基于策略:组合多种条件,由管理员预先定义策略。

讲义给出的优先级顺序是 MAC > IP > 协议 > 端口。这是具体设备/配置场景下的匹配优先级,不应误解为所有厂商、所有系统都统一采用的通用排序;实际行为应查看设备文档和当前配置。

原讲义图 8-5 基于端口及其他条件划分 VLAN 的示例拓扑

端口类型:Access、Trunk 与 Hybrid

端口类型决定了交换机如何识别收到的帧,以及发送帧时是否保留 802.1Q 标签。判断端口行为时,先问两个问题:收到的帧有没有标签?发送出去的 VLAN 是否允许通过?

Access 端口

Access 端口通常连接 PC、打印机或服务器等终端,一般只承载一个 VLAN。

  • 收到不带标签的帧:交换机给它归入该端口的 PVID。

  • 收到带标签的帧:按讲义的配置模型,只有标签中的 VLAN ID 与 PVID 相同才接收,不同则丢弃。

  • 发出帧:去掉 VLAN 标签后发送给终端。

PVID(Port VLAN ID)可以理解为端口给"没写房间号"的帧指定的默认房间。Access 端口一般将 PVID 配成它所属 VLAN。

原讲义图 8-6 两台交换机的 Access 端口连接示例

Trunk 端口

Trunk 通常用于交换机之间互连,也可连接路由器、支持 VLAN 的防火墙等设备。一个 Trunk 可以承载多个 VLAN,但通常需要配置允许通过的 VLAN 列表。

  • 收到不带标签的帧:归入该端口的 PVID;如果 PVID 不在允许列表中,则丢弃。

  • 收到带标签的帧:检查标签 VLAN ID 是否在允许列表中;允许则接收,否则丢弃。

  • 发出帧:VLAN ID 在允许列表且与 PVID 相同时,按讲义中的缺省处理去掉标签;不同时带标签发送;未获允许则丢弃。

Trunk 的 PVID 常被称为未打标签流量所归属的 VLAN。不同厂商对 Native VLAN、PVID 和缺省是否剥标签的描述与配置细节可能不同,跨厂商互连时要核对两端设置。

讲义中的设备命令示例:

bash 复制代码
[SW1-GigabitEthernet0/0/1] port trunk pvid vlan 10
[SW1-GigabitEthernet0/0/1] undo port trunk allow-pass vlan 1

第一条将该 Trunk 端口的 PVID 改为 VLAN 10;第二条从允许列表中移除 VLAN 1。它不是"删除 VLAN 1",也不代表所有 Trunk 都应移除 VLAN 1,是否这样做要按网络设计决定。

原讲义图 8-7 Access 与 Trunk 端口的 VLAN 传递关系

原讲义图 8-8 修改 Trunk PVID 后的跨交换机 VLAN 示例

Hybrid 端口

Hybrid 也是可承载多个 VLAN 的端口类型。它可以分别指定哪些 VLAN 的帧发出时保留标签(tagged),哪些发出时去掉标签(untagged)。讲义给出的应用是:让多个 PC 彼此隔离,但都能访问同一台服务器;服务器侧端口按需要接收或发送多个 VLAN 的流量。

  • 收到不带标签的帧:归入 PVID,再检查该 VLAN 是否在允许列表中;允许则接收,否则丢弃。

  • 收到带标签的帧:按标签 VLAN ID 检查允许列表;允许则接收,否则丢弃。

  • 发出时 VLAN ID 与 PVID 相同:去掉标签。

  • 发出时 VLAN ID 与 PVID 不同:若列在 tagged 清单中则保留标签,若列在 untagged 清单中则去掉标签;两边都没有则丢弃。

Hybrid 的术语和命令属于设备实现细节,不同厂商可能不同。不要只凭"Hybrid"这个名字推断另一品牌设备具有完全相同的收发规则。

讲义中用于把 VLAN 10 和 VLAN 100 加入 Hybrid 端口的 untagged 列表示例:

bash 复制代码
[SW2-GigabitEthernet0/0/2] port hybrid untagged vlan 10 100

批量进入多个端口的命令示例:

bash 复制代码
[SW2] interface range GigabitEthernet 0/0/1 to GigabitEthernet 0/0/4
[SW2] port-group group-member GigabitEthernet 0/0/2 to GigabitEthernet 0/0/4

具体命令形式和端口编号取决于设备版本;配置后应检查实际接口清单,避免误改不在预期范围内的端口。

原讲义图 8-9 多终端访问公共服务器的 Hybrid 端口规划

原讲义图 8-10 扩展交换网络中的 Hybrid 端口规划

VLAN 之间如何通信

不同 VLAN 是不同的二层广播域。要互通,必须有三层设备作为网关来路由数据包。常见做法有三种。

每个 VLAN 使用路由器的独立物理接口

为每个 VLAN 接一条路由器物理链路,并在路由器接口配置该网段的网关 IP。原理简单,但需要多个路由器接口和交换机到路由器的链路,接口资源容易浪费。

例如 VLAN 10 的主机访问 VLAN 20:主机先把帧发给 VLAN 10 的网关 MAC;路由器收到后查看目的 IP,发现属于 VLAN 20;然后从 VLAN 20 对应接口发出新帧,目的 MAC 改为目标主机 MAC。端到端的 IP 源、目的地址保持不变,二层 MAC 地址在路由转发时重写。

原讲义图 8-11 路由器物理接口实现 VLAN 间通信

单臂路由

单臂路由使用路由器的一条物理链路连交换机,并在该链路上划分多个路由器子接口。每个子接口对应一个 VLAN,使用 802.1Q 标签区分流量,因此交换机连接路由器的端口需要承载这些 VLAN。

讲义中的配置示例:

bash 复制代码
[R1] interface GigabitEthernet0/0/0.1
[R1-GigabitEthernet0/0/0.1] dot1q termination vid 2
[R1-GigabitEthernet0/0/0.1] arp broadcast enable

第一条创建子接口;第二条指定该子接口处理 VLAN 2 的 802.1Q 流量;第三条允许子接口处理 ARP 广播。不同平台的子接口命令语法可能不同。单臂路由配置节省接口,但这条物理链路和路由器会成为多个 VLAN 共用的瓶颈或单点故障。

原讲义图 8-12 路由器子接口实现单臂路由

三层交换机的 VLANIF 接口

三层交换机可以为 VLAN 创建 VLANIF(也称 SVI,交换虚拟接口),并在其上配置该 VLAN 的网关 IP。VLAN 内流量仍由交换模块转发;跨 VLAN 流量交给设备的三层路由功能。

讲义示例:

bash 复制代码
[SW1] interface Vlanif 2
[SW1-Vlanif2] ip address 192.168.1.254 24

VLANIF 2 是 VLAN 2 的三层网关接口。要正常工作,VLAN 本身及对应二层端口也要正确配置,且终端默认网关必须设置为对应 VLANIF 地址。

二层接口和三层接口的区别可概括为:二层接口负责在 VLAN 内按 MAC 地址转发,通常不能直接配置三层 IP;三层接口可以配置 IP 并参与路由,能作为不同广播域之间的网关。二层 VLAN 提供广播域边界,三层路由则连接这些边界。

bash 复制代码
[SW1] interface Vlanif 2 [SW1-Vlanif2] ip address 192.168.1.254 24

原讲义图 8-13 VLANIF 作为不同 VLAN 的默认网关

原讲义图 8-14 三层交换机交换模块与路由模块的转发过程

二层环路为什么危险

为冗余而把交换机连成环形,本意是让一条链路断开时还有备份路可走。但二层以太网帧没有像 IP 包那样的 TTL 字段来限制转发跳数。广播帧在环形路径里可能不断复制和循环,导致广播风暴;交换机反复从不同端口学到同一个 MAC 地址,又会造成 MAC 地址表震荡,正常数据也可能被送错方向。

这正是生成树协议出现的原因:逻辑上保留冗余,正常情况下先阻断一部分链路,让活跃转发拓扑没有环;发生故障时再启用备用链路。

原讲义图 9-1 交换机冗余连接形成二层环路的场景

STP 用一棵无环的树管理冗余链路

STP 做什么

STP(Spanning Tree Protocol,生成树协议)通过交换 BPDU、选举根桥和端口角色,把有冗余链路的二层拓扑修剪成一棵无环树。冗余链路并未物理拔掉,而是有端口处于阻塞状态;活动路径断开后,协议重新计算并开放合适的备用端口。

原讲义图 9-2 两台交换机之间的冗余链路

原讲义图 9-3 不同速率冗余链路的阻塞选择问题

BPDU 是交换机之间的"选举消息"

BPDU(Bridge Protocol Data Unit,桥协议数据单元)携带生成树计算和拓扑变化所需的信息。经典 STP 中常见两类:

  • 配置 BPDU:携带根桥 ID、根路径开销、发送桥 ID、端口 ID、计时器等信息。STP 配置 BPDU 使用二层组播目的地址 01-80-C2-00-00-00。经典 STP 由根桥按 Hello Time 周期发送,默认 2 秒;其他交换机收到后按生成树规则处理和传播。

  • TCN BPDU:旧式 STP 中非根桥向上游通告拓扑变化。沿途设备确认后由根桥通知网络。

经典 STP 的配置 BPDU 中,TC(Topology Change)用于通知拓扑变化,TCA(Topology Change Acknowledgment)用于确认收到 TCN。要区分三个名称:TC 是变化通知标志,TCA 是确认标志,TCN 是旧式协议里单独的拓扑变化通知 BPDU。它们不是三个完全等价的报文。

配置 BPDU 中的 Max Age 用于判断保存的根信息是否过期。默认 Hello Time 为 2 秒,Max Age 为 20 秒,也就是 10 个 Hello 周期;但实际定时器会受根桥配置及设备实现影响。

原讲义图 9-4 配置 BPDU 的以太网封装和主要字段

原讲义图 9-5 配置 BPDU 从根桥向外传播

原讲义图 9-6 TC 与 TCA 标志位及 BPDU 字段

根桥和端口角色如何选出来

生成树选举遵循"优先级信息越好,数值越小越优先"的原则。优先级向量比较的核心顺序是:根桥 ID、到根桥的路径开销、发送桥 ID、发送端口 ID,必要时再比较本地端口 ID。可以把它想成多人竞选:先比谁认定的根更好,再比到根的路谁更近,完全打平才继续比交换机和端口编号。

  1. 选根桥:所有交换机最初都认为自己是根桥,并通过 BPDU 互相比较。桥 ID(BID)由桥优先级和 MAC 地址等部分组成;优先级值较小者优先,数值相同时再比较 MAC 地址。优先级默认值、可配置范围和步进值依设备及模式而异,讲义中的配置环境使用 16 的倍数。

  2. 选根端口:每台非根桥选择一个到根桥总代价最小的端口作为根端口。如果路径开销相同,则按上面的发送桥 ID、发送端口 ID 等规则打破平局。

  3. 选指定端口:每个网段选出一个负责向该网段转发 BPDU 和数据的指定端口。根桥上的活动端口通常都是指定端口;非根网段按最优 BPDU 比较结果确定。

  4. 其余冗余端口阻塞:不承担当前转发的端口保持备用/阻塞角色,避免形成环路。

STP 常见桥角色是根桥和非根桥;端口角色是根端口、指定端口和阻塞端口。Port ID 由端口优先级和端口编号组成。讲义环境里端口优先级默认为 128,可选值 0 到 240,且为 16 的倍数;这些具体取值要结合设备命令确认。

原讲义图 9-7 STP 根桥和端口角色选举思路

原讲义图 9-8 桥优先级配置范围示例

原讲义图 9-9 桥 ID 的组成

原讲义图 9-10 STP 选举使用的原始拓扑

原讲义图 9-11 根桥选举结果

原讲义图 9-12 根端口和指定端口选举过程

原讲义图 9-13 阻塞端口选举过程

原讲义图 9-14 STP 修剪后的无环转发树

STP 端口状态和等待时间

经典 STP 的端口状态不是一选完角色就都立即转发:

状态 收发 BPDU 学习 MAC 转发数据
Disabled 不参与 否 否
Blocking 接收,不主动发送普通配置 BPDU 否 否
Listening 发送/处理 BPDU 否 否
Learning 发送/处理 BPDU 是 否
Forwarding 发送/处理 BPDU 是 是

从阻塞进入转发的经典过程通常要经过 Listening 和 Learning。默认 Forward Delay 为 15 秒,每个阶段等待 15 秒,因此常见初始收敛示例约为 30 秒。若还要等待 Max Age 判断旧根信息失效,故障重新收敛可能再多约 20 秒,讲义给出的典型上限示例约为 50 秒。

这个 30 秒或 50 秒不是所有故障都固定发生的时间。是否需要等待 Max Age,备用端口是否已掌握有效 BPDU,故障是否被本地快速检测,以及设备配置都会影响实际时长。要理解的是:传统 STP 依靠定时器等待和重新计算,故障切换可能很慢。

三个经典计时器:Hello Time 2 秒,用于 BPDU 周期;Max Age 20 秒,用于根信息有效时间;Forward Delay 15 秒,用于 Listening/Learning 状态等待。随意调短可能在拥塞时误判链路故障、频繁重算,或在拓扑变化时形成临时环路;调长则会拖慢故障发现和收敛。

原讲义图 9-15 传统 STP 链路故障后的端口切换场景

原讲义图 9-16 存在直连故障检测时的收敛示例

原讲义图 9-17 需要等待 Max Age 时的再收敛示例

拓扑变化为什么还要更新 MAC 表

假设主机 B 原先通过交换机 SW1 的端口 2 可达,SW1 的 MAC 表便记录"B 在端口 2"。后来 SW2 到 SW4 的链路断开,SW4 原本阻塞的备用口被打开,主机 B 实际改从另一条路到达。如果 SW1 仍使用旧记录,就会把发给 B 的帧送进已经失效的路径。

经典 STP 的拓扑变化通知机制就是让相关交换机尽快更新转发表。旧式流程大致如下:检测到端口状态变化后,非根桥向根桥发送 TCN BPDU;沿途交换机继续转发并通过 TCA 确认;根桥在配置 BPDU 中置位 TC;收到 TC 的交换机暂时缩短 MAC 表项老化时间。讲义中的教学例子是从 300 秒缩短到 15 秒,让错误路径记录更快被清除。注意,这是经典 STP 的描述;RSTP 的拓扑变化处理不同。

经典 STP 的不足在于拓扑变化依赖通知传播和定时器;网络层次越多,等待越久。终端频繁上线/下线还可能引起额外的拓扑变化处理。

原讲义图 9-18 链路切换后 MAC 表旧记录导致转发失败的场景

链路开销标准

STP 用 Path Cost(路径开销)比较到根桥的路径。链路速率越高,开销通常越低;多段链路的开销相加后比较。讲义列出 IEEE 802.1D-1998、802.1t 和 Legacy 三种开销标准,示例链路速率包括 100 Mbps、1 Gbps 和 10 Gbps。不同标准的速率映射值可能不同,不能混用一套数值;在不同厂商设备间排障时,先确认双方采用的开销标准和端口实际开销。

原讲义图 9-19 不同链路速率与 STP 开销标准对照

RSTP 让备用路径更快接管

RSTP 相比 STP 改了什么

RSTP(Rapid Spanning Tree Protocol,快速生成树协议)保留生成树防环的基本思想,同时改进端口状态、角色、BPDU 处理和端口协商机制。它兼容 STP,但一旦某端口退回旧式 STP 行为,就会失去那一段快速收敛能力。

RSTP 把 STP 的五种状态归并为三种:Discarding(丢弃,不学习 MAC、不转发数据)、Learning(学习 MAC、不转发数据)、Forwarding(学习并转发数据)。Disabled、Blocking、Listening 等 STP 状态在 RSTP 下的行为映射到 Discarding。

RSTP 端口角色包括:根端口(本交换机到根桥的最佳路径)、指定端口(所在网段的转发端口)、Alternate(根端口的替代路径)、Backup(同一交换机另一端口对指定端口的备份,通常出现在共享介质等场景)。Alternate 端口使交换机可在已有有效备用路径时直接切换,而不必总从头进行慢速选举。

RSTP BPDU 的协议版本 ID 为 2、BPDU Type 为 2;Flags 的 8 位都获得用途,包含拓扑变化确认、拓扑变化、Proposal、Port Role、Learning、Forwarding 和 Agreement 等信息;还加入 Version 1 Length 字段用于兼容。与经典 STP 不同,每台交换机都可从指定端口按 Hello Time 主动发送 RSTP BPDU,不必等待根桥发送;默认 Hello Time 仍通常是 2 秒,连续丢失 3 个 Hello(默认约 6 秒)可使邻接信息过期。

当交换机暂时收不到更优根信息时,可能先发出"我暂时认为自己是根"的较差 BPDU。上游/邻居收到后可以立即回送更优信息,帮助它恢复正确判断,而不是静等一轮长 Max Age。这类快速响应是 RSTP 加快收敛的一部分。

原讲义图 10-1 RSTP 的根端口、指定端口、Alternate 与 Backup 角色

原讲义图 10-2 RSTP BPDU Flags 字段

原讲义图 10-3 RSTP BPDU 的周期发送

原讲义图 10-4 阻塞端口收到较差 BPDU 后立即回应更优信息

三种让 RSTP 快起来的机制

边缘端口直接连接 PC、打印机等终端,不连接另一台交换机。它可以直接进入 Forwarding,不必经历传统等待,也不会因终端上线而让网络拓扑反复重算。若边缘端口收到 BPDU,它会失去边缘属性并参与生成树计算,所以只应把真正面向终端的端口设为边缘端口。

根端口快速切换依赖已有 Alternate 端口。根端口故障时,如果替代路径另一端的指定端口处于可转发状态,新根端口可以跳过传统 Listening/Learning 等待而快速转发。

Proposal/Agreement(P/A)握手用于安全地开放新链路上的指定端口:

  1. 上游交换机准备让指定端口转发,向下游发出 Proposal(提议)BPDU。

  2. 下游交换机进行同步:除边缘端口和收到 Proposal 的端口外,将其他可能造成环路的非边缘端口暂时置为 Discarding。

  3. 同步完成后,下游返回 Agreement(同意)BPDU。

  4. 上游收到 Agreement 后,使指定端口快速进入 Forwarding。

  5. 被同步阻塞的端口再依序执行 P/A,直至拓扑收敛。

同步步骤很关键。若交换机只开放新链路却不先阻断其他成环路径,就可能短暂形成二层环路。RSTP 依靠"先确认其他路径已安全,再开放新路径"来兼顾速度和防环。

在合适的点对点全双工链路和设备条件下,RSTP 切换通常可在秒级甚至接近 1 秒完成;实际时间仍受拓扑、链路检测、设备兼容和配置影响,不应把 1 秒当作保证值。

原讲义图 10-5 边缘端口连接终端的示例

原讲义图 10-6 网络收敛后 Alternate 端口处于丢弃状态

原讲义图 10-7 根端口故障后 Alternate 端口快速接管

原讲义图 10-8 Proposal 与 Agreement 握手过程

原讲义图 10-9 P A 同步前可能出现的临时环路

RSTP 的拓扑变化处理

RSTP 取消了经典 STP 那种由非根桥逐级上送 TCN、再等待根桥广播 TC 的流程。检测到拓扑变化的交换机可以直接发送带 TC 标志的 RSTP BPDU,通知相邻交换机。RSTP 设备收到拓扑变化信息后,会更主动地清除相关 MAC 学习信息,使后续流量重新学习路径;讲义强调它会清除其他端口学习到的 MAC 地址,而经典 STP 是短时间缩短老化定时器。

STP 与 RSTP 混用时要留意

RSTP 端口连续三次收到旧式 STP BPDU 后,可以切换到 STP 兼容行为;这样做会失去快速收敛特性。旧式 STP 设备移除后,相关端口不一定自动回到 RSTP 状态,需检查运行模式。若网络必须混用,通常把旧式 STP 设备放在边缘更容易控制影响范围。

讲义中的 H3C 风格配置示例:

bash 复制代码
[H3C] stp global enable
[H3C] stp mode {stp|mstp|rstp|pvst}
[H3C-Ethernet0/1] undo stp enable
[H3C-Ethernet0/1] stp edged-port enable
[H3C-Ethernet0/1] stp cost <cost-value>
[H3C] stp priority <priority-value>
[H3C] stp pathcost-standard {dot1d-1998|dot1t|legacy}
[H3C] stp timer hello <seconds>
[H3C] stp timer max-age <seconds>
[H3C] stp timer forward-delay <seconds>

undo stp enable 会关闭该接口的生成树处理,只能用于确认不存在二层环路的场景,不能因端口"看起来没问题"就随意使用。Hello Time 过长会拖慢故障感知,过短会增加 BPDU 和 CPU 负担;Max Age 过长会延迟失效判断,过短可能在拥塞时误判;Forward Delay 过长会让收敛变慢,过短会增加临时环路风险。应遵循厂商的协议约束,不要单独改一个计时器而忽略整组参数。

MSTP 让多个 VLAN 分担多条链路

为什么需要多个生成树实例

STP 和 RSTP 通常让所有 VLAN 共用一棵生成树。若两条 Trunk 都有冗余,某条链路可能因单一生成树而整体阻塞,即使另一些 VLAN 的流量本可走这条链路。MSTP(Multiple Spanning Tree Protocol,多生成树协议)允许把 VLAN 映射到多个生成树实例(MSTI),不同实例可以选择不同转发路径。这样既防环,又能让不同 VLAN 群组在多条链路上分担流量。

例如 VLAN 10 映射到实例 1,VLAN 20 映射到实例 2;如果实例 1 与实例 2 的根桥或路径选择不同,它们可以在不同的链路上转发。负载分担来自不同实例的拓扑差异,不是把同一个 VLAN 的帧随意复制到所有链路。

原讲义图 10-10 单一生成树造成部分 VLAN 链路资源闲置

原讲义图 10-11 不同 MSTI 使用不同转发路径实现负载分担

MST 区域和树的名词

一个 MST 区域(MST Region)由配置一致的交换机构成。相同区域的重要条件包括区域名称、修订级别和 VLAN 到实例的映射关系一致;任一项不同,都可能被视为不同区域。区域内部可以独立计算,降低管理和计算复杂度;区域之间则按公共树连接。

  • IST(Internal Spanning Tree):区域内部生成树,默认存在,通常对应实例 0 的区域内行为。

  • MSTI(Multiple Spanning Tree Instance):管理员创建的额外生成树实例,只在本区域内生效。默认所有 VLAN 映射到实例 0;也可以将 VLAN 手动映射到其他实例。

  • CST(Common Spanning Tree):连接多个 MST 区域/传统生成树网络的公共树视图。

  • CIST(Common and Internal Spanning Tree):整个互联网络的公共与内部生成树,由各区域的内部树与区域间公共树共同构成。

  • CIST 总根:整个 CIST 中的总根桥。

  • CIST 区域根:某个 MST 区域在 CIST 计算中的区域根。

  • Master 端口:在非根 MST 区域内,朝向 CIST 总根方向的端口角色;单区域网络没有 Master 端口,根区域也没有,其他区域通常有一个。

简单理解:把每个 MST 区域当成一个较大的逻辑交换节点,区域内部跑 IST/MSTI,区域之间由 CIST/CST 保证互通和防环。

原讲义图 10-12 多个 MST 区域及 VLAN 到实例的映射

原讲义图 10-13 CIST、CST、IST 和多个 MST 区域的关系

MSTP 怎样计算

MSTP 先在整个 CIST 范围选总根,再确定各区域根;CIST 与各 MSTI 的计算可以同步进行。比较优先级向量时,先看外部路径信息,再看区域内部信息。MSTP 的 BPDU 在 RSTP BPDU 基础上增加 MST 专有字段,例如配置标识、区域摘要、CIST 信息和各 MSTI 信息。一般网络配置中重点是正确配置区域和 VLAN 映射,逐字段解码通常属于进阶内容。

原讲义图 10-14 RSTP BPDU 与 MSTP 专有字段

原讲义图 10-15 MSTP 计算结果及不同实例路径

MSTP 中的快速握手与兼容问题

MSTP 也使用 Proposal/Agreement 思路。讲义所述 MSTP Proposal BPDU 中 P 和 A 标志都置位;下游识别后同步端口,再返回 A 置位的 Agreement,使上游指定端口快速转发。

若上游 RSTP 只发送 P 置位的 BPDU,而下游 MSTP 设备的对应实现要求 P、A 同时置位,双方可能无法完成握手,快速收敛失效,退回到传统等待过程。讲义给出的兼容命令示例为:

bash 复制代码
[SWB-Ethernet1/0/1] stp no-agreement-check
[SWB-Ethernet1/0/1] stp compliance {auto|dot1s|legacy}

auto 表示自动识别,dot1s 表示标准格式,legacy 用于兼容非标准格式。应先确认端口连接的设备和厂商说明,再启用兼容选项。

配置摘要侦听(config-digest-snooping)是特定互通场景下的厂商功能。讲义示例:

bash 复制代码
[H3C] stp config-digest-snooping
[H3C-Ethernet1/0/1] stp config-digest-snooping

开启后设备不再按通常方式比较配置摘要,讲义特别提醒:只要区域名称和修订级别一致,即使 VLAN 映射关系不一致,也可能被当成同一区域。这会隐藏配置不一致,因此不能把它当作通用修复手段;需按厂商互通方案审慎使用。

原讲义图 10-16 MSTP 中 Proposal Agreement 标志位

原讲义图 10-17 上游 RSTP 与下游 MSTP 互连场景

原讲义图 10-18 No Agreement Check 兼容配置示意

生成树保护机制

这些保护机制不是让生成树更快,而是防止误接设备、错误 BPDU 或链路异常破坏预期拓扑。每种保护都要放在适合的端口角色上。

BPDU 保护

边缘端口本应只接终端。如果有人把交换机接到边缘端口,或终端伪造 BPDU,端口可能失去边缘属性并反复参与生成树计算。开启 BPDU 保护后,边缘端口收到 BPDU 时可以被自动关闭,避免接入设备扰动网络。

bash 复制代码
[SW1] stp bpdu-protection
[SW1-Ethernet1/0/1] stp edged-port

具体关闭方式、恢复方式和命令组合按设备平台确认。

根桥保护

合法根桥的指定端口如果收到更优(优先级更高)的 BPDU,可能失去根桥地位。根桥保护用于指定端口:收到更优 BPDU 后,使该端口进入类似 Listening/Discarding 的受限状态,不再正常转发,直到条件恢复。

bash 复制代码
[SW1-Ethernet1/0/1] stp root-protection

不要把根桥保护配置在根端口上;应根据拓扑在预期的下游指定端口部署。

环路保护

若链路拥塞或单向故障导致交换机未及时收到预期 BPDU,原本阻塞的端口可能错误地转为转发,造成逻辑环路。对参与生成树的相关端口启用环路保护后,设备在收不到应有 BPDU 时可将端口置为 Discarding,等待协议状态恢复。

bash 复制代码
[SW1-Ethernet1/0/1] stp loop-protection

原讲义图 10-19 三角拓扑中的环路保护端口

TC 保护

大量伪造或频繁的 TC BPDU 会使交换机反复清除 MAC 学习信息,给设备和网络造成负担。TC 保护通过限制一段时间内处理拓扑变化的次数来降低影响。

bash 复制代码
[SW1] stp tc-protection
[SW1] stp tc-protection threshold <count>

讲义中的策略是监控一个时间窗口内收到的 TC BPDU 是否超过阈值,并限制 10 秒内的地址表项删除次数。阈值和实际处理方式由设备实现决定。

做实验时的检查顺序

VLAN 实验先检查 VLAN 是否创建、终端端口的 VLAN/PVID 是否正确、Trunk 允许列表两端是否一致,以及终端 IP、掩码和网关是否匹配。跨 VLAN 访问再检查路由器子接口或 VLANIF 是否有正确 IP,并确认交换机到网关的链路承载相应 VLAN。

生成树实验先确认协议模式和设备版本,再检查根桥是谁、各端口角色/状态是什么、路径开销采用什么标准。人为断开链路后,观察替代端口是否接管、MAC 地址是否重新学习、收敛时间是否符合预期。MSTP 实验还要逐台核对区域名称、修订级别、VLAN 到实例映射;只看"接口是 trunk"不足以证明两端属于同一 MST 区域。

排障时可把现象拆成三层:

  1. 二层归属:帧是否进入正确 VLAN,Trunk 是否允许该 VLAN。

  2. 二层路径:STP/RSTP/MSTP 是否阻塞了预期路径,根桥和端口角色是否符合设计。

  3. 三层网关:跨 VLAN 通信所需的路由接口、VLANIF、网关地址和路由是否正确。

原讲义实验任务

VLAN 综合实验要求把本章知识放在同一拓扑中验证:创建所需 VLAN,配置终端侧端口与交换机间链路,验证同一 VLAN 跨交换机通信、不同 VLAN 默认隔离,并继续验证单臂路由或 VLANIF 的跨 VLAN 转发。实验时应结合前面的检查顺序逐层定位,而不是只用 ping 的成功或失败判断配置是否正确。

STP 实验的原任务包括:开启所有设备并等待 STP 收敛后观察状态;把 SW4 调整为根桥;在 SW2 上关闭当前参与转发的链路端口,观察备用路径和收敛过程;将 SW1 连接 PC 的端口配置为边缘端口,再观察终端上线对生成树的影响。实际操作前要先通过端口角色确认将要关闭的是哪一个接口,避免因拓扑或端口编号不同而误操作。

MSTP 综合实验要求所有交换机创建 VLAN 10、20、30、40,交换机之间的端口配置为 Trunk 并允许相关 VLAN,再按拓扑划分区域、映射实例并设置主备根桥。讲义图示中的规划如下:

MST 区域 修订级别 实例 1 映射 实例 2 映射 根桥规划
hw1 1 VLAN 10、20 VLAN 30、40 SW1 为实例 1 主根、实例 2 备份根;SW2 相反
hw2 2 VLAN 10 VLAN 30 SW4 为实例 1 主根、实例 2 备份根;SW6 相反
hw3 3 VLAN 20 VLAN 40 按区域拓扑完成实例与根桥检查

完成后应分别检查每个区域的配置摘要、CIST 根/区域根、各 MSTI 根以及端口角色,并验证实例 1 与实例 2 是否按设计选择不同路径。区域名称、修订级别和 VLAN 映射必须逐台核对;只要其中一项不一致,就可能形成区域边界。

原讲义图 9-20 STP 实验拓扑和操作要求

原讲义图 10-20 MSTP 多区域综合实验拓扑

最后把关系串起来

VLAN 划出二层广播域;Access、Trunk、Hybrid 决定端口如何处理未标记和带标记的帧;三层设备负责跨 VLAN 路由。为了冗余连接而形成的二层环路,由 STP 通过阻塞备用链路来消除。RSTP 通过边缘端口、替代端口和 Proposal/Agreement 握手缩短切换时间。MSTP 则把 VLAN 映射到多个树实例,使不同 VLAN 群组可以使用不同无环路径。

记住这条主线,再回头看命令就容易得多:先确定"这个帧属于哪个 VLAN",再确定"它能走哪条无环二层路径",最后才是"是否需要经过三层网关"。

阅读与配置提醒

本文保留了三份讲义的主要知识点、参数、示例命令和实验方向,并为术语及协议边界补充了解释。交换机命令、缺省值、VLAN 端口收发规则及 STP 计时器可能因品牌、型号、软件版本和协议模式而异;将示例用于真实设备前,应先核对对应设备的官方命令参考,并在实验环境验证。配置生成树保护、关闭接口 STP 或调整计时器前,务必确认网络拓扑,避免误操作造成环路或断网。

相关推荐
whyutianict_vv1 小时前
HCIE-Datacom 考纲技术拆解:从 OSPF/BGP 到 VXLAN/Netconf 的知识地图
运维·网络
ITxiaobing20231 小时前
AppsFlyer Protect360 判假之后:如何系统排查 IP 维度
网络·网络协议·tcp/ip
艾莉丝努力练剑1 小时前
【AI大模型接入SDK】ChatServer 路由规则绑定
网络·c++·人工智能·学习·ai·架构
qq_401700411 小时前
TCP 长连接、心跳包与断线自动重连设计:工业级通信的“不死鸟”架构
网络·qt·tcp/ip
zincsweet2 小时前
Linux网络编程入门(二):从 UDP 回显服务器到多人聊天室,三个项目的渐进式实践
linux·服务器·网络
艾莉丝努力练剑2 小时前
【AI大模型接入SDK】Trae生成代码介绍
网络·c++·人工智能·学习·架构
Eloudy2 小时前
IB Specification Vol 1 Chapter 3 体系结构与 rdma-core-2410mlnx54 实现关联分析
网络·gpu·rdma
坐看风云变幻2 小时前
《系统架构师成长之路》第 3 期|计算机网络:TCP 三次握手与可靠传输
tcp/ip·计算机网络·系统架构
Funlang2 小时前
HTTP 服务端,能写业务了
网络·网络协议·http