Skip to content

补充:Linux Bonding 两张 25G 网卡聚合后带宽是多少?

本文件记录对 "宿主机两张 25G 网卡做 bond,数据同时进出都是 50G 还是总共 50G" 问题的系统解答。


一、先看 bond 模式

Linux bonding 常见模式:

模式名称带宽情况
mode 0balance-rr聚合带宽,多流可叠加
mode 1active-backup只有 1 张网卡工作,总带宽 25G
mode 4802.3ad (LACP)聚合带宽,多流可叠加,生产最常用
mode 6balance-alb聚合带宽,多流可叠加

如果是 mode 1 active-backup,任何时候只有一张网卡在工作,所以进出都是 25G,不是 50G。

如果是 mode 4 LACPmode 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 是非常合适的方案。