2. 网卡Bonding基础:Linux Bonding模式概述(mode 0-6)
网卡Bonding(亦称网卡绑定、链路聚合)是将多块物理网卡虚拟成一块逻辑网卡的技术,在DPDK主备切换延迟测试中,Bonding模式直接决定了故障检测与切换的底层行为。Linux内核自2.4.12起原生支持Bonding驱动,共定义7种工作模式(mode 0~6)。理解每种模式的收发策略、故障切换机制和适用场景,是后续进行DPDK Bonding故障注入与延迟测量的前提。
2.1 模式总览与对比
下表汇总了Linux Bonding七种模式的基本特性、是否需要交换机支持、以及故障切换行为。建议在阅读后续详细说明前先建立整体认知。
| 模式编号 | 模式名称 | 出站策略 | 需交换机支持 | 故障切换行为 | 典型场景 |
|---|---|---|---|---|---|
| mode 0 | balance-rr | 轮询(Round-Robin) | 否(需静态聚合) | 逐包切换,切换快但可能乱序 | 负载均衡,吞吐优先 |
| mode 1 | active-backup | 仅主端口发送 | 否 | 主备切换,切换延迟关键 | DPDK主备切换测试首选 |
| mode 2 | balance-xor | XOR哈希(MAC/IP) | 否(需静态聚合) | 按哈希重选端口 | 简单负载均衡 |
| mode 3 | broadcast | 所有端口广播 | 否 | 冗余发送,无切换延迟 | 高可靠性,低带宽 |
| mode 4 | 802.3ad (LACP) | 动态协商+哈希 | 是(必须LACP) | LACP协商切换 | 数据中心标准聚合 |
| mode 5 | balance-tlb | 自适应发送负载 | 否 | 发送端切换,接收端不变 | 发送负载均衡 |
| mode 6 | balance-alb | 自适应收发负载 | 否 | 收发独立切换 | 全双工负载均衡 |
2.2 各模式详细解析
2.2.1 mode 0 — balance-rr(轮询模式)
数据包按顺序依次从每个slave端口发出。例如有2块网卡,第1个包走eth0,第2个包走eth1,第3个包走eth0,以此类推。接收端无特殊策略,由交换机根据MAC地址或端口转发。
- 优点:理论上可实现N倍线速吞吐(N为slave数量),负载最均衡。
- 缺点:同一TCP流的数据包可能走不同路径,导致接收端乱序,TCP性能下降。
- 故障切换:链路故障时,Bonding驱动立即将故障端口从轮询列表移除,切换延迟极低(微秒级),但乱序风险依然存在。
2.2.2 mode 1 — active-backup(主备模式)
同一时刻只有一块网卡(active slave)负责收发数据,其余网卡处于备份状态。当active slave链路故障时,Bonding驱动自动切换到下一个可用的backup slave。
- 优点:实现简单,无需交换机特殊配置;不会出现乱序;切换逻辑清晰。
- 缺点:总带宽受限于单块网卡,无法利用多网卡并行吞吐。
- 故障切换:切换延迟由链路检测机制决定(MII监控或ARP监控),默认100ms轮询间隔,可调至10ms甚至更低。这是DPDK主备切换延迟测试的核心关注点。
2.2.3 mode 2 — balance-xor(XOR哈希模式)
根据源MAC、目的MAC、源IP、目的IP或端口号的XOR哈希值,选择固定的slave端口发送数据包。同一TCP流的所有包始终走同一端口,避免乱序。
- 优点:无乱序问题,负载均衡粒度适中。
- 缺点:哈希冲突可能导致负载不均;交换机需配置静态链路聚合(或支持EtherChannel)。
- 故障切换:链路故障时,哈希表重新计算,受影响流切换到新端口,切换延迟取决于哈希重算时间。
2.2.4 mode 3 — broadcast(广播模式)
每个数据包在所有slave端口上同时发送。接收端会收到多份相同数据包,由上层协议去重。
- 优点:极高的冗余可靠性,单链路故障不影响数据送达。
- 缺点:带宽浪费严重,总吞吐受限于最慢链路。
- 故障切换:无切换延迟概念——所有端口始终在发送,故障仅意味着少一份副本。
2.2.5 mode 4 — 802.3ad(LACP动态聚合模式)
通过LACP(Link Aggregation Control Protocol)与交换机动态协商聚合组,使用XOR哈希分发数据包。这是数据中心最常用的标准聚合模式。
- 优点:标准化、与交换机自动协商、支持动态增减链路。
- 缺点:交换机必须支持LACP;配置复杂度高;切换依赖LACP协商时间(通常3~5秒)。
- 故障切换:链路故障后,LACP协议需重新协商聚合组,切换延迟通常在秒级,不适合对切换时间敏感的场景。
2.2.6 mode 5 — balance-tlb(自适应发送负载均衡)
发送流量根据各slave的实时负载动态分配,接收端仍由当前active slave处理。无需交换机特殊支持。
- 优点:发送端自动负载均衡,适应流量变化。
- 缺点:接收端存在单点瓶颈;驱动层实现复杂。
- 故障切换:发送端切换由驱动动态调整,接收端切换需ARP协商。
2.2.7 mode 6 — balance-alb(自适应收发负载均衡)
在mode 5基础上增加了接收端负载均衡,通过ARP协商使不同对端将数据发送到不同slave的MAC地址。
- 优点:收发双向负载均衡,无需交换机支持。
- 缺点:ARP协商增加网络开销;对端设备必须响应ARP。
- 故障切换:收发切换独立进行,逻辑复杂,切换延迟可能不一致。
2.3 Bonding模式选择与切换延迟关系
在DPDK主备切换延迟测试中,模式选择直接影响测试方法和结果解读。下图展示了三种典型模式在链路故障时的切换路径差异。
2.4 内核Bonding配置示例
在Linux系统中,可通过sysfs或ifenslave工具配置Bonding。以下示例展示如何创建mode 1(active-backup)绑定,并设置MII监控间隔为50ms。
# 加载Bonding内核模块,指定模式与监控参数
modprobe bonding mode=1 miimon=50
# 创建bond0接口并绑定两块物理网卡
ip link add bond0 type bond mode 1 miimon 50
ip link set eth0 master bond0
ip link set eth1 master bond0
# 配置bond0 IP地址并启用
ip addr add 192.168.1.100/24 dev bond0
ip link set bond0 up
# 查看当前active slave
cat /sys/class/net/bond0/bonding/active_slave
# 手动触发主备切换(将eth0设为备用)
echo "eth1" > /sys/class/net/bond0/bonding/active_slave
2.5 模式选择对DPDK测试的影响
针对本课程的核心目标——主备切换延迟测试,给出以下模式选择建议:
| 测试目标 | 推荐模式 | 原因 |
|---|---|---|
| 最小切换延迟测量 | mode 1 (active-backup) | 切换逻辑最简单,延迟可预测,便于精确测量 |
| 负载均衡下切换影响 | mode 4 (802.3ad) | LACP协商延迟是主要瓶颈,适合测试长超时场景 |
| 乱序与切换联合测试 | mode 0 (balance-rr) | 切换后可能引发乱序,适合测试应用层容忍度 |
| DPDK PMD兼容性验证 | mode 0/1/2/4 | DPDK Bonding PMD仅支持这四种模式 |