主题
补充:Linux Bonding 两张 25G 网卡聚合后带宽是多少?
本文件记录对 "宿主机两张 25G 网卡做 bond,数据同时进出都是 50G 还是总共 50G" 问题的系统解答。
一、先看 bond 模式
Linux bonding 常见模式:
| 模式 | 名称 | 带宽情况 |
|---|---|---|
| mode 0 | balance-rr | 聚合带宽,多流可叠加 |
| mode 1 | active-backup | 只有 1 张网卡工作,总带宽 25G |
| mode 4 | 802.3ad (LACP) | 聚合带宽,多流可叠加,生产最常用 |
| mode 6 | balance-alb | 聚合带宽,多流可叠加 |
如果是 mode 1 active-backup,任何时候只有一张网卡在工作,所以进出都是 25G,不是 50G。
如果是 mode 4 LACP 或 mode 0 balance-rr,两张网卡同时工作。
二、关键结论(以 LACP 为例)
假设两张 25G 网卡做 LACP bond:
1. 单向聚合带宽 = 50G
所有出站流量加起来最多 50G,所有入站流量加起来最多 50G。
2. 单条 TCP 流通常还是 25G
LACP 默认按 L2/L3/L4 哈希(源 MAC、目的 MAC、源 IP、目的 IP、源端口、目的端口)选链路。
同一条 TCP 连接的五元组固定,所以会一直走同一条物理链路,单流带宽上限 = 25G。
只有多条连接/多流时,才能分散到两条链路上,总带宽接近 50G。
3. 全双工下,进出可以同时达到 50G
现代网卡是全双工的:
- 一张 25G 网卡可以同时收 25G + 发 25G
- 两张 25G 网卡做 bond:
- 收方向总带宽:25G + 25G = 50G
- 发方向总带宽:25G + 25G = 50G
所以如果你说的"同时进出"是指:一边进 50G,一边出 50G,那理论上是可以的,进出各自独立,互不影响。
三、问题解答
数据同时进出都是 50G 呢,还是同时进出流量总共是 50G?
正确理解:
- 不是"进出总共 50G":即不是"进 25G + 出 25G = 50G"。
- 而是"单向 50G,双向合计 100G":
- 入方向最多 50G
- 出方向最多 50G
- 同时进 50G + 出 50G,理论峰值 100G
但注意:
- 单条 TCP 连接 只能用到 25G
- 多流并发 才能达到 50G(单向)
- 实际带宽还会受 CPU、PCIe 总线、交换机、应用处理能力影响
四、实际例子
假设有一台服务器,2 张 25G 网卡做 LACP bond:
bash
# 查看 bond 模式
cat /proc/net/bonding/bond0场景 1:两台客户端同时从服务器下载
- 客户端 A 走网卡 1,速度 25G
- 客户端 B 走网卡 2,速度 25G
- 服务器总出站 = 50G ✅
场景 2:一台客户端单线程下载
- 只能走一条链路,速度最多 25G ❌
场景 3:服务器同时收发
- 从客户端 A 接收数据 50G(入方向)
- 向客户端 B 发送数据 50G(出方向)
- 理论上可以同时达到,因为全双工 + 两张网卡聚合
五、简单记忆表
| 问题 | 答案 |
|---|---|
| 单条连接最大带宽 | 25G |
| 单方向总带宽 | 50G |
| 进方向最大 | 50G |
| 出方向最大 | 50G |
| 进出同时最大合计 | 100G(理论峰值) |
| "同时进出总共" 50G | 不对,这是半双工的理解 |
六、生产建议
如果做 bond 是为了提升单连接带宽,LACP 做不到,需要考虑:
- 更大单网卡:100G/200G
- RoCE/RDMA
- 多路径 TCP (MPTCP)
如果是为了提升整体吞吐 + 高可用,LACP 是非常合适的方案。