跳到主内容

LYRA

Lyra 正在加载

交换机笔记(五)

网络技术鬼鬼

最后一篇记录三个偏工程的话题:多台设备之间一根线不够用时怎么捆(链路聚合),多台设备怎么合成一台(堆叠与 M-LAG),以及交换机从什么时候开始会路由(三层交换)。

一、一根线不够的时候

两台交换机之间要更大的带宽,最直接的反应是再插一根线。但前三篇说过,多根平行链路在生成树眼里就是环路,多余的会被阻塞——带宽没有叠加,只是多了备份。

链路聚合(Link Aggregation) 把多根物理链路捆成一根逻辑链路:对上层协议和 STP 来说,这就是一个端口,带宽叠加,某一根断了流量自动挪到剩下的链路上。华为的聚合口叫 Eth-Trunk,思科叫 EtherChannel / Port-Channel,服务器侧叫 bonding 或 NIC Teaming,说的是同一件事。

链路聚合对 STP 透明

二、手工模式与 LACP

1. 手工模式

两端静态配置,把端口直接加进聚合组,不跑任何协商协议。简单,但对端配错了(比如一根线插到了别的交换机)没有任何机制能发现,流量直接丢。只在对端不支持 LACP 时使用。

2. LACP 模式

LACP(Link Aggregation Control Protocol) 是标准协商协议。它的标准编号本身就有一段值得记录的历史:

过时结论:老资料写“LACP 就是 802.3ad”。802.3ad 是 2000 年发布时的编号,2008 年 IEEE 认为链路聚合不属于以太网专属技术,把它从 802.3 工作组移交 802.1 工作组,现行标准是 802.1AX。Linux 的 bonding 模式名至今叫 802.3ad,属于历史遗留叫法,两个编号指同一套技术。

LACP 的工作要点:

  • LACPDU 发往慢协议组播地址 01-80-C2-00-00-02,EtherType 0x8809。
  • 端口分主动(Active)和被动(Passive)两种模式,至少一端是主动才能发起协商。
  • 先选主动端:比较系统 LACP 优先级(默认 32768)加系统 MAC,小的一方说了算。
  • 主动端按接口优先级 + 端口号选出活动端口,其余作为备份。
  • max active-linknumber 可以限制活动链路数,多余的链路热备;配合链路抢占(preempt)让高优先级端口恢复后夺回活动状态。
  • 成员口必须速率、双工、VLAN 配置一致,否则协商不起来。

过时结论:思科私有协议 PAgP(desirable/auto 两种模式)曾与 LACP 并列出现在教材里。思科 Nexus 系列已经完全不支持 PAgP,新项目没有理由再用它,跨厂商对接更是只能用 LACP。

三、负载分担:逐流,不是逐包

聚合口的流量怎么分配到各成员链路?按报文字段做哈希:华为设备可选源 MAC、目的 MAC、源 IP、目的 IP 或它们的组合。

关键点是逐流而非逐包:哈希结果相同的报文(同一条流)固定走同一根链路,这样能保证同一条流的报文不乱序。代价是单条流最大只能吃满一根成员链路的带宽——8 根千兆捆成 8G,一次大文件传输还是跑在 1G 上。流量里流的数量够多、分布够散,聚合效果才好;少数几条“大象流”占主导时,要仔细选哈希因子,避免哈希结果扎堆(极化问题)。

四、堆叠:多台合成一台

堆叠把多台物理交换机合成一台逻辑设备:统一管理 IP、统一配置、统一 MAC 表和转发表。华为的盒式堆叠叫 iStack,框式叫 CSS;思科对应 StackWise,框式的 VSS 已被 StackWise Virtual 取代。

要点:

  • 成员之间用专用堆叠线缆或业务口连接,推荐环形连接(链形断一根就分裂)。
  • 选举主用交换机:先比优先级(华为默认 100),再比 MAC、槽位号。主用负责管理,备用热同步,其余是从设备。
  • 堆叠最怕分裂:堆叠链路全断后,两台都自认为主用,网络上出现两台 IP、MAC 完全一样的设备。要用 MAD(多主检测) 之类的机制检测并制裁(让一方端口静默)。

堆叠消灭环路的方式很直接:服务器的两根上行线分别接到两台成员交换机上,配置成跨成员的一个 Eth-Trunk。逻辑上联的是“一台设备的一个聚合口”,没有环,STP 无事可做,两条链路同时转发。

五、M-LAG:两个大脑的双活

M-LAG(跨设备链路聚合) 达到的效果和堆叠类似——下联设备看到一台逻辑设备——但实现思路相反:两台设备各自保留独立的控制面,通过 peer-link 同步状态,通过 keepalive 链路做心跳和双主检测。

对比项 堆叠 M-LAG
控制面 合一,一台主用管全部 两台各自独立
升级 整机重启或 ISSU,风险捆绑 可以逐台升级,业务不中断
分裂风险 有,靠 MAD 有,靠 keepalive + 双主检测
管理 一个 IP,最简单 两台分别管理
跨厂商 同厂商同系列 同样是私有实现,但限制略宽松

堆叠与 M-LAG 对比

趋势说明:堆叠胜在简单,M-LAG 胜在可靠性和可维护性(升级不用整组停机)。数据中心新架构里 M-LAG 及其变体更常见,堆叠在园区接入层仍然流行。这不是谁淘汰谁的问题,但“堆叠是双上行接入的唯一正解”这个老结论已经过时了。

六、三层交换:交换机学会路由

第二篇讲 VLAN 间通信时已经用过三层交换的 VLANIF 接口。这里记录它为什么快。

传统路由器转发靠 CPU 查路由表,逐包处理;三层交换机把路由表下发成硬件转发表(FIB),ASIC 直接查表转发,所有端口线速。

过时结论:「三层交换就是一次路由、多次交换(Route once, switch many)」。这句话描述的是 90 年代的流式多层交换(如思科早期的 MLS):一条流的第一个包上送 CPU 按路由表转发,同时在硬件里建一条快捷表项,后续包直接按表项交换。今天的主流实现是基于拓扑的预生成转发表(思科 CEF 的思路)——控制面路由算好后,整张 FIB 直接灌进硬件,不需要第一个包去探路。但作为理解“三层交换为什么比传统路由器快”的入门比喻,这句话仍然好用,它抓住了“硬件转发”这个本质。

流式交换与现代硬件转发表

与之配套的另一个老结论也该更新:

过时结论:「交换机快但功能少,路由器慢但功能全」。前半句在硬件转发普及后依然成立,后半句的“慢”已经不准确——现代路由器同样硬件转发。今天两者的真实分野不在速度,而在功能侧重:NAT、状态防火墙、VPN、广域网协议、超大路由表(BGP 全表)是路由器的地盘;高密度端口、线速二三层转发是交换机的地盘。

七、小结

  • 链路聚合把多根线捆成一根逻辑线,对 STP 透明;能跑 LACP 就不要手工静态捆。
  • 负载分担逐流哈希,单流吃不满聚合带宽,哈希因子要按流量模型选。
  • 堆叠把多台合成一台(统一控制面),M-LAG 保留两个控制面换取可维护性,二者都消灭了双上行场景的环。
  • 三层交换用硬件 FIB 线速路由;“一次路由多次交换”是流式交换时代的老话,今天的实现是控制面预生成转发表。

版权许可

本文采用 CC BY-SA 4.0 协议授权

保留署名与相同方式共享即可转载、引用或再创作。转载时请注明出处并附上本文链接。

评论

留言系统基于 Disqus,发言前可查看 评论规则。部分网络环境可能无法正常加载。