链路聚合能把总带宽加上去,但给不了「一条流」加速——因为分流靠哈希。 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 秒实验
- 查一个聚合组的成员链路速率是否一致。
- 看聚合用的是静态捆绑还是 LACP。
- 在两台机器之间做多线程传输,看能不能跑满聚合带宽。
常见误区
- 以为 4 条千兆等于 4 千兆单流。单流还是 1 Gbps。
- 用静态捆绑代替 LACP。故障时切不过去。
- 聚合组里混不同速率。有的设备直接不启用。
自测三问(点开对答案)
1. 链路聚合为什么按流分流而不是按包分流? —— 按包分流会让同一条流乱序,TCP 要重排,性能更差。 2. 4 条千兆聚合,单条 TCP 流最多多少? —— 1 Gbps。 3. 为什么优先用 LACP? —— 动态协商,一端故障时几百毫秒就能切走。下一节:第五个功能是把一台交换机切成几台——VLAN。
- ☐ (本节完,下一节 02.08.05 VLAN)