1. 为什么你的网络总在关键时刻“掉链子”试试链路聚合吧你有没有遇到过这样的场景公司里财务部正在做月末结算服务器和核心交换机之间的数据流像洪水一样涌来结果网络突然卡成了PPT财务同事急得直跳脚或者你管理的机房核心交换机之间那条“独木桥”般的单条万兆链路一旦出现故障整个办公区的网络就瞬间瘫痪电话被打爆。这种时候你是不是特别希望网络链路能像高速公路一样有多条车道即使一条堵了或者维修其他车道也能保证通行今天我就来跟你聊聊华为网络设备里一个能解决这个痛点的“神器”——Eth-Trunk链路聚合。简单来说Eth-Trunk就是把多条物理的以太网链路像拧麻绳一样捆绑成一条更粗、更可靠的逻辑链路。它主要干两件大事第一是增加带宽比如把两个1G口绑一起理论上就能获得2G的带宽第二是提高可靠性绑在一起的几条链路可以互相备份一条断了流量自动切换到其他正常的链路上业务几乎感觉不到中断。这可比单纯升级设备端口或者依赖复杂的生成树协议STP要灵活、经济得多。STP虽然能防环路但会阻塞掉一些链路造成资源浪费而且切换速度慢远不如链路聚合来得直接高效。在我过去十年的项目里从中小企业的服务器接入到大型园区网的核心互联Eth-Trunk几乎是提升网络骨干健壮性和带宽的标配技术。它不是什么遥不可及的高深概念配置起来也比你想象的要简单。接下来我就带你从最基础的手工模式开始一步步深入到更智能的LACP模式通过实战配置和对比让你彻底搞懂这两种模式该怎么选、怎么配以及背后那些影响流量走向的关键机制。无论你是刚入行的网络工程师还是需要为业务选型的技术负责人这篇文章都能给你实实在在的参考。2. 手工模式 vs LACP模式核心差异与选型指南当我们决定使用Eth-Trunk时面临的第一个选择就是用手工模式还是LACP模式这可不是随便选选它们背后的工作原理和适用场景大有不同。弄明白了这个你才能做出最合适的技术选型。2.1 手工模式简单直接但需要“手动挡”驾驶手工负载分担模式顾名思义就是完全由网络管理员手工配置。你把几条物理接口加入同一个Eth-Trunk组告诉设备“嘿这几条线是一伙的当成一条来用。”设备就会乖乖照做。它的工作原理非常“憨厚”只要成员接口的物理状态是Up的也就是线插好了电信号通了它就会参与数据转发。设备不会去检查对端交换机是否也把这些接口绑在了同一个聚合组里。这就埋下了一个隐患如果对端配置错误比如你把本端的G0/0/1、G0/0/2、G0/0/3绑成了一个Trunk而对端却把G0/0/1、G0/0/2、G0/0/4绑在了一起那么只有G0/0/1和G0/0/2这两条线能正常通信G0/0/3和G0/0/4则形成了“错连”。手工模式发现不了这种错误它依然会试图从G0/0/3发送数据结果就是对端G0/0/4接口收到一堆“莫名其妙”的帧可能导致MAC地址漂移、广播风暴等问题网络变得不稳定。所以手工模式就像开手动挡的车给了你完全的控制权但也要求你对网络拓扑了如指掌配置时必须万分仔细确保两端严格对应。它的优点是配置简单所有设备都支持开销极小因为没有协议报文交互。我通常会在一些对端设备不受我控制比如某些老旧的专用设备、或者拓扑极其简单稳定的场景下使用它比如连接一台不支持LACP的存储设备。2.2 LACP模式智能协作自带“故障检测”和“自动协商”LACP模式就智能多了它是在IEEE 802.3ad标准中定义的。启用LACP后聚合链路的两端设备会通过发送一种叫LACPDU的协议报文来“聊天”。这个聊天过程非常关键首先两端设备会通过比较系统优先级和MAC地址选举出一台主动端。然后主动端再根据各成员接口的接口优先级选出哪些接口作为活动接口Active负责转发数据并将这个结果通过LACPDU告诉对端被动端。被动端则会遵从主动端的选举结果设置自己这边的活动接口。这个机制确保了两端对“哪些链路是干活儿的”有一致的认识。LACP最大的价值在于它的检测能力。它能及时发现链路层故障、对端接口未加入聚合组、聚合配置不一致比如速率、双工模式不同等问题。一旦发现这类错误它会自动将问题链路置为非活动状态防止其转发数据从而避免了手工模式下可能出现的错连问题。此外LACP还支持配置活动接口的上限阈值max active-linknumber你可以指定只让N条最好的链路转发多余的作为备份链路Unselected状态实现N1的冗余备份。当某条活动链路故障时备份链路会自动顶替上来。因此LACP模式就像是配备了自动驾驶辅助系统的车能自动帮你保持车道、检测危险。它更适合用在要求高可靠性、拓扑可能发生变化或者对端配置可能出错的场景比如核心交换机之间、交换机与服务器如果服务器网卡支持的连接。虽然它比手工模式多了一点点协议开销但这在当今网络带宽下几乎可以忽略不计换来的却是巨大的运维便利性和网络健壮性提升。为了更直观我把两者的核心区别总结成了下面这个表格特性对比手工负载分担模式LACP模式 (LACP-Static)协议交互无协议报文交互通过LACPDU报文交互配置一致性检查无依赖管理员手工保证有能检测错连、参数不匹配活动链路选举所有Up的接口都活动通过优先级协商选举活动接口备份链路不支持所有成员都活动支持可配置最大活动接口数故障检测仅能检测物理链路中断能检测链路层及聚合配置故障适用场景拓扑简单、稳定、对端设备可能不支持LACP要求高可靠性、需要冗余备份、拓扑可能变化的场景3. 实战配置手把手搭建两种聚合链路光说不练假把式下面我们就用两台华为交换机比如S5700系列来真机实战一下。假设我们用三条千兆以太网线GigabitEthernet0/0/1 到 G0/0/3将两台交换机连接起来目标是创建一个ID为1的Eth-Trunk逻辑链路。3.1 手工模式配置三步搞定基础聚合手工模式的配置非常直接我们分别在两台交换机上执行几乎相同的命令。在LSW1交换机上的配置Huawei system-view [Huawei] sysname LSW1 [LSW1] interface eth-trunk 1 // 创建编号为1的Eth-Trunk逻辑接口 [LSW1-Eth-Trunk1] mode manual load-balance // 指定模式为手工负载分担 [LSW1-Eth-Trunk1] trunkport gigabitethernet 0/0/1 to 0/0/3 // 一次性将1-3口加入聚合组 [LSW1-Eth-Trunk1] port link-type trunk // 设置Trunk接口类型如果需跨VLAN [LSW1-Eth-Trunk1] port trunk allow-pass vlan all // 允许所有VLAN通过按需配置在LSW2交换机上重复同样的操作只需修改设备名Huawei system-view [Huawei] sysname LSW2 [LSW2] interface eth-trunk 1 [LSW2-Eth-Trunk1] mode manual load-balance [LSW2-Eth-Trunk1] trunkport gigabitethernet 0/0/1 to 0/0/3 [LSW2-Eth-Trunk1] port link-type trunk [LSW2-Eth-Trunk1] port trunk allow-pass vlan all配置完成后使用display eth-trunk 1命令查看。你会看到三个成员口都是“Selected”状态带宽显示为3G假设是千兆口。这时你可以尝试拔掉其中一条网线观察命令输出会发现剩下的两条链路状态依然为UpEth-Trunk接口也不会Down流量会平滑地切换到剩余链路上。这就是最基本的链路冗余。3.2 LACP模式配置体验智能协商与备份LACP模式的配置命令和手工模式略有不同更常见的是在Eth-Trunk接口下指定模式后再到物理接口下将其加入聚合组。在LSW1上的配置[LSW1] interface eth-trunk 1 [LSW1-Eth-Trunk1] mode lacp-static // 关键配置为LACP静态模式 [LSW1-Eth-Trunk1] port link-type trunk [LSW1-Eth-Trunk1] port trunk allow-pass vlan all [LSW1] interface gigabitethernet 0/0/1 [LSW1-GigabitEthernet0/0/1] eth-trunk 1 // 将物理接口加入Eth-Trunk 1 [LSW1] interface gigabitethernet 0/0/2 [LSW1-GigabitEthernet0/0/2] eth-trunk 1 [LSW1] interface gigabitethernet 0/0/3 [LSW1-GigabitEthernet0/0/3] eth-trunk 1LSW2做完全相同的配置。完成后查看你会发现结果和手工模式看起来差不多。这时LACP的智能之处还没完全体现出来。让我们来激活它的备份功能。假设我们只想让两条链路作为主用链路第三条作为备份。[LSW1-Eth-Trunk1] max active-linknumber 2 // 设置最大活动链路数为2配置后再次使用display eth-trunk 1仔细查看。你会发现三个成员口中有两个状态是“Selected”选中即活动另一个变成了“Unselected”未选中即备份。只有Selected状态的接口才会转发数据流量。此时如果你断开一条Selected链路比如shutdown G0/0/1备份的那条Unselected链路会自动转变为Selected状态接替工作整个过程业务无感知。这就是N1冗余的典型应用。这里有个细节默认情况下当故障的原活动链路恢复undo shutdown后它并不会自动抢回“活动”的身份它会保持在Unselected状态作为新的备份。这是因为华为设备默认关闭了LACP的抢占功能。如果你希望恢复的链路能重新成为活动链路需要在Eth-Trunk视图下配置lacp preempt enable并设置延迟时间lacp preempt delay。不过在实际生产环境中除非有特殊需求比如一定要优先使用某条高质量链路一般不建议开启抢占频繁的角色切换可能带来不必要的风险。4. 负载分担的奥秘你的流量到底是怎么“分流”的配置好了聚合链路带宽也叠加了冗余也有了但你是不是心里还有个疑问这流量到底是怎么分摊到各条物理链路上的是像切香肠一样把每个数据包分开传送还是按“流”来分配这里面的学问直接影响了网络的性能和稳定性。4.1 逐包转发 vs 逐流转发一个关乎“顺序”的抉择逐包转发顾名思义就是把一个数据流中的每一个数据包轮流或者随机地放到不同的物理链路上发送。比如PC发送一串数据包1,2,3,4可能1号包走链路A2号包走链路B3号包又走链路A……这种方式能最大限度地利用所有链路的带宽理论上可以实现完美的负载均衡。但是它有一个致命的缺点数据包乱序。因为不同链路的延迟可能略有差异后发的包可能先到这会导致接收方需要大量的缓存和重组严重影响TCP等协议的性能甚至导致应用出错。所以在以太网链路聚合中逐包转发基本不会被使用。逐流转发则是华为Eth-Trunk默认也是推荐的方式。它的核心思想是保证同一个数据流的所有数据包都走同一条物理链路。那什么是“同一个数据流”呢这通常由数据包的某些特征字段来定义比如“源IP目的IP源端口目的端口”四元组。设备会通过这些字段计算出一个Hash值相同的Hash值映射到同一条出接口链路。这样PC1访问服务器A的所有包都走链路1PC2访问服务器A的所有包可能走链路2。这样既实现了不同流之间的负载分担又保证了单个流内部的数据包顺序。我打个比方逐包转发就像把一封长信拆成好几页分别用顺丰、中通、圆通几个快递寄出去虽然总的寄送能力很强但收信人可能先收到第三页再收到第一页得自己重新排序很麻烦。而逐流转发则是把这封信完整地交给一家快递公司比如顺丰寄送同时另一封信交给中通。对于每一封信数据流来说顺序是保证的多封信多个流则分担给了不同的快递公司物理链路。4.2 如何选择负载分担方式场景决定策略既然是基于流的负载分担那么根据什么特征来区分“流”就至关重要了。华为设备提供了灵活的负载分担策略你可以通过load-balance命令来调整。常用的策略有src-dst-ip基于源IP和目的IP默认策略适用于三层网络。src-dst-mac基于源MAC和目的MAC适用于纯二层网络。src-ip仅基于源IP。dst-ip仅基于目的IP。src-dst-port基于源端口和目的端口常用于服务器负载均衡场景。选择错误的策略可能导致负载分担失效我踩过一个坑在一个二层网络环境中我配置了Eth-Trunk但发现两台PC访问同一服务器时流量全挤在一条链路上。查了半天发现默认的负载分担模式是src-dst-ip。而在二层环境下数据帧里封装的是MAC地址对于交换机来说去往服务器同一个目的MAC的流量如果只基于目的IP/MAC做Hash算出来的值很可能是一样的自然就走同一条链路了。后来我把模式改成src-dst-mac或者src-mac流量立刻就均匀分摊了。所以记住一个原则尽量选择变化较多的字段作为Hash依据。如果网络中源地址很多比如大量用户PC而目的地址很单一比如一台网关或服务器那么就应该选择基于源地址src-ip或src-mac的负载分担。你可以根据实际网络流量模型通过命令测试和调整找到最均衡的策略。5. 进阶场景与排错思考掌握了基础和核心原理我们再来看看一些更深入的场景和实际配置中容易遇到的“坑”。5.1 三层Eth-Trunk当聚合接口需要IP地址前面的例子都是二层交换Eth-Trunk接口作为一个二层通道。但在路由器或三层交换机上我们可能需要Eth-Trunk接口直接配置IP地址作为三层路由接口使用。配置也很简单关键一步是undo portswitch。假设两台路由器AR1和AR2之间通过两条物理链路做三层互联# 在AR1上配置 [AR1] interface eth-trunk 1 [AR1-Eth-Trunk1] undo portswitch // 切换为三层模式 [AR1-Eth-Trunk1] ip address 10.1.1.1 255.255.255.0 // 配置IP地址 [AR1-Eth-Trunk1] mode lacp-static [AR1] interface gigabitethernet 0/0/0 [AR1-GigabitEthernet0/0/0] eth-trunk 1 [AR1] interface gigabitethernet 0/0/1 [AR1-GigabitEthernet0/0/1] eth-trunk 1三层Eth-Trunk的负载分担策略选择要特别注意。因为三层设备处理的是IP报文所以基于IP的负载分担策略如src-dst-ip通常是有效的。如果这时你错误地配置为基于MAC的负载分担由于路由器转发的数据帧其源/目的MAC地址可能就是路由器自身接口的MAC会导致Hash结果单一无法分流。5.2 集群中的跨设备链路聚合E-Trunk在交换机堆叠或集群如华为的CSS环境中为了进一步提高可靠性出现了E-Trunk技术。它实现了跨物理设备的链路聚合。你可以把集群中两台不同设备上的物理端口绑定到同一个逻辑的E-Trunk接口中。这样即使其中一台设备整机宕机流量也可以通过集群链路切换到另一台设备的成员端口上实现了设备级的冗余。配置E-Trunk相对复杂需要先配置集群再创建E-Trunk并绑定本端的Eth-Trunk。它还有一个重要的优化特性本地优先转发。默认情况下流量从本设备进入也可能从对端设备的成员口转发出去这会占用宝贵的集群间带宽。启用本地优先转发后设备会优先选择本设备上的成员口转发流量大大提升了效率。配置命令就是在Eth-Trunk视图下执行local-preference enable。5.3 常见问题与排查思路在实际部署中你可能会遇到聚合不成功、负载不均等问题。这里分享几个排查思路成员口状态不一致使用display interface brief检查所有成员口的物理状态、速率、双工模式是否一致。一个千兆口和一个百兆口是无法成功聚合的。配置未生效检查两端Eth-Trunk的编号、模式手工/LACP、VLAN配置是否一致。在LACP模式下一定要用display eth-trunk [编号]查看对端信息确认两端协商成功且Selected接口一致。负载分担不均衡这是最常见的问题。首先用display eth-trunk [编号] load-balance查看当前的负载分担策略。然后分析你的流量模型。如果网络中存在“大象流”比如一台服务器备份到另一台服务器流量巨大但只有一条流那么无论怎么配置这条流都只会走一条链路。这时需要考虑在应用层或更上层做分流。对于多数业务流通过调整负载分担策略比如从默认的src-dst-ip改为增加src-dst-port通常能获得更好的均衡效果。LACP备份链路不切换检查是否配置了max active-linknumber。确认故障的链路是否是Selected状态。检查是否开启了抢占以及抢占延迟是否设置合理。链路聚合Eth-Trunk是一项非常实用且成熟的技术从手工模式的简易部署到LACP模式的智能可靠再到负载分担策略的精细调优它为企业网络提供了坚实的带宽和可靠性保障。真正的掌握它离不开在实验室或现网中的反复动手实践和观察。每次配置后多使用display命令查看状态尝试断开链路观察切换过程调整负载分担策略并测试流量分布这些实操经验远比死记硬背命令来得重要。希望这篇从原理到实战的深度解析能帮你下一次在面对网络带宽和可靠性瓶颈时多一份从容多一个可靠的解决方案。