STP生成树协议
本文最后更新于 2025年8月26日 下午
STP生成树协议
一、核心概念与要解决的问题
1. 协议定位与核心矛盾
- 全称:Spanning Tree Protocol
- 本质:二层链路管理协议,通过逻辑阻塞冗余链路,构建 “无环且有冗余” 的二层网络拓扑。
- 解决的核心问题:
- 广播风暴:消除二层环路导致的数据包无限循环转发。
- MAC表震荡:避免因环路引发的MAC地址表频繁刷新,导致设备无法正常转发。
- 冗余备份:在主链路发生故障时,备份链路能够自动切换,保障网络高可用性。
二、STP (802.1D) 详细工作流程(选举过程)
STP通过严格的选举过程构建无环拓扑,这个过程就像是为一支军队建立指挥体系:
Step 1: 选举根桥 (Root Bridge) - 最高指挥官
- 规则:所有交换机通过交换BPDU报文,比较桥ID (BID),值最小的成为根桥。
- 选举细节:
- 桥ID = 桥优先级 (2字节) + MAC地址 (6字节)
- 先比较优先级(默认为32768),数值小者优。
- 若优先级相同,则比较MAC地址,MAC地址小者优。
- 为什么:根桥是生成树的根,是所有路径计算的唯一参考点,确保网络中没有循环路径。
Step 2: 选举根端口 (Root Port) - 每台交换机的“回家”之路
- 定义:在每台非根桥交换机上,有且只有一个根端口。这是到达根桥路径开销最小的端口。
- 选举规则 (按顺序比较,直到决出胜负):
- 最低的根路径开销:计算到达根桥的累计路径开销,值最小的端口胜出。
- 最小的发送者桥ID:如果路径开销相同,则选择接收到BPDU报文中,发送方交换机BID最小的那个端口。
- 最小的发送者端口ID:如果发送方BID也相同,则选择BPDU报文中发送方端口ID最小的那个端口。
- 最小的本机端口ID:如果以上全部相同(极其罕见),则最终比较本机自己的端口ID,小者胜出。
- 核心功能:数据“上传”。根端口负责将本地的数据流量 “向上”发送往根桥方向。
Step 3: 选举指定端口 (Designated Port) - 链路上的“权威出口”
- 定义:在每一个网络 segment(链路) 上,有且只有一个指定端口。这是该链路上负责向下游转发数据的“权威”端口。
- 选举规则:链路上连接的两台设备会相互比较,谁有“更优”的根路径信息,谁的端口就成为指定端口。比较规则与根端口选举类似,但视角是“谁的路径更适合代表这条链路”:
- 更低的根路径开销:通过本机到达根桥的开销更小的设备,其端口成为DP。
- 更小的桥ID:如果根路径开销相同,则BID更小的交换机,其端口成为DP。
- 更小的端口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状态。
- 前提:仅在点对点(全双工)链路上生效。
- 过程流程:
- Proposal(提议):上游交换机(如根桥)在其指定端口上发送P标志置位的BPDU。该端口此时处于Discarding状态。
- Sync(同步):下游交换机收到P置位的BPDU后,阻塞所有非边缘端口(除了接收端口),以确保接受提议不会引入环路。此步骤是防环的关键。
- Agreement(同意):下游交换机完成同步后,从其根端口向上游回复一个A标志置位的BPDU,并立即将该根端口置为Forwarding状态。
- 快速转发:上游交换机收到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 |
|
5.2. 配置根桥与次级根桥
1 |
|
5.3. 配置边缘端口与BPDU Guard
在接口下直接配置:
1 |
|
全局配置并自动启用:
1 |
|
5.4. 调整端口开销与优先级(可选)
用于手动控制根端口选举和流量路径。
1 |
|
5.5. 验证命令
1 |
|
四、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网络的基本组成单元。要属于同一个区域,多台交换机必须配置完全相同的三大属性:
- 区域名称 (Region Name):文本字符串。
- 修订级别 (Revision Number):一个数字,用于标识配置版本,默认0。
- 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. 工作机制
- 区域内:在每个MST区域内部,IST和所有MSTI独立进行拓扑计算,使用和RSTP相同的P/A快速收敛机制。
- 区域间:不同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 |
|
5.2. 配置区域三大属性(必须一致)
1 |
|
重要:网络中所有需要处于同一区域的交换机,以上三条命令必须完全一致。
5.3. 配置每个实例的根桥
可以为每个MSTI指定不同的根桥,这是实现负载分担的关键。
1 |
|
5.4. 调整实例的端口优先级或开销(可选)
更精细地控制每个实例的路径选择。
1 |
|
5.5. 验证与查看命令
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的核心是通过选举(根桥、根端口、指定端口) 和阻塞来逻辑破环。深刻理解 “根端口是数据上行通道,指定端口是数据下行通道” 是掌握其机制的关键。