找回密码
 立即注册
  • QQ空间
  • 回复
  • 收藏

linux核心知识之虚拟网络设备bond

admin 2019-9-11 21:11 100人围观 Linux相关



导读:Bond技术即bonding,它是Linux Kernel的一个模块,能将多块物理网卡绑定到一块虚拟网卡上,并通过修改网口驱动让多块网卡看起来是一个单独的以太网接口设备(对外只有一个IP),一般用于解决网卡的单点故障或网卡负载较高的场景。一、Bond简介Bond技术即bonding,它是Linux Kernel的一个模块,能将多块物理网卡绑定到一块虚拟网卡上,并通过修改网口驱动让多块网卡看起来是一个单独的以太网接口设备,外界看到的只有一个IP,一般用于解决网卡的单点故障或网卡负载较高的场景。二、Bond技术原理Bond技术需要物理网卡开启混杂模式才能正常工作。在混杂模式下,网卡不只接收目的MAC地址为自身的以太网帧,而是接收网络上所有的数据帧。为了实现多块网卡的协同工作,Bond将自己的MAC地址复制到各个物理网卡上,让所有的网卡共享同一个MAC地址。这个方式就要求所有的网卡都要支持BIOS,这样才能够让操作系统将MAC地址写到网卡上。对于单物理网卡的Bond网卡来说,Bond网卡的MAC地址和物理网卡的物理地址是一致的。而对于多物理网卡的Bond网卡而言,其中一块物理网卡会被设置为 Master,其他的网卡则都是Slave,Bond网卡的MAC地址取自标志为Master的物理网卡,然后再将这个MAC地址复制到其他物理网卡上。所以在安装网卡时,我们需要指定Bond网卡,以及Bond网卡所对应的标志为Master的物理网卡。三、网卡Bond模式网卡Bond模式总共有7种,最常用的是负载模式(模式0)和主备模式(模式1),在网络流量较大的场景下推荐使用负载模式,而在可靠性要求较高的场景下则推荐使用主备模式。接下来将对这7种模式进行简单的介绍以及优缺点对比。1)模式0此模式使用轮询策略,即顺序的在每一个被bond的网卡上发送数据包,这种模式提供负载均衡和容错能力。Bond0可以保证bond虚拟网卡和被bond的两张或多张物理网卡拥有相同的MAC地址,其中bond虚拟网卡的MAC地址是其中一张物理网卡的MAC地址,而bond虚拟网卡的MAC地址是根据bond自己实现的一个算法来选择的。在bond0模式下,如果一个连接或者会话的数据包从不同的网口发出,途中再经过不同的链路,则在客户端很有可能会出现数据包无序到达的现象,而无序到达的数据包一般需要重新发送,这样网络的吞吐量就会下降。另外,如果做bond0的两张或多张网卡接到了同一交换机上,还需对交换机配置聚合模式。2)模式1此模式使用主备策略,在所有做bond1的物理网卡中,同一时刻只有一张网卡被激活,当且仅当活动网卡失效时才会激活其他的网卡。这种模式下做bond的两张或多张网卡的MAC地址和Bond虚拟网卡的MAC地址相同,而Bond的MAC地址是Bond创建启动后活动网卡的MAC地址。这种模式要求主被网卡能快速的切换,即当主网卡出现故障后能迅速地切换至备用网卡。切换过程中,上层的应用几乎不受影响,因为Bond的驱动程序会临时接管上层应用的数据包,存放至数据缓冲区,等待备用网卡启动后再发送出去。但是如果切换时间过长,则会引起缓冲区的溢出,导致丢包。3)模式2此模式的默认选择策略是:选择网卡的序号=(源MAC地址 XOR 目标MAC地址) % Slave网卡(从网卡)的数量。其他的传输策略可以通过xmit_hash_policy配置项指定。4)模式3模式3使用广播策略,数据包会被广播至所有Slave网卡进行传送。5)模式4模式4使用动态链接聚合策略,启动时会创建一个聚合组,所有Slave网卡共享同样的速率和双工设定,需要交换机支持IEEE 802.3ad动态链路聚合模式。支持使用ethtool工具获取每个slave网卡的速率和双工设定。6)模式5模式5基于每个slave网卡的速率选择传输网卡,支持使用ethtool工具获取每个slave网卡的速率。7)模式6模式6包含了bond5模式,同时还支持对IPV4流量接收时的负载均衡策略,而且不需要任何交换机的支持,支持只是用ethtool获取每个Slave的速率,要求底层驱动支持设置某个网卡设备的硬件地址。介绍完这7种模式之后,我们简单对这7种模式的优缺点进行简单的对比,具体的内容请参考以下图1所示。


图1 Bond网卡7种模式优缺点对比

推荐阅读:
linux核心知识之macvlan
linux核心知识之ipvlan
linux核心知识之虚拟网络设备TUN
linux核心知识之虚拟网络设备veth
linux核心知识之虚拟网络设备bridge

看完本文有收获?请分享给更多的人

在技术成长的路上,让我们一起进步吧




----------------------------------------------------------------------------------------------------------------------
我们尊重原创,也注重分享,文章来源于微信公众号:码农之屋,建议关注公众号查看原文。如若侵权请联系qter@qter.org。
----------------------------------------------------------------------------------------------------------------------

鲜花

握手

雷人

路过

鸡蛋

yafeilinux和他的朋友们微信公众号二维码

微信公众号

专注于Qt嵌入式Linux开发等。扫一扫立即关注。

Qt开源社区官方QQ群二维码

QQ交流群

欢迎加入QQ群大家庭,一起讨论学习!

我有话说......