1. 实验背景与STP协议概述
在以太网交换机的实际组网中,我们常常会部署冗余链路来提高网络的可靠性。比如在核心交换机之间部署多条物理连接,这样当某条链路出现故障时,流量可以自动切换到备用链路。但这种冗余设计会带来一个严重问题——二层环路。
二层环路会导致广播风暴、MAC地址表震荡和多帧复制等问题。想象一下,一个广播帧在环形网络中无限循环转发,很快就会耗尽所有带宽资源。为了解决这个问题,IEEE 802.1D标准定义了生成树协议STP(Spanning Tree Protocol)。
STP的核心思想是通过算法在物理环状拓扑中构建一个逻辑上的树形拓扑。它会自动阻塞某些冗余端口,使得任意两台设备之间只有一条活动路径。当活动路径出现故障时,STP会重新计算拓扑,将之前阻塞的端口转为转发状态,从而在保证冗余的同时避免环路。
2. STP工作原理详解
2.1 STP的基本概念
STP协议中有几个关键概念需要理解:
-
根桥(Root Bridge):整个生成树的逻辑中心,所有其他交换机都需要确定到根桥的最短路径。根桥通过BPDU(Bridge Protocol Data Unit)报文来维护拓扑信息。
-
根端口(Root Port):每台非根桥交换机上离根桥最近的端口,负责转发流量到根桥。每个非根桥有且只有一个根端口。
-
指定端口(Designated Port):每个网段上离根桥最近的端口,负责转发该网段的流量。根桥上的所有端口都是指定端口。
-
阻塞端口(Blocking Port):既不是根端口也不是指定端口的端口,处于阻塞状态不转发用户流量,但会持续监听BPDU。
2.2 STP的选举过程
STP通过以下选举过程构建无环拓扑:
-
根桥选举:所有交换机启动时都认为自己是根桥。通过交换BPDU报文,比较桥ID(Bridge ID,由优先级和MAC地址组成),桥ID最小的成为根桥。
-
根端口选举:每台非根桥交换机选择到根桥路径开销最小的端口作为根端口。如果路径开销相同,则比较上游交换机的桥ID和端口ID。
-
指定端口选举:在每个网段上,选择发送最优BPDU的端口作为指定端口。其他端口进入阻塞状态。
2.3 BPDU报文结构
BPDU是STP协议的核心报文,主要包含以下字段:
| 字段 | 说明 |
|---|---|
| 协议ID | 固定为0x0000 |
| 版本 | STP版本(0表示802.1D) |
| BPDU类型 | 0x00为配置BPDU,0x80为TCN BPDU |
| 标志 | 包含TC和TCA标志位 |
| 根桥ID | 当前根桥的桥ID |
| 根路径开销 | 发送BPDU的交换机到根桥的路径开销 |
| 发送桥ID | 发送BPDU的交换机的桥ID |
| 端口ID | 发送BPDU的端口ID |
| 消息年龄 | 从根桥发出BPDU后的时间 |
| 最大年龄 | BPDU的最大生存时间(默认20秒) |
| Hello时间 | 根桥发送BPDU的间隔(默认2秒) |
| 转发延迟 | 监听和学习状态的持续时间(默认15秒) |
3. 实验环境搭建与配置
3.1 实验拓扑设计
为了验证STP协议,我们需要搭建一个包含环路的网络拓扑。典型的实验环境包括:
- 3台支持STP的以太网交换机(如华为S5700系列)
- 4台PC用于测试连通性
- 若干条网线构建环形连接
具体连接方式如下:
code复制[PC1]---[SW1]---[SW2]
| |
[SW3]---[PC4]
这个拓扑中,三台交换机之间形成了完整的环路,是验证STP的理想场景。
3.2 基础配置步骤
-
设备初始化:
bash复制# 重置交换机配置 <HUAWEI> reset saved-configuration <HUAWEI> reboot # 进入系统视图 <HUAWEI> system-view [HUAWEI] sysname SW1 -
STP基本配置:
bash复制# 启用STP功能(华为交换机默认启用) [SW1] stp enable # 配置STP模式(可选802.1D/802.1w/802.1s) [SW1] stp mode stp # 配置桥优先级(用于控制根桥选举) [SW1] stp priority 4096 -
接口配置:
bash复制# 进入接口视图 [SW1] interface gigabitethernet 0/0/1 # 配置接口为Trunk模式 [SW1-GigabitEthernet0/0/1] port link-type trunk # 允许所有VLAN通过 [SW1-GigabitEthernet0/0/1] port trunk allow-pass vlan all # 配置接口STP开销(可选) [SW1-GigabitEthernet0/0/1] stp cost 20000
3.3 配置验证命令
完成配置后,可以使用以下命令验证STP状态:
bash复制# 查看STP全局状态
[SW1] display stp
# 查看接口STP状态
[SW1] display stp interface gigabitethernet 0/0/1
# 查看STP简要信息
[SW1] display stp brief
# 查看根桥信息
[SW1] display stp root
4. STP协议验证实验
4.1 根桥选举验证
- 保持所有交换机的默认优先级(32768),观察哪台交换机成为根桥(MAC地址最小的)
- 手动修改优先级,验证根桥切换:
bash复制[SW1] stp priority 4096 # 设置SW1为更优优先级 - 使用
display stp root命令验证根桥变更
4.2 端口状态验证
- 在每台交换机上使用
display stp brief查看端口角色和状态 - 确认:
- 根桥的所有端口都是指定端口(DESI)且处于转发状态(FORWARDING)
- 每台非根桥有且只有一个根端口(ROOT)
- 每个网段有且只有一个指定端口
- 其他端口处于阻塞状态(DISCARDING)
4.3 拓扑变化响应测试
- 断开根桥的某个活动端口连接
- 观察阻塞端口的状态变化:
- 原阻塞端口会经历Listening(15秒)→ Learning(15秒)→ Forwarding状态
- 使用
display stp命令观察拓扑变化计数(TCN)的增加
4.4 连通性测试
- 从PC1向PC4发送持续ping
bash复制
C:\> ping 192.168.1.4 -t - 断开当前活动路径,观察ping中断时间(约30秒,即STP收敛时间)
- 恢复连接,再次观察收敛过程
5. STP的不足与改进协议
5.1 传统STP的局限性
通过实验我们可以发现传统STP(802.1D)的一些不足:
- 收敛速度慢:拓扑变化需要30-50秒才能恢复,对于现代网络来说太长了
- 没有充分利用冗余路径:所有冗余链路都被阻塞,无法实现负载分担
- 配置复杂:需要手动调整优先级等参数才能获得理想的拓扑
5.2 快速生成树协议(RSTP)
IEEE 802.1w定义的RSTP对STP做了重要改进:
- 引入了替代端口(Alternate Port)和备份端口(Backup Port)概念
- 将端口状态简化为Discarding、Learning和Forwarding三种
- 通过提议-同意机制加速收敛,最快可在1秒内完成
配置方法:
bash复制[SW1] stp mode rstp
5.3 多生成树协议(MSTP)
IEEE 802.1s定义的MSTP进一步优化:
- 支持多个VLAN映射到同一个生成树实例,实现负载均衡
- 兼容STP和RSTP
- 配置更灵活
配置示例:
bash复制[SW1] stp mode mstp
[SW1] stp region-configuration
[SW1-mst-region] region-name TestLab
[SW1-mst-region] instance 1 vlan 10
[SW1-mst-region] instance 2 vlan 20
[SW1-mst-region] active region-configuration
6. 实验中的常见问题与解决方法
6.1 STP未生效的可能原因
-
物理层问题:
- 检查网线连接是否正常
- 确认接口物理状态为UP(
display interface brief)
-
配置问题:
- 确认全局和接口STP都已启用
- 检查端口是否被错误地配置为边缘端口(
stp edged-port enable)
-
版本兼容性问题:
- 确保所有交换机运行相同的STP模式
- 混合模式可能导致非预期行为
6.2 优化STP性能的建议
-
根桥规划:
- 手动指定核心交换机为根桥
- 配置备份根桥(优先级设置为8192)
-
路径开销调整:
- 为高速链路(如10G)配置更小的开销值
- 确保最优路径被选中
-
边缘端口配置:
- 为连接终端设备的端口启用边缘端口:
bash复制[SW1] interface gigabitethernet 0/0/24 [SW1-GigabitEthernet0/0/24] stp edged-port enable - 避免边缘端口收到BPDU导致STP重新计算
- 为连接终端设备的端口启用边缘端口:
6.3 诊断STP问题的实用命令
-
抓取BPDU报文:
bash复制
[SW1] mirroring-group 1 inbound interface gigabitethernet 0/0/1 [SW1] mirroring-group 1 outbound interface gigabitethernet 0/0/2然后通过Wireshark分析镜像端口上的BPDU
-
调试信息:
bash复制
[SW1] terminal monitor [SW1] terminal debugging [SW1] debugging stp event -
历史信息:
bash复制[SW1] display stp history
7. 企业网络中的STP最佳实践
在企业网络部署中,STP配置需要考虑更多实际因素:
-
分层设计原则:
- 核心层:配置为根桥
- 汇聚层:配置为备份根桥
- 接入层:启用边缘端口
-
VLAN与STP的配合:
- 不同VLAN使用不同的生成树实例
- 通过MSTP实现流量的负载分担
-
与堆叠技术的配合:
- 堆叠系统作为单个STP节点参与计算
- 配置跨设备的链路聚合(如华为的Eth-Trunk)
-
安全考虑:
- 启用BPDU保护防止非法设备影响拓扑:
bash复制
[SW1] stp bpdu-protection - 配置根保护确保根桥位置稳定:
bash复制
[SW1] interface gigabitethernet 0/0/1 [SW1-GigabitEthernet0/0/1] stp root-protection
- 启用BPDU保护防止非法设备影响拓扑:
在实际网络运维中,我通常会先绘制预期的STP拓扑图,然后通过逐步配置和验证来确保网络按设计运行。特别是在进行网络变更时,一定要预先评估对STP拓扑的影响,避免造成意外的网络中断。
