25.Linux 聚合链路与软件网桥
Linux 聚合链路与软件网桥
聚合链路(Team)
概念
将多个物理网卡(NIC)逻辑绑定为一个接口,实现:
- 故障转移(高可用)
- 更高吞吐量(负载均衡)
特点
- 模块化设计,性能更优
- 扩展性强
NIC:Network Interface Controller(网络接口控制器)
不同聚合模式下的 MAC 地址行为
1. 主备模式 (activebackup)
- 对外 MAC
聚合接口(如bond0
或team0
)使用主网卡(Active Port)的 MAC 地址。 - 故障切换时
当主网卡故障,备网卡接管时会 沿用原聚合接口的 MAC 地址(用户无感知)。 - 优势
外部设备(如交换机)的 ARP 表无需更新,网络连续性最佳。
2. 负载均衡模式 (loadbalance, balance-xor, 802.3ad)
- 对外 MAC
聚合接口使用 虚拟 MAC 地址(通常为首个成员网卡的 MAC)。 - 内部转发
- 出向流量:源 MAC 始终为聚合接口的虚拟 MAC(无论从哪个物理口发出)。
- 入向流量:目的 MAC 匹配聚合接口的虚拟 MAC,由内核分发到各成员网卡。
- 流量分配逻辑
通过哈希函数计算 {源MAC + 目的MAC} 的组合值,决定使用哪个物理端口。
3. 广播模式 (broadcast)
- 所有成员网卡 保持原始 MAC 地址。
- 相同数据包从所有物理口发出(源 MAC 各不相同)。
4. 轮询模式 (roundrobin)
- 行为类似负载均衡模式:
聚合接口使用虚拟 MAC,物理网卡发送时 改写源 MAC 为聚合接口的 MAC。
配置聚合链路(网络组队)
开始前添加两个网卡(网络适配器)
1.创建组接口
[root@xieyuhui2 ~]# nmcli connection add con-name team0 ifname team0 type team config '{"runner":{"name":"activebackup"}}'
2.给组接口配置ip
[root@xieyuhui2 ~]# nmcli connection modify team0 ipv4.addresses 192.168.200.10/24 ipv4.method manual connection.autoconnect yes
3.将ens36,ens37接口加入到team0中
[root@xieyuhui2 ~]# nmcli connection add con-name team0-ens36 ifname ens36 type team-slave master team0
[root@xieyuhui2 ~]# nmcli connection add con-name team0-ens37 ifname ens37 type team-slave master team0
4.激活组接口
[root@xieyuhui2 ~]# nmcli connection up team0
查看详细信息
能够看到ens36 ,ens37和team0的mac地址是一样的
查看team0的详细信息
[root@xieyuhui2 ~]# teamdctl team0 state
激活的端口为ens36
我们断开ens36
[root@xieyuhui2 ~]# nmcli connection down team0-ens36
能够看到ens36与ens37和team0的mac地址不相同,而这时激活的是ens37的端口,因此知道聚合链路是哪个端口先加入到组中,则使用那个端口及其mac地址,而断开端口后,新的端口激活,所以mac地址也改变,成员网卡(如 ens36,ens37)在加入聚合链路后,其 MAC 地址被聚合接口覆盖
从聚合链路移除后,成员网卡自动恢复原始 MAC。
如果其中一个网卡出现故障,另外一个依旧能使用
软件网桥
Linux 软件网桥(Software Bridge)是工作在数据链路层(L2)的虚拟交换机,通过内核模块实现 MAC 地址学习、数据包转发和网络隔离,是虚拟化、容器网络和复杂网络架构的核心组件。
核心功能
功能 | 说明 |
---|---|
MAC 地址学习 | 动态构建转发表,记录 MAC 地址与端口的映射关系 |
二层转发 | 基于 FDB 表精确转发单播流量,减少广播风暴 |
广播/泛洪 | 对未知目标 MAC 或广播包,向所有端口转发(除源端口) |
网络隔离 | 不同网桥形成独立广播域,隔离流量(类似物理交换机 VLAN) |
协议支持 | 支持 STP(防环)、VLAN 标记、IGMP Snooping(优化组播) |
配置软件网桥
创建软件网桥
[root@xieyuhui3 ~]# nmcli connection add con-name bridge0 ifname bridge0 type bridge
给软件网桥添加ip
[root@xieyuhui3 ~]# nmcli connection modify bridge0 ipv4.addresses 192.168.200.30/24 ipv4.method manual connection.autoconnect yes
将ens36,37接口连接至软件网桥bridge0
[root@xieyuhui3 ~]# nmcli connection add con-name bridge0-ens36 ifname ens36 type bridge-slave master bridge0
[root@xieyuhui3 ~]# nmcli connection add con-name bridge0-ens37 ifname ens37 type bridge-slave master bridge0
激活软件网桥bridge0
[root@xieyuhui3 ~]# nmcli connection up bridge0
开启网络转发功能能够进行测试
[root@xieyuhui3 ~]# vim /etc/sysctl.conf net.ipv4.ip_forward =1
[root@xieyuhui3 ~]# sysctl -p
net.ipv4.ip_forward = 1
查看网络详细信息
[root@xieyuhui3 ~]# ip a
能够看到软件网桥的ip地址ens36相同,再看软件网桥的详细情况
发现选用mac地址是根据stp(生成树协议)来决定的,软件网桥会根据添加端口的mac地址大小来决定自己的mac地址,越小优先级越高