STP技术
一、环路引起的问题
1.回顾mac表
- 当 PCA(MAC:00-0D-56-BF-88-10 )给 SWA 发数据时,数据从 SWA 的 E0/2 端口 “进入” 。
- 交换机 SWA 会 “学习”:“PCA 的 MAC 地址 00-0D-56-BF-88-10 ,是从 E0/2 端口收到的” → 于是在 SWA 的 MAC 表中,“目的 MAC=PCA 的 MAC” 对应的 “目的端口 = E0/2” (意思是:以后要发数据给 PCA,从 E0/2 端口转发)。
二、STP的概念及应用场景
三、STP的作用
1.STP基本原理
STP即生成树协议,它通过阻断冗余链路来消除桥接网络中可能存在的路径环路。在一个网络中,当存在多条路径连接不同的网络设备(如交换机,图中的 SWA、SWB、SWC )时,可能会形成物理环路,这会导致广播风暴、多帧复制等问题,影响网络的正常运行。STP 通过在交换机之间交换 BPDU(Bridge Protocol Data Unit,桥协议数据单元),来计算出一个无环的网络拓扑结构,将某些端口设置为阻塞状态,从而避免网络环路的产生。
2. 冗余链路的作用与激活
- 冗余链路:在网络中,冗余链路是为了提高网络的可靠性而设置的备份链路。比如图中被阻塞的链路,在正常情况下虽然不传输数据,但当网络中的其他链路出现故障时,它就可以发挥作用。
- 故障恢复:当 当前正在使用的路径发生故障时,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.如果上面都不是,那么就进行评比,这个时候一般比较>根路径开销->发送方网桥ID->发送端口号->接收端口号
- 作用:保证每个网段只有 1 个 “转发端口” 向根网桥传递流量,防止网段内环路。
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)阻塞冗余端口(非根非指定端口)
- 规则:既不是根端口、也不是指定端口的端口,进入阻塞(Blocking )状态,不转发用户数据(仅收 BPDU 维持拓扑 )。
- 作用:直接 “切断” 冗余链路的转发功能,从物理拓扑上消除环路;但链路仍保留,故障时可自动激活。
综合分析:
4.STP协议报文
5.STP端口状态描述
端口状态 | 中文描述 | 转发数据帧 | 学习 MAC 地址表 | 参与生成树计算 | 处理 BPDU |
---|---|---|---|---|---|
Disabled | 端口没有启用 | ❌ | ❌ | ❌ | ❌ |
Blocking | 阻塞状态 | ❌ | ❌ | ❌ | 接收并处理 |
Listening | 侦听状态 | ❌ | ❌ | ✅ | 接收并发送 |
Learning | 学习状态 | ❌ | ✅ | ✅ | 接收并发送 |
Forwarding | 转发状态 | ✅ | ✅ | ✅ | 接收并发送 |
6.STP端口状态改变
1.时间计时器
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,会认为根桥可能故障,触发重新选举根桥和拓扑计算。
7.网络拓扑变化--STP网络收敛
在生成树协议中,直接收敛和间接收敛是网络拓扑发生变化后,生成树重新计算并达到稳定状态的两种不同方式。
7.1直接收敛
SW3 的阻塞端口能直接收到根网桥(SW1)的 BPDU,直接切换为根端口,经 “监听→学习→转发”(2 个 Forward Delay,默认 15 秒 / 个,共 30 秒 )完成收敛。
7.2 间接收敛
SW2 收不到根网桥 BPDU,“自封” 根网桥,收敛时间50秒。
将检测拓扑变化的最长时间(Max Message Age)和端口状态迁移的总时间相加,就得到了间接收敛的大致时长:20 秒(Max Message Age) + 30 秒(两次 Forward Delay) = 50 秒。
7.3 直接收敛vs间接收敛
若故障导致交换机失去到达根桥的唯一路径或需要重新选举根端口,则一定是间接收敛!
图中,SW2的根端口发生故障,指定端口对面又是堵塞端口,所以没有路能通往根桥了,就是间接收敛。