📡 第二章 彻底理解L2交换机
📄 一句话概括

链路聚合能把总带宽加上去,但给不了「一条流」加速——因为分流靠哈希。 4 条千兆聚合,单条 TCP 流最多还是 1 Gbps。

📝 本节和前面几节的关系

上一节讲「堵住环路」,这一节讲「用好多条路」。两者是同一个问题的两种解法。 这一节要算:哈希分布的均匀性,以及为什么它决定了实际收益。

一、分流的机制是哈希

交换机按「源 MAC、目的 MAC、源 IP、目的 IP、源端口、目的端口」算哈希,同一个值永远走同一条线。

这是为了「不乱序」:同一条流如果一会儿走这条一会儿走那条,到达顺序会乱,TCP 要重排, 性能反而更差。

所以聚合是「按流分流」,不是「按包分流」。这个区别决定了它的全部局限。

二、分布有多不均匀

4 条链路、8 条流,最不均匀的情况下某条链路要背 5 条流——占 8 条的 62.5%。

这意味着「总带宽 4 Gbps」是个理论值,实际能不能吃到要看流有多少条。

哪种流量吃得到:多人同时访问服务器、多线程备份。 哪种吃不到:单台机器拷一个大文件、两端 IP 固定的 UDP 视频。

三、两条实践规矩

一、一个聚合组里的链路必须同速率、同双工、同 MTU。不同的话有的设备直接不启用。

二、优先用 LACP(动态)而不是静态捆绑。静态捆在一端网卡故障时不会通知对端, 流量继续往坏链路上发;LACP 会协商,几百毫秒就切走。

最后一条:想做「单台服务器 4 Gbps」,聚合解决不了。 得上 10G/25G 单链路,或者服务器端做多路径(MPIO)。

四、动手 Demo:8 条流分到 4 条链路,最不均匀是什么样

这段穷举 8 条流分到 4 条链路的全部 65536 种分法,统计最不均匀情况下单条链路要背几条流, 以及多少比例的分法会让某条链路背 5 条以上。

slots = set(itertools.product(range(4), repeat=8))
for combo in slots:
    cnt = [combo.count(k) for k in range(4)]
    worst = max(worst, max(cnt))
    if max(cnt) >= 5:
        unbal += 1

实跑输出:

--------------------------------------------------------------------
链路聚合,为什么 4 条千兆加起来不是 4 千兆
--------------------------------------------------------------------
**链路聚合(LAG/LACP)把多条物理链路捆成一条逻辑链路。**它能加带宽、能做冗余,
但**不能给「一条流」加速**。

**因为分流靠哈希。**交换机按「源 MAC、目的 MAC、源 IP、目的 IP、源端口、目的端口」算一个哈希值,
同一个值永远走同一条线。

**算一下实际分布。**假设 8 条流随机散到 4 条链路上:

  8 条流分 4 条链路,共 65536 种分法。
  最不均匀的情况下,某条链路要背 8 条流(占 8 条的 100%)。
  有 7156 种分法(11%)会让某条链路背 5 条以上。

**这意味着:4 条千兆聚合,单条 TCP 流最多还是 1 Gbps。**
总带宽 4 Gbps 只有「多条流并存」时才吃得到。

**哪种流量吃得到、哪种吃不到**:

  流量                        能不能用满聚合带宽     原因
  ---------------------------------------------------------------------------
  多人同时访问服务器          能                     多条流,哈希分散
  单台机器拷一个大文件        不能                   一条流只走一条线
  备份服务器到存储            能                     通常多线程多连接
  两个 IP 之间的 UDP 视频     不能                   五元组固定,哈希不变

**所以「带宽」和「单流带宽」要分开说。**买设备时如果目标是「让一台服务器跑 4 Gbps」,
链路聚合解决不了——**得用 10G/25G 单链路,或者多路径(如服务器端做 MPIO)。**

**两条实践规矩**:

1. **一个聚合组里的链路必须同速率、同双工、同 MTU。**不同的话有的设备直接不启用。
2. **优先用 LACP(动态)而不是静态捆绑。**静态捆在一端网卡故障时不会通知对端,
流量继续往坏链路上发;LACP 会协商,几百毫秒就切走。

最坏情况是 8 条流全撞到一条链路上——那就等于没聚合。 概率很低但存在,而且一旦发生,那条链路就是瓶颈。

「背 5 条以上」的分法占比不低,说明分布不均匀是常态不是例外。 所以聚合的实测带宽通常只有理论值的六七成,这不是故障。

最后要记住这一条:聚合的价值有一半在「冗余」而不是「带宽」——一条线断了, 流会自动散到剩下的线上,业务不中断。这个价值比带宽更值钱。

30 秒实验

  1. 查一个聚合组的成员链路速率是否一致。
  2. 看聚合用的是静态捆绑还是 LACP。
  3. 在两台机器之间做多线程传输,看能不能跑满聚合带宽。

常见误区

  1. 以为 4 条千兆等于 4 千兆单流。单流还是 1 Gbps。
  2. 用静态捆绑代替 LACP。故障时切不过去。
  3. 聚合组里混不同速率。有的设备直接不启用。
自测三问(点开对答案) 1. 链路聚合为什么按流分流而不是按包分流? —— 按包分流会让同一条流乱序,TCP 要重排,性能更差。 2. 4 条千兆聚合,单条 TCP 流最多多少? —— 1 Gbps。 3. 为什么优先用 LACP? —— 动态协商,一端故障时几百毫秒就能切走。

下一节:第五个功能是把一台交换机切成几台——VLAN。

相关笔记