双千兆网卡做了绑定,为什么还是跑不到 2G 带宽

“两块千兆网卡做了 bond,模式选的 mode6,交换机也是千兆口,怎么传一个大文件还是只有 1G 出头?是不是绑定没生效?"——先给结论:多半不是故障。mode6 的带宽账,本来就不是"两块网卡速度相加"这么算的。

先讲机制。mode6 是自适应负载均衡(ALB),它把流量分担到两块网卡上的粒度是"流”,不是"包":同一对源地址和目的地址之间的通信,会被哈希算法固定分到其中一块网卡上走,只有不同的流才会落到另一块卡。这样设计是为了避免同一个连接的数据包乱序到达。代价也在这里——任何单个连接的速率上限,永远等于单块网卡的线速。两块千兆卡做 mode6,单文件单连接拷贝就是 1Gbps 封顶,不会变成 2G,这是协议行为,不是配置错误。

那什么时候能看到接近 2G 的聚合带宽?多个并发流同时跑的时候。验证照三步走:

  1. 确认绑定本身是活的。看 cat /proc/net/bonding/bond0 的输出,两块从卡的状态、当前哈希分配一目了然;题面里那句 ethtool 查 bond 的思路也一样,先看链路是不是双卡都在位、速率都协商到了千兆。
  2. 单流测速,校准预期。iperf3 起单连接压一遍,结果贴着 1G 走就是正常——这一步是给你吃定心丸的:单会话上限就是单网卡线速。
  3. 多流测速,看聚合。iperf3 加 -P 参数起多条并行流,或者同时从多台机器往这台服务器拷数据,聚合吞吐应该能往上走到接近 2G。如果多流也只有 1G,再回头查:是不是哈希把所有流都压到了同一块卡(哈希策略的选取面太窄)、或者某块从卡速率协商成了百兆。

mode6 还有一个常被夸错的点:它不依赖交换机侧的链路聚合协商,对端交换机不用做任何配置,中小机房图省事常用它。但要清楚它换来的便利对应着局限——分担由本端哈希决定,不如两端协商的动态聚合来得精细,对带宽预期更要提前算清。

最后送一条验收纪律:需要单条连接就跑 2G 的场景(比如跨机备份走的就是单流),思路不该是绑卡,而是上万兆口。绑定解决的是冗余加多流聚合,不是单流提速,这两件事在方案里就要写清楚。贵州诚鑫致达科技给企业做服务器交付时,双网卡通行的做法是把带宽预期直接写进交付文档——“多流聚合约 2G、单流 1G 封顶”,验收时双方都不扯皮。你们机房的绑定网卡,验收时有没有在带宽数上踩过坑?评论区聊聊。服务器的链路健康,也在企业数据管家的日常巡检清单里。