华为交换机STP与链路聚合实战,这套配置思路我踩了三年坑才理顺
做网络这行,交换机配置里STP和链路聚合这两块,几乎是每次组网都绕不开的“基本盘”。但你别看它是基础,实际项目里翻车最多的往往也在这两个地方——不是STP把业务端口堵死了,就是链路聚合做完流量全走一根线,要么就是环路广播风暴直接把核心打瘫。我这些年处理过的故障,十有七八都跟这两块没配明白有关系。
这篇文章我就以华为交换机(重点说S5735、S5700系列,三层交换机同样适用)为例,把STP生成树协议和链路聚合Eth-Trunk从原理到实战配置、再到故障排查,完整过一遍。不论你是刚入行的网络新人,还是被项目追着跑的运维老手,这套思路和命令,直接拿去抄作业基本不会有问题。
先说清楚这篇文章能解决什么问题:第一,搞懂STP到底在防什么、怎么选根桥、端口状态怎么判断;第二,掌握链路聚合的两种模式怎么选、负载均衡怎么调;第三,结合真实组网场景,把两者同时配置时容易踩的坑提前避开。
1. 项目背景与配置需求拆解
1.1 这套组网场景里STP和链路聚合各自要解决什么问题
先说一个最典型的实战场景:一台核心交换机下连两台接入交换机,每台接入交换机分别接了几十台终端PC。为了冗余,每台接入交换机到核心之间拉了两条物理链路。这时候问题就来了——两条链路不处理直接接上,二层环路就形成了,广播帧会在环路里无限转发,直接打爆CPU。
这就是STP登场的原因:它通过逻辑上阻塞冗余链路,让物理环路变成逻辑无环的树形结构。核心交换机作为根桥,接入交换机上只有一条链路处于转发状态,另一条被阻塞,既保住了冗余,又避免了环路风暴。
而链路聚合解决的是另一个问题——带宽和利用率。很多刚接触交换机的朋友会问:既然STP把冗余链路阻塞了,那备用的链路岂不是一直闲着?确实,STP模式下冗余链路是备胎,平时不转发业务流量。如果你既想要冗余、又想让两条链路同时干活,就要用Eth-Trunk把两条物理链路捆成一条逻辑链路,带宽翻倍,同时互为备份,STP对这条Eth-Trunk只当作一条链路来算,也就不会阻塞掉其中一条。
1.2 华为交换机STP与链路聚合的基础知识梳理
华为交换机默认情况下STP是开启的,但默认的MSTP模式在很多场景下并不一定是最优配置。实际项目里要根据网络规模选择STP模式:
- STP(802.1D):最老的生成树协议,收敛慢,要50秒左右,适合小型网络,现在基本不用了。
- RSTP(802.1w):快速生成树,收敛快,1秒内,支持边缘端口,是目前中小型网络的标配。
- MSTP(802.1s):多实例生成树,可以把不同VLAN映射到不同实例做负载均衡,适合大型复杂网络。
链路聚合方面,华为交换机支持两种模式:
- 手工模式:手动把接口加入Eth-Trunk,不协商,两端配置一致即可生效,简单直接。
- LACP模式:通过LACP协议自动协商,能检测对端配置不一致,更智能,推荐生产环境使用。
1.3 这种设计想达到什么样效果
我用了三年多这系列交换机,总结下来这套组合拳能实现的效果:逻辑上无环、物理上冗余、带宽上叠加、故障时秒级切换。核心交换机做根桥,接入交换机启用RSTP或MSTP快速收敛,核心到接入用Eth-Trunk做链路捆绑后,即使一条物理链路断了,流量自动切换到另一条,对终端无感知。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. STP生成树协议的核心细节与配置实操
2.1 STP的工作原理说白了就是“选举”
STP的概念如果不落到选举上,配置起来就一塌糊涂。整个STP运行过程,你可以理解成一次网络里的“民主选举”,选出一个老大(根桥),然后其他人决定自己到老大的最优路径,最优路径上的端口转发数据,非最优路径上的端口就被阻塞,专门用来防环路。
具体来说,交换机之间通过BPDU(Bridge Protocol Data Unit,桥协议数据单元)协商,BPDU里最核心的两个字段就是桥ID和路径开销。桥ID小的优先成为根桥,桥ID由优先级加MAC地址组成。路径开销则看带宽,带宽越大开销越小,这也是为什么千兆口比百兆口更容易被选为转发端口的原因。
华为交换机默认优先级是32768,如果不手动调整,MAC地址小的交换机就会成为根桥。这在实际组网里就是个大坑——很可能你的接入交换机成了根桥,核心交换机反而被阻塞了端口,导致整个网络性能明显下降。
2.2 STP端口角色与状态:搞懂这几个概念配置就成功了一半
STP的端口角色有根端口、指定端口、Alternate端口(备份/替换端口)和Backup端口。根端口是非根交换机上距离根桥最近的端口,指定端口是每段链路上距离根桥最近的端口,Alternate端口就是备胎,平时阻塞。
端口状态在RSTP里只有三种:Discarding、Learning、Forwarding。Discarding就是丢弃状态,Learning在学习MAC地址表但不转发数据,Forwarding正常转发。
配置时最实用的一个技巧就是边缘端口(Edge Port)。接PC、服务器这种终端设备的端口,在RSTP里直接设成边缘端口,端口一up就立刻进入Forwarding状态,不需要等30秒的STP收敛时间。我自己做项目时,凡是接到终端设备的端口,只要确定不会接交换机,一律配成边缘端口,省掉了终端开机后等待网络的时间问题。
配置命令如下:
code复制[Huawei] stp mode rstp // 切换为RSTP模式
[Huawei] stp root primary // 将本交换机设置为主根桥
[Huawei] stp root secondary // (备用根桥)
[Huawei-GigabitEthernet0/0/1] stp edged-port enable // 配置边缘端口
[Huawei-GigabitEthernet0/0/1] stp disable // 某些极端场景直接关STP
注意,stp disable这个命令慎用,关掉STP的端口如果误接了交换机,环路立刻形成。我一般只在确认无误的单终端接入端口上才这样操作,而且端口要同时配了端口安全或BPDU保护才会放心。
2.3 RSTP和MSTP怎么选、怎么看端口状态
RSTP收敛快,默认模式下就够用了,适用于大多数中小型网络的接入场景。但如果公司有多个VLAN,想要不同VLAN走不同的链路实现负载均衡,那就用MSTP,把VLAN 10映射到实例1,VLAN 20映射到实例2,两个实例各自跑一棵树。
我在一个工厂项目里就是用了MSTP双实例方案:VLAN 10业务走一条物理链路转发,VLAN 20走另一条,两条链路同时工作,互不阻塞,整体带宽利用率直接拉满。如果当时用RSTP,必然有一条链路始终处于阻塞状态。
查看STP状态最常用的几个命令:
code复制[Huawei] display stp brief // 查看端口角色和状态
[Huawei] display stp root // 查看根桥信息
[Huawei] display stp interface GigabitEthernet 0/0/1 // 查看端口详细STP信息
排障时重点关注端口角色是否正常。比如access口上显示Role是Alternate,说明这个端口被阻塞了,你需要分析为什么它会成为备份端口、根桥选择是否符合预期。
2.4 华为交换机STP的“保护功能”一定要开
STP的保护功能是很多人忽略但至关重要的部分:
- BPDU保护:边缘端口收到BPDU就立即shutdown,防止有人私接交换机。
- 根保护:在指定端口上开启,防止新接入的交换机抢占根桥。
- 环路保护:防止因链路单向故障导致的STP失效问题。
配置命令一次给你:
code复制[Huawei] stp bpdu-protection
[Huawei-GigabitEthernet0/0/1] stp root-protection
[Huawei-GigabitEthernet0/0/1] stp loop-protection
回到实际场景讲一句:如果边缘端口没开BPDU保护,员工自己带了个小交换机插到办公室网口上,可能会把整个接入交换机的STP算歪了,甚至导致核心交换机的根桥被顶掉。这种事故我遇到过好几次,排查起来还特别费劲。
3. 链路聚合Eth-Trunk的配置与实操要点
3.1 Eth-Trunk链路聚合的两种模式和选用思路
链路聚合就是把多条物理链路捆成一条逻辑链路Eth-Trunk。华为交换机上,手工模式和LACP模式各有使用场景。
如果对端设备是老交换机或非华为设备,或者对端不支持LACP协商,那就只能用手工模式。但如果两端都是华为交换机,甚至同一系列,强烈建议用LACP模式,它能通过协商自动检测链路状态,如果发现两端接口配置不一致,端口会自动Down,配置错误一眼就能看出来。
另外要注意,LACP模式下有个主动和被动角色,至少一端是Active主动发起协商,如果两端都设了Passive,链路协商不起来。华为推荐一端Active一端Passive,实际配置里我习惯两端都设Active,速度更快,没什么坏处。
3.2 链路聚合的两个关键参数:成员接口一致性、负载均衡算法
新建Eth-Trunk后,成员接口的配置要保持一致。包括接口类型(Access还是Trunk)、所属VLAN、接口速率、双工模式,如果不一致,物理上虽然能up,但业务可能异常。
负载均衡算法方面,华为交换机默认按报文源MAC和目的MAC进行哈希分流。如果你的业务全是同一对服务器交互(比如备份流量),默认算法下所有流量可能都走同一个成员口,聚合效果大打折扣。这种情况要改成按源IP目的IP或源目MAC+IP组合来哈希。
配置命令:
code复制[Huawei] interface Eth-Trunk 1
[Huawei-Eth-Trunk1] mode lacp-static // 静态LACP模式
[Huawei-Eth-Trunk1] load-balance src-dst-ip // 按源目IP进行负载均衡
[Huawei-Eth-Trunk1] trunKport trunk allow-pass vlan 10 20
[Huawei-Eth-Trunk1] quit
[Huawei] interface GigabitEthernet 0/0/1
[Huawei-GigabitEthernet0/0/1] eth-trunk 1 // 加入Eth-Trunk 1
[Huawei-GigabitEthernet0/0/1] quit
[Huawei] interface GigabitEthernet 0/0/2
[Huawei-GigabitEthernet0/0/2] eth-trunk 1
LACP模式下还可以配置最大活跃成员数和最小活跃成员数:
code复制[Huawei-Eth-Trunk1] lacp max active-linknumber 2 // 最多2条活跃链路
[Huawei-Eth-Trunk1] lacp min active-linknumber 1 // 至少1条活跃链路才能保证Eth-Trunk up
3.3 华为交换机Eth-Trunk配置实例:从零到跑通
直接给你一套完整配置,以华为S5735为例,需求是核心交换机下连接入交换机,用两条GE口做链路聚合,跑VLAN 10和VLAN 20。
核心交换机侧:
code复制[Huawei] sysname CORE
[CORE] vlan batch 10 20
[CORE] interface Eth-Trunk 1
[CORE-Eth-Trunk1] mode lacp-static
[CORE-Eth-Trunk1] load-balance src-dst-mac
[CORE-Eth-Trunk1] port trunk allow-pass vlan 10 20
[CORE-Eth-Trunk1] quit
[CORE] interface GigabitEthernet 0/0/1
[CORE-GigabitEthernet0/0/1] eth-trunk 1
[CORE-GigabitEthernet0/0/1] quit
[CORE] interface GigabitEthernet 0/0/2
[CORE-GigabitEthernet0/0/2] eth-trunk 1
[CORE-GigabitEthernet0/0/2] quit
接入交换机侧配置对称,Eth-Trunk 1的接口类型、允许的VLAN、模式全部要一致。这里最容易错的地方是Trunk口放通VLAN不一致,导致某些VLAN不通,排查时又一头扎进STP里找问题,实际上就是放通列表的问题——这种低级错误我犯过一次,所以现在所有配置做完第一步就是display eth-trunk 1检查对端状态。
配置完查看状态:
code复制[CORE] display eth-trunk 1
看到Actor和Partner都处于Selected状态,说明链路聚合协商成功,两个端口都在转发数据。如果出现Unselected,优先查两端接口速率、双工、Trunk属性是否一致。
3.4 STP与Eth-Trunk同时配置时,顺序其实有讲究
很多人在配Eth-Trunk时没考虑STP,但Eth-Trunk是二层逻辑口,STP会在Eth-Trunk逻辑口上运行,只会把它当成一条链路。也就是说,即使Eth-Trunk里有两条物理链路,STP只会计算一次——这正好避免了链路聚合与STP之间的环路问题。
但要注意,Eth-Trunk的逻辑口上也要考虑STP的端口角色。如果Eth-Trunk所在链路不是最优路径,STP同样会把整个Eth-Trunk阻塞掉。所以实际项目中,确保核心交换机是根桥,Eth-Trunk口在核心侧的角色是指定端口,接入侧是根端口,这样就不会出现聚合链路被STP阻塞的情况。
4. 常见故障排查与排错经验实录
4.1 现象一:Eth-Trunk协商不起来,端口一直Down
这种情况尤其多。我排查时的固定套路是:
- display eth-trunk 1看对端状态是不是Unselected。
- 确认两端成员接口数量是不是相同。有一端只加了一个成员口,另一端加了两个,协商就异常。
- 确认两端接口的速率和双工是否一致,比如一端是自协商,另一端手动设了1000M全双工,有时也能协商起来,但不稳定。
- 确认接口有没有被其他功能占用,比如某个接口已经被加入了另一个Eth-Trunk,或者配置了端口镜像。
排查命令:
code复制[CORE] display eth-trunk 1
[CORE] display interface GigabitEthernet 0/0/1
4.2 现象二:STP根桥变成了接入交换机,网络卡成PPT
这种事故通常是因为新接入了一台优先级更高(数值更小)的交换机,或者有人把某台接入交换机设成了stp root primary。结果核心交换机不再是最优根桥,链路带宽被打折扣。处理方式:
- 在核心交换机上强制指定根桥:
code复制[CORE] stp root primary
-
在接入交换机上去掉可能抢占根桥的配置,并在互联端口上开启根保护。
-
用display stp root确认全网根桥已经是核心。
4.3 现象三:链路聚合后流量还是跑满单条物理链路
很多人在做完链路聚合后发现,明明两条千兆口,理论带宽2000M,实际却还是只能跑1000M。原因大概率是负载均衡算法选得不对,所有流量哈希到了同一个成员口上。尤其是业务主要是单个大流量会话(比如视频存储写入、FTP大文件传输),任何负载均衡算法都无能为力,因为单条流不能被拆分。
排查方法:
code复制[CORE] display eth-trunk 1
看每个成员口的流量统计,如果某一端口转发速率很高,另一个几乎为0,基本就是哈希不均。尝试切换负载均衡算法:
code复制[CORE-Eth-Trunk1] load-balance ?
华为提供src-ip、dst-ip、src-dst-ip、src-mac、dst-mac、src-dst-mac等几种方式,根据业务类型试一遍,找到最均衡的模式。不过要记住,修改负载均衡算法会导致链路聚合口短暂中断,最好在业务低峰期操作。
4.4 现象四:STP端口反复震荡,日志刷屏
通常是边缘端口收到了BPDU,触发BPDU保护,端口被error-down,过一会儿又恢复,如此反复。先在接入端口上关闭边缘端口,再排查是不是有终端私接小交换机或者环路。
如果确认就是终端设备,就用BPDU保护兜底。处理命令:
code复制[CORE] display logbuffer
从日志里查看哪个接口被shutdown,再逐一排查该接口的下联设备。
4.5 华为交换机链路聚合+STP踩坑速查表
| 故障现象 | 常见根因 | 处理方式 |
|---|---|---|
| Eth-Trunk端口主动进入Unselected | 两端成员口配置不一致 | display eth-trunk对比两端配置统一 |
| 聚合链路被STP阻塞 | 根桥不在核心或链路Cost计算问题 | 在核心配置stp root primary |
| 聚合后流量只走一条物理口 | 负载均衡算法不匹配业务类型 | 切换load-balance模式 |
| 边缘端口反复UP/DOWN | 收到BPDU触发BPDU保护 | 排查下联设备,结合端口安全处理 |
| 网络广播风暴 | STP被手动关闭或配置错误 | 检查stp status,开启RSTP/MSTP |
5. 华为交换机STP与链路聚合实操经验总结
动手配交换机这几年,我最深的体会有三条:第一,STP和链路聚合从来不是孤立配置的,组网设计一开始就要把两层网络拓扑、VLAN规划、冗余需求想清楚,再落到配置命令上;第二,所有命令配置完,一定用display命令确认状态,别只盯着配置不返回值就以为成功了;第三,保护功能尽量能开就开,BPDU保护、根保护、环路保护这些不是厂家写着玩的,关键时刻能救你网络一命。
一个具体建议是:新项目开局前,先画一张简单的物理拓扑图,在图上标清楚核心、接入、终端设备、链路带宽和VLAN规划,然后再开始动设备。这样你在配置STP优先级和Eth-Trunk成员口数量的时候,心里有一张清晰的地图,而不是凭着记忆乱配。
另外建议把常见的配置模板保存成文本,每次项目开局直接改IP和VLAN号就行,能省大量重复打命令的时间。像华为交换机SSH登录、日志服务器配置这些,也可以一并放到模板里,一步到位。
这套组合配置,我在多个中大型项目中都验证过,稳定性是靠谱的。如果你在配置过程中遇到其他奇怪的故障,记住一个原则:先看物理层,再看链路聚合状态,再看STP角色,一层层剥,问题基本都能水落石出。
