一、环路的危害
1.现象
链路指示灯快速闪烁
MAC表震荡:交换机频繁修改MAC地址表 → 转发失效。
2.环路危害造成的影响
- 链路堵塞
- 主机操作系统响应迟缓
- 二层交换机管理缓慢
- 冲击网关设备的CPU
三、STP的作用
1.STP基本原理
STP即生成树协议,它通过阻断冗余链路来消除桥接网络中可能存在的路径环路。在一个网络中,当存在多条路径连接不同的网络设备(如交换机,图中的 SWA、SWB、SWC )时,可能会形成物理环路,这会导致广播风暴、多帧复制等问题,影响网络的正常运行。STP 通过在交换机之间交换 BPDU(Bridge Protocol Data Unit,桥协议数据单元),来计算出一个无环的网络拓扑结构,将某些端口设置为阻塞状态,从而避免网络环路的产生。
--怎么实现冗余链路的?
交换机通过交互 BPDU(网桥协议数据单元),比较报文中的 参数,依次选举出:
根网桥(全网唯一)
根端口(每台非根桥上唯一)
指定端口(每个网段唯一)
未被选中的冗余端口将进入 阻塞状态,从而消除二层环路。
2. STP的作用
- 冗余链路:在网络中,冗余链路是为了提高网络的可靠性而设置的备份链路。比如图中被阻塞的链路,在正常情况下虽然不传输数据,但当网络中的其他链路出现故障时,它就可以发挥作用。
- 故障恢复:当 当前正在使用的路径发生故障时,STP 会检测到链路状态的变化,然后激活之前被阻塞的冗余备份链路,恢复网络的连通性。例如,如果 SWA 和 SWC 之间的链路出现故障,原本被阻塞的 SWB 的 E0/20 端口可能会被重新激活,使得网络流量可以通过其他路径传输,保证网络的正常通信 。
3.STP报文

四、STP的工作原理
1. 基础逻辑:BPDU 交互
核心是交换机间通过交互 BPDU(桥协议数据单元 ),完成拓扑收敛,消除环路。
BPDU 里包含网桥优先级、MAC 地址、路径开销等参数,交换机,依靠这些参数,确定网络角色(根网桥、端口角色 ),构建无环拓扑。
2.BPDU参数
2.1网桥ID
由交换机的优先级和MAC地址组成。网桥优先级取值范围必须在0-65535之中,同时也必须是4.96的倍数。
2.2端口ID
由发送端口的优先级与端口号组成。端口优先级取值范围0-255(默认128),必须是16的倍数。
2.3路径开销
3. 角色选举
基于 BPDU 交互,STP 会依次完成以下关键动作,最终让网络无环且保留冗余:
3.1 选根网桥
- 规则:网桥优先级(默认 32768 )+ MAC 地址,数值越小越优先。
- 作用:选 1 台 “主交换机” 当根,所有交换机以它为中心计算拓扑,避免多中心导致环路。
3.2 非根交换机选根端口
- 规则:非根交换机上,选 “到根网桥路径开销最小” 的端口(路径开销由链路带宽等决定,带宽越小开销越大 )。
- 作用:每台非根交换机只留 1 条最优 “上联根网桥” 的通道,避免同一设备多条路径回根引发环路。
3.3 每个网段选指定端口
- 规则:每个物理网段(如两台交换机之间的链路 )里,选 “到根网桥路径开销最小” 的端口(网段内所有设备对比,最终 1 个端口当选 )。
当每个交换机的根端口选举出来之后,切换视角,以链路为视角。链路两边的BPDU进行评比,选举角色。
1.如果两个端口中,一个是根端口,另一个就是指定端口
2.如果这个端口是根网桥上的端口,那么就一定是指定端口
3.如果另一端连接的是主机,那么这个端口一定时指定端口
4.看链路连接的两个端口中的BPDU,比较BPDU的优劣,优的一方作为指定端口,劣的一方作为堵塞端口。
- 作用:保证每个网段只有 1 个 “转发端口” 向根网桥传递流量,防止网段内环路。
3.4 阻塞冗余端口(非根非指定端口)
- 规则:既不是根端口、也不是指定端口的端口,进入阻塞(Blocking )状态,不转发用户数据(仅收 BPDU 维持拓扑 )。
- 作用:直接 “切断” 冗余链路的转发功能,从物理拓扑上消除环路;但链路仍保留,故障时可自动激活。
3.4 逐个网段分析(以图为例)
(1)LANA 网段(连 SWA 和 SWB )
- SWA 的端口:到根网桥(自己)的路径开销是 0(根网桥自己的开销为 0 ),所以 SWA 在 LANA 网段的端口总开销 = 0 + LANA 链路开销(4 )= 4 。
- SWB 的端口:到根网桥的总路径开销是 4(SWB → LANA → SWA ,开销 4 ),所以 SWB 在 LANA 网段的端口总开销 = 4 + LANA 链路开销(4 )= 8 。
比较两个端口的总开销:4(SWA 端口) < 8(SWB 端口)
→ SWA 在 LANA 网段的端口被选为指定端口。
(2)LANB 网段(连 SWA 和 SWC )
- SWA 的端口:到根网桥开销 0 ,总开销 = 0 + LANB 链路开销(4 )= 4 。
- SWC 的端口:到根网桥的总路径开销是 4(SWC → LANB → SWA ,开销 4 ),总开销 = 4 + LANB 链路开销(4 )= 8 。
比较后:4(SWA 端口) < 8(SWC 端口)
→ SWA 在 LANB 网段的端口被选为指定端口。
(3)LANC 网段(连 SWB 和 SWC )
- SWB 的端口:到根网桥的总路径开销是 4(SWB → LANA → SWA ),所以 SWB 在 LANC 网段的端口总开销 = 4 + LANC 链路开销(4 )= 8 。
- SWC 的端口:到根网桥的总路径开销是 4(SWC → LANB → SWA ),所以 SWC 在 LANC 网段的端口总开销 = 4 + LANC 链路开销(4 )= 8 。
此时,路径开销相同,需要比 桥 ID:
- SWB 的桥 ID:32768 + 00e0-fc41-4259
- SWC 的桥 ID:32768 + 00e0-fc41-43b9
比较 MAC 地址(十六进制):00e0-fc41-4259 < 00e0-fc41-43b9
→ SWB 的桥 ID 更小 → SWB 在 LANC 网段的端口被选为指定端口,SWC 对应的端口成为 Alternate Port
(备用端口,阻塞状态 )。
(4)LAND 网段(连 SWB )
这个网段只有 SWB 一个交换机的端口(因为 LAND 是末端网段,没有其他交换机 )。根据规则,单个交换机的端口自动成为指定端口 → SWB 在 LAND 网段的端口是指定端口。
(5)LANE 网段(连 SWC )
同理,LANE 是末端网段,只有 SWC 的端口 → SWC 在 LANE 网段的端口自动成为指定端口。
综合分析:
4.STP协议报文
五、STP解决临时环路问题
1 .STP端口状态
STP 为了避免网络环路,给交换机端口定义了 5 种状态,不同状态下端口的行为(收发 BPDU、学习 MAC、转发数据)不同,目的是有序控制端口角色,逐步放开数据转发,防止环路:
端口状态 | 中文描述 | 转发数据帧 | 学习 MAC 地址表 | 参与生成树计算 | 处理 BPDU |
---|---|---|---|---|---|
Disabled | 端口没有启用 | ❌ | ❌ | ❌ | ❌ |
Blocking | 阻塞状态 | ❌ | ❌ | ❌ | 接收并处理 |
Listening | 侦听状态 | ❌ | ❌ | ✅ | 接收并发送 |
Learning | 学习状态 | ❌ | ✅ | ✅ | 接收并发送 |
Forwarding | 转发状态 | ✅ | ✅ | ✅ | 接收并发送 |
2. 时间计时器
STP 中的计时器用于控制 BPDU 的传播和端口状态的转换,进一步防止临时环路。
Hello Timer(Hello 时间)
作用:根网桥周期性发送 “配置 BPDU” 的时间间隔,默认 2 秒。
触发:非根网桥靠收根桥的 BPDU 维持状态,若收不到,会触发拓扑重新计算。
Forward Delay(转发时延)
作用:端口状态迁移的 “过渡时间”,默认 15 秒,控制 “监听→学习→转发” 的等待时长。
- 端口从监听状态到学习状态,需要等待一个 Forward Delay 时长,即 15 秒;
- 从学习状态到转发状态 ,又需要等待一个 Forward Delay 时长,同样是 15 秒。
- 所以,端口从监听状态最终进入转发状态,经历了两次 Forward Delay 的等待, 总计 30 秒。
Message Age(消息老化时间)
作用:记录 “配置 BPDU 从根网桥生成后,到当前交换机的时间”,每经过一个交换机,Message Age 会累加(默认每跳 + 1 )。
网桥在转发 BPDU 时,会根据 Message Age 判断 BPDU 的时效性。如果 Message Age 超过 Max Message Age,网桥会认为该 BPDU 已经过期,不再使用这个 BPDU 中的信息,可能会导致端口状态的重新计算和迁移。例如,当网络中的链路出现故障,BPDU 的传递路径发生改变,Message Age 可能会增加,若超过限制,端口可能会重新进入阻塞状态,重新参与生成树计算 。
Max Message Age(最大老化时间)
作用:规定了配置 BPDU 存活的最大时间,默认 20 秒(10 个 Hello 周期) ,用于保证 BPDU 信息的有效性。
与端口状态迁移联系:非根网桥若超过 20 秒没收到新 BPDU,会认为根桥可能故障,触发重新选举根桥和拓扑计算。
3.STP 的传统缺陷—— 拓扑变化时收敛慢
4.拓扑发生改变处理机制
4.1触发条件
前提:拓扑变化触发
情况 1:网络里新接了一台交换机,或者原本阻塞的端口(Blocking)被激活,变成 Forwarding 状态(能转发流量了 )。
- 条件细化:
不仅要 “有端口进入 Forwarding”,还得满足 “该交换机至少有一个指定端口(Designated Port)” 。- 解释:“指定端口” 是 STP 里每个网段(链路)中负责转发 BPDU 的端口,有指定端口说明交换机在网络里 “有正式角色”,不是孤立的。如果新激活的端口所在交换机是 “孤网”(没指定端口),就算端口状态变,也不用发 TCN(发了也没人处理 )。
情况 2:有端口 “丢失活跃链路”(从 Forwarding/Learning 转 Blocking)
- 场景:常见的如链路中断(网线被拔、设备断电 )、端口被手动关闭,或者 STP 重新计算后,端口从 Forwarding(转发流量 )或 Learning(学习 MAC 地址 )状态,被迫变成 Blocking(阻塞,不转发流量,防止环路 )。
- 本质:原本能转发 / 学习的路径失效了,网络拓扑实际 “断了一块”,需要通知全网更新。
4.2 TCN BPDU
在STP中,只有根网桥才能发送配置BPDU,下面的拓扑发生改变,根网桥是不知道的。所以需要定义一个新的BPDU用于通知根网桥——TCN BPDU。又为了保证可靠性,就有了TCA BPDU。上游交换机根网桥一旦收到TCN BPDU,那么就会发送TC置为的BPDU,通知各个网桥更改MAC表的老化时间由300s改为15s。
4.3 TCA 及TC置为的BPDU
4.5.总结
1.流程分步解析
1. (绿虚线,TCN 消息)SWD → SWC:上报拓扑变化
SWD 发现链路中断,符合 TCN拓扑变化通知,于是向自己的指定上游交换机(SWC ) 发 TCN BPDU ,说 “拓扑变啦,快处理” 。
2. (红虚线,TCA 消息)SWC → SWD:确认收到 TCN
SWC 收到 SWD 的 TCN 后,需要回复 TCA拓扑变化确认,告诉 SWD“我收到消息了,你别一直发” 。这一步是 “确认机制”,避免 TCN 消息一直刷屏 。
3. (绿虚线,TCN 消息)SWC → SWA:继续上报给根桥
SWC 除了回 TCA 给 SWD ,还要把 TCN 消息继续往根桥(SWA ) 转发(因为拓扑变化必须让根桥知道,根桥才能发全网更新指令 ),同样走 “逐级上报” 逻辑 。
4. (紫实线,TCA 消息)SWA → SWB、SWA → SWC:根桥回 TCA
根桥 SWA 收到 SWC 转发的 TCN 后,会向所有非根桥交换机(这里是 SWB、SWC ) 发 带 TCA 置位的配置 BPDU ,确认 “我收到拓扑变化消息了” 。这一步是根桥对全网的 “确认反馈” 。
5. (紫实线,TC 置位 BPDU )SWA → SWB、SWA → SWC:根桥发全网更新指令
根桥 SWA 确认拓扑变化后,开始发 带 TC(Topology Change,拓扑变化执行)置位的 BPDU ,告诉所有交换机:“拓扑变了,赶紧把 MAC 地址表老化时间从默认 300 秒改成 15 秒” 。这样交换机能快速老化旧表项,重新学习新拓扑下的 MAC 映射,保证流量转发正确 。
6. (隐含逻辑)全网更新 MAC 表
所有收到 TC 置位 BPDU 的交换机(SWB、SWC、SWD 等 ),会加速老化自己的 MAC 地址表。比如原本主机 A 走 SWB→SWD 的路径,链路断了后,新路径可能变 SWB→SWC→SWD ,加速老化能让交换机更快 “忘掉” 旧路径,学习新路径的 MAC 映射,网络重新收敛 。
当拓扑变化(如链路故障)时:
检测变化的交换机向根网桥发送 TCN BPDU。
上游交换机收到TCN BPDU会给下游交换机回复一个TCA BPDU,同时将TCN BPDU传给根网桥。
根桥收到后广播 TC BPDU,通知全网:
全网桥收到后,缩短MAC表老化时间(默认300秒 → 15秒) 快速清除旧路径的MAC地址。
5.网络拓扑变化--STP网络收敛
在生成树协议中,直接收敛和间接收敛是网络拓扑发生变化后,生成树重新计算并达到稳定状态的两种不同方式。
5.1直接收敛
SW3 的阻塞端口能直接收到根网桥(SW1)的 BPDU,直接切换为根端口,经 “监听→学习→转发”(2 个 Forward Delay,默认 15 秒 / 个,共 30 秒 )完成收敛。
5.2 间接收敛
SW2 收不到根网桥 BPDU,“自封” 根网桥,收敛时间50秒。
将检测拓扑变化的最长时间(Max Message Age)和端口状态迁移的总时间相加,就得到了间接收敛的大致时长:20 秒(Max Message Age) + 30 秒(两次 Forward Delay) = 50 秒。
5.3 直接收敛vs间接收敛
若故障导致交换机失去到达根桥的唯一路径或需要重新选举根端口,则一定是间接收敛!
图中,SW2的根端口发生故障,指定端口对面又是堵塞端口,所以没有路能通往根桥了,就是间接收敛。
六、STP 的缺点
1.收敛时间长(主动收敛,被动收敛,拓扑改变TCN,MAC表老化)
2.处理拓扑改变机制不灵活(主机频繁上下线时,网络会缠上大量TCN)
1. 收敛速度极慢(30-50秒)
根源:
Blocking→Listening→Learning→Forwarding
强制等待 50秒(20秒 Max Age + 15秒×2 Forward Delay)。
2.处理机制不灵活
TCN机制低效:
拓扑变更需逐级上报至根桥 → 延迟高,且根桥单点瓶颈。