STP生成树协议

本文最后更新于 2025年8月26日 下午

STP生成树协议

一、核心概念与要解决的问题

1. 协议定位与核心矛盾

  • 全称:Spanning Tree Protocol
  • 本质:二层链路管理协议,通过逻辑阻塞冗余链路,构建 “无环且有冗余” 的二层网络拓扑。
  • 解决的核心问题
    1. 广播风暴:消除二层环路导致的数据包无限循环转发。
    2. MAC表震荡:避免因环路引发的MAC地址表频繁刷新,导致设备无法正常转发。
    3. 冗余备份:在主链路发生故障时,备份链路能够自动切换,保障网络高可用性。

二、STP (802.1D) 详细工作流程(选举过程)

STP通过严格的选举过程构建无环拓扑,这个过程就像是为一支军队建立指挥体系:

Step 1: 选举根桥 (Root Bridge) - 最高指挥官

  • 规则:所有交换机通过交换BPDU报文,比较桥ID (BID),值最小的成为根桥。
  • 选举细节
    • 桥ID = 桥优先级 (2字节) + MAC地址 (6字节)
    • 先比较优先级(默认为32768),数值小者优。
    • 若优先级相同,则比较MAC地址,MAC地址小者优。
  • 为什么:根桥是生成树的根,是所有路径计算的唯一参考点,确保网络中没有循环路径。

Step 2: 选举根端口 (Root Port) - 每台交换机的“回家”之路

  • 定义:在每台非根桥交换机上,有且只有一个根端口。这是到达根桥路径开销最小的端口。
  • 选举规则 (按顺序比较,直到决出胜负)
    1. 最低的根路径开销:计算到达根桥的累计路径开销,值最小的端口胜出。
    2. 最小的发送者桥ID:如果路径开销相同,则选择接收到BPDU报文中,发送方交换机BID最小的那个端口。
    3. 最小的发送者端口ID:如果发送方BID也相同,则选择BPDU报文中发送方端口ID最小的那个端口。
    4. 最小的本机端口ID:如果以上全部相同(极其罕见),则最终比较本机自己的端口ID,小者胜出。
  • 核心功能:数据“上传”。根端口负责将本地的数据流量 “向上”发送往根桥方向

Step 3: 选举指定端口 (Designated Port) - 链路上的“权威出口”

  • 定义:在每一个网络 segment(链路) 上,有且只有一个指定端口。这是该链路上负责向下游转发数据的“权威”端口。
  • 选举规则:链路上连接的两台设备会相互比较,谁有“更优”的根路径信息,谁的端口就成为指定端口。比较规则与根端口选举类似,但视角是“谁的路径更适合代表这条链路”:
    1. 更低的根路径开销:通过本机到达根桥的开销更小的设备,其端口成为DP。
    2. 更小的桥ID:如果根路径开销相同,则BID更小的交换机,其端口成为DP。
    3. 更小的端口ID:如果BID也相同(例如一台交换机的两个端口连成环路),则端口ID更小的端口成为DP。
  • 特例根桥的所有活动端口都是指定端口,因为它的根路径开销为0,是最优的。
  • 核心功能:数据“下发”。指定端口负责从根桥方向接收数据,并 “向下”转发给下游网络

Step 4: 阻塞剩余端口 (Blocking/Alternate Port) - 逻辑断环

  • 定义:所有既不是根端口也不是指定端口的端口,将被置于阻塞状态
  • 作用:这是STP打破环路的关键操作。被阻塞的端口不会转发任何数据帧,只接收BPDU报文以监听网络状态变化,作为备份路径存在。

📌 数据流向核心总结

  • 指定端口 (DP):是数据的 “下行通道” ,将数据从网络核心(根桥)推向边缘。
  • 根端口 (RP):是数据的 “上行通道” ,将数据从网络边缘汇聚到核心。
  • 这种明确的、层次化的数据流向,从机制上保证了整个网络绝无环路

📌 BPDU的流向

  • STP规定只有根桥才会周期性(每2秒)地自发产生配置BPDU。
  • 非根桥永远不会自发产生配置BPDU。 它们只是在根端口收到根桥的BPDU后,触发一个动作:从自己的指定端口向下发送一个“更新后”的BPDU。

STP端口状态迁移过程

端口从启动到最终转发数据,需要经历严格的状态机,这是收敛慢的主要原因:

状态 接收BPDU 学习MAC地址 转发数据帧 持续时间 目的
阻塞 (Blocking) 最多20秒 防止在计算完成前形成环路
监听 (Listening) 15秒 参与STP计算,确定端口角色
学习 (Learning) 15秒 构建MAC地址表,为转发做准备
转发 (Forwarding) 稳定状态 正常传输用户数据
禁用 (Disabled) - 管理员手动关闭

总收敛时间:从拓扑变化到恢复通信,通常需要30秒(Listening + Learning)50秒(Max Age + Listening + Learning)


三、RSTP快速生成树协议

1. RSTP概述

RSTP(Rapid Spanning Tree Protocol,IEEE 802.1w)是STP的演进版本,旨在解决传统STP收敛速度慢的问题。它完全兼容STP,但通过改进算法和机制,将收敛时间从STP的30-50秒缩短到亚秒级(通常在1秒以内)。

2. 相对于STP的核心改进

RSTP在STP基础之上进行了四项关键性优化,如下表所示:

对比维度 STP (802.1D) RSTP (802.1w) RSTP的改进点与优势
端口角色 根端口、指定端口、阻塞端口 根端口、指定端口、替代端口、备份端口 新增明确备份角色,为快速切换提供清晰路径
端口状态 5种:阻塞、监听、学习、转发、禁用 3种:丢弃、学习、转发 简化状态机,丢弃状态合并了禁用/阻塞/监听状态,操作更高效
BPDU处理 仅根桥发送配置BPDU,非根桥只转发 所有交换机每2秒独立发送BPDU(Hello包) BPDU充当保活机制,使故障检测不再依赖超时
收敛机制 依赖计时器超时(Max Age, Forward Delay) P/A握手机制、边缘端口、BPDU保活 通过主动协商和预设,消除漫长的等待时间

3. 三大快速收敛机制详解

3.1. P/A(提议/同意)握手机制

这是RSTP实现瞬时转发最核心的机制,用于点对点链路。

  • 目标:在确认无环的前提下,绕过Listening和Learning状态,直接进入Forwarding状态
  • 前提:仅在点对点(全双工)链路上生效。
  • 过程流程
    1. Proposal(提议):上游交换机(如根桥)在其指定端口上发送P标志置位的BPDU。该端口此时处于Discarding状态。
    2. Sync(同步):下游交换机收到P置位的BPDU后,阻塞所有非边缘端口(除了接收端口),以确保接受提议不会引入环路。此步骤是防环的关键。
    3. Agreement(同意):下游交换机完成同步后,从其根端口向上游回复一个A标志置位的BPDU,并立即将该根端口置为Forwarding状态
    4. 快速转发:上游交换机收到A置位的回复后,立即将其指定端口置为Forwarding状态
  • 递归:此过程会从根桥开始,递归地发生在整个网络的每一跳链路上。

3.2. 边缘端口(Edge Port)

  • 定义:直接连接终端设备(如PC、服务器)的端口,这些端口不可能形成环路。
  • 行为:边缘端口跳过STP计算,在链路激活后立即进入Forwarding状态,实现终端设备的即时接入。
  • 安全防护(必配):必须配置 BPDU Guard 功能。如果边缘端口意外收到BPDU(表明可能接入了一台交换机),交换机立即将该端口置为 err-disable 状态,从而在保证快速性的同时防止环路。

3.3. BPDU作为保活包(BPDU used as Keep-alive)

  • 行为:在RSTP中,所有交换机都会独立地每2秒(Hello Time)从指定端口和根端口发送BPDU。
  • 故障检测:如果一个端口连续3次(即6秒,3 * Hello Time)没有收到对端发来的BPDU,它就立即认为链路或邻居失效,并触发拓扑重新计算。
  • 对比STP:这替代了STP中被动等待Max Age计时器超时(20秒)的缓慢故障检测机制。

4. RSTP端口角色与备份路径

RSTP通过细化端口角色,明确了备份路径,实现了故障的快速切换。

端口角色 定义与作用 确定方式
根端口 (RP) 非根桥上通往根桥的最佳路径的端口。 到根桥的路径开销最小。
指定端口 (DP) 网段上通往根桥路径最优的端口,负责转发数据。 比较网段两端交换机提供的根路径开销,更优者胜出。
替代端口 (Alternate Port) 根端口的备份。提供了另一条通往根桥的次优路径。 收到其他交换机发出的更优BPDU的端口。
备份端口 (Backup Port) 指定端口的备份。提供了另一条连接到同一网段的备份链路。 收到本台交换机自己发出的更优BPDU的端口(多见于共享介质)。

收敛:当主端口(RP或DP)故障时,对应的备份端口(Alternate或Backup)会立即接管,无需任何延时,直接进入转发状态。

5. 配置示例(以Cisco IOS为例)

5.1. 启用RSTP

默认情况下,Cisco交换机运行的是PVST+(每VLAN STP)。要启用RSTP,需要将STP模式改为Rapid-PVST+。

1
2
SW1# configure terminal
SW1(config)# spanning-tree mode rapid-pvst ! 全局启用Rapid-PVST+

5.2. 配置根桥与次级根桥

1
2
3
4
5
# 将交换机配置为VLAN 1的主根桥
SW1(config)# spanning-tree vlan 1 root primary

# 将交换机配置为VLAN 1的备份根桥
SW2(config)# spanning-tree vlan 1 root secondary

5.3. 配置边缘端口与BPDU Guard

在接口下直接配置:

1
2
3
SW1(config)# interface GigabitEthernet0/1
SW1(config-if)# spanning-tree portfast ! 将端口设置为边缘端口
SW1(config-if)# spanning-tree bpduguard enable ! 启用BPDU Guard保护

全局配置并自动启用:

1
2
SW1(config)# spanning-tree portfast default   ! 将所有Access端口默认设为边缘端口
SW1(config)# spanning-tree portfast bpduguard default ! 为所有边缘端口全局启用BPDU Guard

5.4. 调整端口开销与优先级(可选)

用于手动控制根端口选举和流量路径。

1
2
3
SW1(config)# interface GigabitEthernet0/2
SW1(config-if)# spanning-tree cost 1000 ! 手动修改端口开销,影响RP选举
SW1(config-if)# spanning-tree port-priority 112 ! 修改端口优先级(0-255),影响DP选举

5.5. 验证命令

1
2
3
SW1# show spanning-tree verbose              ! 查看详细的RSTP状态信息
SW1# show spanning-tree interface GigabitEthernet0/1 detail ! 查看指定端口的详细角色和状态
SW1# show spanning-tree summary ! 查看STP模式摘要,确认运行的是rapid-pvst

四、MSTP多生成树协议

1. 前置概念:PVST+与RPVST+

在深入了解MSTP之前,必须理解Cisco私有协议PVST+和RPVST+,因为它们是理解MSTP优势的重要背景。

1.1. PVST+ (Per-VLAN Spanning Tree Plus)

  • 含义增强型每VLAN生成树协议,是Cisco对标准STP(IEEE 802.1D)的扩展。
  • 工作原理:为网络中的每一个VLAN都独立地运行一个STP实例。每个VLAN都有自己独立的根桥、端口角色和状态。
  • 优点
    • 提供了基于VLAN的负载分担可能性。可以通过为不同VLAN指定不同的根桥,让流量走不同的路径。
    • 比标准的CST(公共生成树,所有VLAN共用一棵树)更有弹性。
  • 缺点
    • 资源消耗巨大:在一个包含上百个VLAN的网络中,交换机需要计算和维护上百棵生成树,对CPU和内存是沉重的负担。
    • 收敛速度慢:基于传统的STP,收敛时间依然长达30-50秒。

1.2. RPVST+ (Rapid Per-VLAN Spanning Tree Plus)

  • 含义增强型快速每VLAN生成树协议,是Cisco对标准RSTP(IEEE 802.1w)的扩展。
  • 工作原理:同样是为每个VLAN运行一个生成树实例,但每个实例都使用了RSTP的快速收敛机制(P/A握手、边缘端口等)。
  • 优点
    • 既拥有了PVST+的每VLAN负载分担能力,又拥有了RSTP的亚秒级快速收敛速度。
    • 是Cisco交换机的默认模式。
  • 缺点
    • 资源消耗问题依旧存在:虽然收敛快了,但“每VLAN一棵树”的模型在超大规规模VLAN环境中依然非常消耗资源。

MSTP可以看作是解决PVST+/RPVST+资源消耗问题的“标准化”方案。

协议 生成树实例数量 收敛速度 资源消耗 标准/私有
PVST+ 每个VLAN一个 慢(秒级) Cisco私有
RPVST+ 每个VLAN一个 快(亚秒级) Cisco私有
MSTP 每个实例一个(1个IST + n个MSTI) 快(亚秒级) IEEE标准

结论:MSTP通过将多个VLAN分组到少数几个实例中,在保持快速收敛和负载分担能力的同时,极大地降低了系统开销,并因其IEEE标准身份实现了多厂商设备兼容。而RPVST+则是中小型纯Cisco环境中一个简单有效的常见选择。

2. MSTP概述

MSTP(Multiple Spanning Tree Protocol,IEEE 802.1s)是RSTP的进一步发展,旨在解决在大型网络、特别是多VLAN环境中RSTP和STP的局限性。其核心思想是“实例化”,允许将多个VLAN映射到少数几个生成树实例上,从而实现负载分担和更高效的资源利用。

  • 解决的问题
    • PVST+/RPVST+的资源消耗:每个VLAN运行一个生成树实例,在VLAN数量庞大时,会消耗大量交换机CPU和内存资源。
    • 无法实现负载分担:在PVST+中,所有VLAN的拓扑结构相同(除非手动调整优先级),所有流量都走同一条最优路径,无法利用冗余链路。

3. 核心概念

3.1. MST区域 (MST Region)

MSTP网络的基本组成单元。要属于同一个区域,多台交换机必须配置完全相同的三大属性:

  1. 区域名称 (Region Name):文本字符串。
  2. 修订级别 (Revision Number):一个数字,用于标识配置版本,默认0。
  3. VLAN与实例的映射表 (VLAN-to-Instance Mapping):定义哪些VLAN归属于哪个生成树实例。

只有配置完全相同的交换机才被认为在同一个MST区域内。 区域之间通过计算CST(公共生成树)互联。

3.2. 生成树实例 (Spanning Tree Instance)

MSTP的核心,分为两种类型:

  • IST (Internal Spanning Tree)实例0。这是默认且必须存在的实例。它承载所有未明确映射到其他实例的VLAN,并负责管理MST区域与外部网络(如运行STP的区域)的通信。
  • MSTI (Multiple Spanning Tree Instance):实例1-4094。用户自定义的实例。每个MSTI在区域内部独立计算一个无环拓扑,彼此互不影响。可以将需要遵循相同拓扑路径的VLAN组映射到同一个MSTI上。

3.3. CST与CIST

  • CIST (Common and Internal Spanning Tree):整个交换网络(可能包含多个MST区域和运行STP/RSTP的交换机)中,连接所有交换机的一棵总生成树。它由每个MST区域的IST实例和区域间的链路共同构成。
  • CST (Common Spanning Tree):特指连接不同MST区域的那部分生成树。每个MST区域在CST看来就像一台“虚拟交换机”。

4. MSTP的工作机制与优势

4.1. 工作机制

  1. 区域内:在每个MST区域内部,IST和所有MSTI独立进行拓扑计算,使用和RSTP相同的P/A快速收敛机制
  2. 区域间:不同MST区域之间通过CST互联。CST将每个区域视为一个整体(虚拟桥),在区域边界上计算出一棵无环的生成树。

4.2. 核心优势:负载分担

MSTP最大的优势是能够通过不同的MSTI实现基于VLAN的负载分担

  • 场景:核心交换机SW1和SW2之间有两条Trunk链路:Link-A和Link-B。
  • 配置
    • 将VLAN 10, 20, 30映射到MSTI 1,并调整成本或优先级,使其根桥在SW1,阻塞SW2上指向Link-B的端口。此时VLAN 10,20,30的流量走Link-A。
    • 将VLAN 40, 50, 60映射到MSTI 2,并调整成本或优先级,使其根桥在SW2,阻塞SW1上指向Link-A的端口。此时VLAN 40,50,60的流量走Link-B。
  • 结果:两条物理链路都被有效利用,实现了流量的负载分担,提升了网络整体带宽。

5. 配置示例(以Cisco IOS为例)

5.1. 启用MSTP并进入配置模式

1
2
3
SW1# configure terminal
SW1(config)# spanning-tree mode mst ! 全局启用MSTP模式
SW1(config)# spanning-tree mst configuration ! 进入MST区域配置模式

5.2. 配置区域三大属性(必须一致)

1
2
3
4
5
SW1(config-mst)# name REGION_A       ! 配置区域名称
SW1(config-mst)# revision 1 ! 配置修订号
SW1(config-mst)# instance 1 vlan 10, 20, 30 ! 将VLAN 10,20,30映射到实例1 (MSTI1)
SW1(config-mst)# instance 2 vlan 40, 50, 60 ! 将VLAN 40,50,60映射到实例2 (MSTI2)
SW1(config-mst)# exit ! 退出配置模式,修改会自动生效

重要:网络中所有需要处于同一区域的交换机,以上三条命令必须完全一致

5.3. 配置每个实例的根桥

可以为每个MSTI指定不同的根桥,这是实现负载分担的关键。

1
2
3
4
5
# 将本交换机配置为MST实例1的根桥
SW1(config)# spanning-tree mst 1 root primary

# 将本交换机配置为MST实例2的次级根桥
SW1(config)# spanning-tree mst 2 root secondary

5.4. 调整实例的端口优先级或开销(可选)

更精细地控制每个实例的路径选择。

1
2
3
SW1(config)# interface GigabitEthernet0/1
SW1(config-if)# spanning-tree mst 1 cost 1000000 ! 在MSTI1中增大开销,使该端口不被优选
SW1(config-if)# spanning-tree mst 2 port-priority 112 ! 在MSTI2中修改端口优先级

5.5. 验证与查看命令

1
2
3
4
5
6
7
8
9
10
11
# 查看MSTP的配置摘要
SW1# show spanning-tree mst configuration

# 查看所有MST实例的摘要状态
SW1# show spanning-tree mst summary

# 查看特定MST实例(如实例1)的详细拓扑信息
SW1# show spanning-tree mst 1

# 查看接口在不同MST实例中的角色和状态
SW1# show spanning-tree mst interface GigabitEthernet0/1

6. 总结与对比

特性 STP/RSTP (PVST+/RPVST+) MSTP
核心思想 每VLAN一棵树 多个VLAN一组实例
资源消耗 高(VLAN多时) 低(与实例数相关,与VLAN数无关)
负载分担 难实现,需逐VLAN调整 易于实现,按实例调整
配置复杂度 低(简单网络) 高(需规划区域和映射)
适用场景 中小型网络,VLAN数量少 中大型网络,VLAN数量多,需负载分担

总结:MSTP通过引入“实例”和“区域”的概念,在保持RSTP快速收敛优点的同时,极大地提升了网络的可扩展性和链路利用效率,是构建大型企业级数据中心和园区网的首选生成树协议。

五、总结与对比

特性 STP (802.1D) RSTP (802.1w) MSTP (802.1s)
收敛速度 慢 (30-50s) 快 (秒级) 快 (继承RSTP)
端口角色 RP, DP RP, DP, AP, BP 同RSTP
VLAN支持 所有VLAN一棵树 (CST) 所有VLAN一棵树 (CST) 多实例,VLAN分组负载分担
资源消耗 中(每实例独立计算)
适用场景 老旧网络 现代中小型网络 大型企业、数据中心、复杂网络

演进历程STP 解决了从无到有(基础无环)-> RSTP 解决了从慢到快(快速收敛)-> MSTP 解决了从用到好用(负载均衡、资源优化)。

核心回顾:STP的核心是通过选举(根桥、根端口、指定端口)阻塞来逻辑破环。深刻理解 “根端口是数据上行通道,指定端口是数据下行通道” 是掌握其机制的关键。


STP生成树协议
https://xinhaojin.github.io/2025/08/25/STP生成树协议/
作者
xinhaojin
发布于
2025年8月25日
许可协议