linux网卡bond的几种模式(数据流原理)
linux的网卡bond:将两个物理网卡(或port)映射为具有同一个逻辑ip的接口。bond技术跟交换机之间的端口汇聚以及san技术中常用的存储多路径(multiputh)类似。
作用:增加带宽,例如两个前兆的一台网卡通过bond后可以将本地host的单个ip的带宽增加两倍。
增加可用性,做HA保护,单个网口down后ip地址仍然可用。
bond接触很久了,最初的项目中心机房的业务服务器跟数据库服务都是设置bond的。目前的项目主要用bond来增加数据带宽。
网上有非常详细的英文资料介绍:http://www.linuxfoundation.org/collaborate/workgroups/networking/bonding#Requirements_for_specific_modes
这里总结下几种bond模式的区别:
mode 1 active-backup
最简单的主从热备方式,当前只使用bond中的一个物理网口,如果当前主网口down,则立刻启用备用网口。
mode 2 banlance-xor
最简单的负荷分担模式,当前所有的物理端口均可用,bond驱动简单计算hash值选择数据包的物理端口。规则是取source跟destination的异或值,然后除以bond中物理网口个数取余,结果就是选中的网口的编号。
mode 4 802.3ad
类似mode2,负荷分担模式,当前所有的物理端口均可用。跟mode2的区别在端口选择策略。mod4采用802.3ad协议规定的xmit_hash_policy。
要求:ethtool能够识别物理端口的速度和是否双工。
switch支持802.3ad协议规定的动态链路聚合。
mode 5 banlance-tlb
端口负载选择策略比mode 2智能一些,在做端口hash时考虑了本地不同的bond port速度。不像mode 4一样需要switch的特殊支持。
要求:ethtool能够识别物理端口的速度和是否双工。
说明:
mode 2跟mode 5均不需要switch的特殊支持。此种模式下,bond驱动修改了底层的arp协议栈。当配置bond的host主机 回复arp的reply消息时,bond驱动会把arp reply消息中的本地mac地址,修改为bond驱动指定的物理端口的mac。 对于同一个局域网的两个不同的外部主机host2和host3,他们看到配置bond的host1的mac地址可能是不同的。如果配置bond的host1主机跟局域网外部通信,那么所有的mac层包的destination均相同,这种情况采用mode 2、4 、5都会导致只有一个物理端口做收发包。
mode 0 banlance-rr
负荷分担模式,唯一一种模式,可以将同一个tcp socket以stripe方式负荷分担到所有物理网口。bond驱动将同一个socket上packet,以rond-robin的方式依次选择不同的物理端口发送出去,类似于raid 0。需要switch支持trunking或etherchannel。
这种方式可能导致tcp报文的乱序发送和接收,因此需要调整host主机的tcp重传的系统参数:net.ipv4.tcp_reordering 。
mode 0保证了host主机tcp发包的stripe方式,但是host在收报时是否可以做到stripe,要看switch是否支持tcp的stripe。很多交换机在一个ether channel发包时,仅仅是根据tcp/udp的端口号取个hash值去选择物理端口,这样同一个tcp的socket报文每次只能发到固定物理端口上。此时,mode 0的stripe仅仅是单向而不是双工的。
说明:
etherchannel其实就是讲多个物理端口映射为同一个逻辑的物理端口,cisco switch的一项技术。802.3ad则是etherchannel的一个公开的标准,是同一个种技术。
————————————————
版权声明:本文为CSDN博主「百科全书学派」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/load2006/article/details/10001835