链路聚合是网络工程师科目中一个看似简单、实则暗藏大量命题陷阱的知识点。它的正式定义来自电气与电子工程师学会的链路聚合标准:将两台设备之间的多条物理链路捆绑为一个逻辑链路,使得这个逻辑链路的带宽等于被捆绑物理链路带宽之和,同时在物理链路出现故障时自动进行流量切换,从而实现带宽提升与可靠性保障的双重目标。这个标准最早以 IEEE 802.3ad 的名义发布,后来被吸收进 IEEE 802.1AX 标准,成为以太网链路聚合的规范性文件。软考命题人在出题时,经常围绕这个标准的术语和机制设置干扰项,考生如果只记住"把几条线捆一起"这个表面理解,很容易在细节上丢分。
在具体厂商术语体系中,链路聚合有不同的叫法。华为设备将其称为 Eth-Trunk,思科设备将其称为 EtherChannel 或 Port-Channel,惠普与华三的设备沿用了 Trunk 的表述。这些名称虽然不同,但指向的机制完全一致,都属于链路聚合这一范畴。软考网络工程师的题目以华为命令体系为主要考查对象,因此考生需要重点掌握 Eth-Trunk 的配置思路,同时也要理解链路聚合、聚合组、成员端口、活动端口、非活动端口这些概念之间的层级关系。所谓聚合组,指的是被捆绑在一起的一组物理端口及其对应的逻辑接口;所谓成员端口,指的是加入聚合组的物理端口;所谓活动端口,指的是真正参与数据转发的成员端口;所谓非活动端口,指的是虽然加入了聚合组、但因数量限制或协商结果而暂不参与转发的端口。
链路聚合之所以重要,是因为它直接解决了传统以太网面临的两个核心矛盾。第一个矛盾是带宽瓶颈,单条物理链路的速率受制于接口标准,而通过聚合可以把多条链路叠加起来,在不更换高速接口的情况下平滑扩展带宽。第二个矛盾是单点故障,如果两台交换机之间只有一条链路,这条链路一旦断开,整个网络就会中断,而链路聚合提供了链路级别的冗余,任何一条成员链路故障都不会导致聚合组整体失效。这两个矛盾的解决,构成了链路聚合在园区网核心层、汇聚层和服务器接入层被广泛部署的根本原因。
链路聚合最容易让人产生误解的地方,在于它对数据流的处理方式。很多考生直观地认为,把两条千兆链路聚合起来,就得到了一条两倍速率的传输通道,任何数据在其中传输时都会享受到双倍带宽。这个理解是错误的。链路聚合的负载分担机制是逐流分担,而不是逐包分担。所谓逐流,指的是以一条完整的数据流为最小单位进行分发,同一条数据流中的所有报文始终走同一条成员链路;所谓逐包,指的是把报文一个接一个地轮流发送到不同的成员链路。逐包分担虽然在理论上能让带宽利用率最大化,但它会带来致命的乱序问题,因为不同成员链路的传输时延存在差异,同一个通信对端的报文可能先发后到,导致接收方收到的报文顺序错乱,严重影响 TCP 等对顺序敏感的上层协议。因此,链路聚合在工程实践中一律采用逐流分担,通过保持同一数据流的报文走同一条路径来避免乱序。
为了实现逐流分担,聚合接口需要对进入的报文进行哈希运算,根据运算结果决定报文从哪条成员链路转发出去。哈希运算的输入称为负载分担的哈希因子,常见的哈希因子包括源 MAC 地址、目的 MAC 地址、源 IP 地址、目的 IP 地址、源端口号、目的端口号等。聚合接口会从这些字段中选取若干进行组合,经过循环冗余校验或者异或等算法处理后取模,将结果映射到具体的成员链路上。这就解释了为什么链路聚合的带宽提升对单条大流量传输效果有限:如果两台主机之间只有一条数据流,那么这条流的全部报文都会被哈希到同一条成员链路上,实际上只使用了一条链路的带宽;只有当网络中存在大量并发数据流时,不同的流才会被分散到不同的成员链路上,聚合后的总带宽才能被充分利用。理解这一点,是回答"链路聚合是否真的能叠加带宽"这类问题的关键。
链路聚合的协商机制依赖链路聚合控制协议,这个协议的英文缩写是 LACP。LACP 的工作方式是,参与聚合的设备之间周期性地交换链路聚合控制协议数据单元,这种报文携带了本端的系统优先级、系统标识、端口优先级、端口号和操作键等信息,通过对比这些信息来完成聚合组的一致性和活动端口的选举。LACP 报文使用组播目的地址,以太网类型字段的取值是 0x8809,这个细节在软考中偶有涉及,考生应当有印象。
在活动端口的选举过程中,LACP 遵循一套严格的优先级比较规则。比较的顺序是:先比较系统优先级,数值越小越优先;如果系统优先级相同,再比较系统标识,也就是设备的 MAC 地址,同样数值越小越优先;如果系统层面无法分出高下,再比较端口优先级和端口号。系统优先级的默认值是 32768,取值范围是 0 到 65535,取值越小代表优先级越高。通过这一套比较规则,两端设备能够共同确定哪些端口成为活动端口,哪些端口作为备份的非活动端口。当聚合组中的成员端口数量超过活动端口数量的上限时,优先级较低的端口会被置为非活动状态,仅在活动端口故障时按优先级顺序依次启用,从而形成活动端口与备份端口的分级机制。
链路聚合在可靠性方面的价值,集中体现在成员链路故障时的快速切换能力上。当聚合组中的某条成员链路因为物理中断或者对端故障而失效时,聚合接口会立即将原本通过该链路转发的数据流重新哈希,把它们切换到仍然正常的成员链路上。对于采用 LACP 协商的聚合组,设备还可以通过 LACP 报文的超时机制快速感知对端故障,触发切换。整个切换过程发生在数据链路层,对上层协议透明,因此上层业务不会因为单条链路的中断而中断。这种冗余能力与生成树协议提供的环路冗余有本质区别,生成树协议在链路故障时需要重新收敛,收敛期间网络处于阻断状态,而链路聚合的切换几乎是即时的,因为它的成员链路始终处于活跃转发状态,不存在生成树那样的端口角色切换过程。这也是链路聚合在要求高可用性的网络场景中更受青睐的原因。
链路聚合按照协商方式可以分为手动模式与基于 LACP 的模式两大类。手动模式也被称为静态聚合,在这种模式下,聚合组由管理员手工创建,设备之间不交换 LACP 报文,只要管理员在两端的接口上完成了聚合配置,聚合组就立即生效。手动模式的优点是配置简单、不依赖协议协商,适用于两端设备都受控、且对自动协商没有要求的场景。它的缺点是缺乏对端状态的自动检测能力,如果对端接口因为某种原因没有正确加入聚合组,或者两端配置不一致,手动模式无法发现这些异常,可能导致单向转发或者流量黑洞。
基于 LACP 的模式又细分为静态 LACP 模式和动态 LACP 模式。在华为的命令体系中,手动模式对应的是手动负载分担模式,静态 LACP 模式通过手工配置聚合组并启用 LACP 协议实现,动态 LACP 模式则允许设备通过 LACP 报文自动发现并协商聚合关系。LACP 模式的优势在于,它能够通过协议报文的交互主动发现配置错误,例如两端成员端口的速率不一致、双工模式不匹配、或者聚合组编号不一致等问题,都可以通过 LACP 的协商结果暴露出来,从而避免隐蔽的网络故障。软考题目经常考查手动模式与 LACP 模式在故障检测能力上的差异,考生需要牢牢记住:LACP 模式的可靠性高于手动模式,因为前者具备对端状态检测和配置一致性校验的能力。
聚合接口的负载分担模式决定了哈希运算使用哪些报文字段作为输入,这个选择对负载均衡的效果有直接影响。华为设备支持基于源 IP 地址、目的 IP 地址、源 MAC 地址、目的 MAC 地址、源端口号、目的端口号以及这些字段的多种组合进行负载分担。在二层转发场景中,由于报文尚未解析到 IP 层,只能使用 MAC 地址作为哈希因子;在三层转发场景中,则可以使用 IP 地址甚至端口号进行更精细的分担。实际工程中,选择负载分担模式时需要结合流量的特征来判断,如果网络中的流量主要来自固定的源主机访问多个目的主机,那么以目的 IP 地址作为哈希因子能够获得更均匀的分担效果;反之,如果流量是多个源主机访问同一个服务器,那么以源 IP 地址作为哈希因子更为合适。这个细节虽然很少直接成为选择题的考点,但理解它有助于考生把握链路聚合的完整技术图景。
哈希因子组合的复杂度也与设备的转发能力直接相关。参与哈希运算的字段越多,负载分担的
本篇完!