在存储系统中为了提高后端设备的吞吐量,往往需要采用多网卡绑定技术。例如,后端存储最大能够提供300MB/s的吞吐量,因此需要采用3块1Gps的网卡并发传输才可以达到峰值性能。那么,从研发的角度来看如何实现多网卡绑定呢?这里对提高吞吐量用途的多网卡绑定技术进行深入分析。
多网卡绑定一方面能够提高网络吞吐量,另一方面也可以增强网络高可用。这里对高可用应用的多网卡绑定技术不做讨论。从软件的角度来看,多网卡绑定实际上只需要提供一个额外的bond驱动程序即可,通过该虚拟网卡驱动程序可以将实际多块网卡屏蔽,对TCP/IP协议层而言只存在一个Bond网卡。在Bond驱动程序中实现网络流量的负载平衡(load balance),将一个网络请求重定位到不同的网卡(NIC)上,以此来提高总体网络的性能。多网卡绑定的软件层次架构如下图所示:

考虑一下,为了绑定多块网卡,其技术难点在于什么地方?网络交换机是通过物理地址进行端口路由的,对于不支持IEEE802.3ab协议的普通交换机而言,其只能连接不同物理地址的网卡,否则交换机将会无法正常工作。每个网络适配器具备一个IP地址,而每个IP地址又通过ARP协议和一个MAC地址绑定在一起。由此分析,在没有交换机的配合下,我们很难实现想象中完美的多网卡绑定通信模型:

如果ARP协议能够支持将一个IP地址映射到多个MAC地址,那么在Bond驱动层我们完全可以实现上图所示的多网卡绑定通信模型。在实际IP网络中,为了达到上述绑定效果,需要交换机的802.3ab协议支持,通过交换机实现round robin方式的网卡绑定,纯软件方法无法做到。基于802.3ab协议的多网卡绑定如下图所示:

在802.3ab的支持下,Server端所有网卡的MAC地址全部配置成一个,例如MAC-A,然后在交换机端将这些端口聚合起来。交换机在接收到数据报文之后会轮询这些端口将数据报文发送给Bond驱动,Bond驱动想发送数据的时候同样通过轮询方法将数据报文交给不同网卡进行传输。这种方法可以对Client端进行透明,从整体架构上来说比较简单,唯一缺点是需要交换机的支持。个人认为对于存储系统而言,这种方案是目前网卡绑定的最佳方式。
除了交换机支持的解决方案之外,当然我们也可以采用纯软件的方法,只不过这种绑定在有些应用中有所局限。一种比较简单的绑定思想是只对Transmit进行绑定(Linux Bond5 Mode)。该绑定模型如下图所示:

在这种模型中,Client向Server发送ARP请求,Server将Bond适配器的MAC地址告诉给Client。Bond适配器驱动程序会选择一个Slave-NIC的MAC地址作为自己的MAC地址。例如,Client-B向Server发送ARP请求,Server会将MAC-C地址告诉给Client-B。因此,Client端发送的数据报文会全部被MAC-C地址所在的NIC接收。换句话说,所有Client了解到Server的MAC地址都是MAC-C,Client看不到Server端其他NIC的MAC地址。在Server端发送数据报文的时候,Server端封装的Source-Address都是Bond适配器配置的MAC地址,目的地址是Client NIC所在的MAC地址。在数据发送的时候,Bond驱动程序会根据一定算法将发送报文均匀分配到所有NIC上,由于NIC驱动不会更改以太网报文中的内容,通过这种方式,Bond驱动可以充分利用所有网卡的物理带宽。这种方法实现简单,Bond驱动程序不需要截获传输报文的任何数据,只需要选择网卡进行数据传输即可。由于Client只知道一个网卡的物理地址,所以无法实现多网卡的并发数据接收,只能实现并发数据发送。对于只关注数据发送吞吐量的应用,这种解决方案还是非常有效的。
在存储应用中,需要考虑双向数据传输的吞吐量,上述解决方案存在数据接收瓶颈。那么如何才能使得Server进行高效的双向数据传输呢?其关键问题在于需要让Client知道不同网卡的MAC地址,上述解决方案中,所有的Client只知道一个MAC地址。为了达到双向传输的效果,Bond驱动程序需要截取ARP报文和数据报文,并且修改MAC地址。这种网卡绑定的数据传输模型(Linux Bond6 Mode)如下图所示:

在Client向Server发送ARP请求的时候,Bond驱动程序会截取返回给Client的ARP应答报文,并且选取一个Slave-NIC的MAC地址,用这个MAC地址修改ARP应答报文。通过这种方式,Server将一块网卡分配给一个Client,每个Client分配得到不同NIC的MAC地址,从而Client可以通过不同的网卡实现数据传输。在多Client的情况下,实现Server端并发数据接收。在Server端数据发送的时候,Bond驱动程序需要截取发送数据报文,并且修改以太网报文中的源MAC地址(bond_alb_xmit函数实现了Bond的数据发送功能),然后通过算法选择一块NIC发送数据,实现并发数据传输(数据报文发送并不固定在一块网卡上,上图的演示模型只是一个特例)。这种方案和上述方案最大的不同是Bond驱动程序需要截获ARP和正常的数据报文,并进行处理。从Client而言,每个Client的数据发送可以绑定到一个单独的NIC卡上。
这里对多网卡的绑定技术进行了一些总结,这些技术还是值得慢慢品味的。

转载于:https://blog.51cto.com/alanwu/1095566

深入浅出多网卡绑定技术相关推荐

  1. 网卡绑定技术linux c,Linux多网卡绑定

    为什么要使用多网卡绑定技术呢?我们知道如果使用一块网卡进行网络数据传输时其速度是有限的,即使是千兆网卡,其速度也是有限制的,我们为了提高带宽,我们可以将多块物理网卡绑定成一块逻辑网卡,这样网卡的速率就 ...

  2. Linux篇 | 多网卡绑定技术 binding 和 网络组nmcli

    多网卡绑定 "Bonding" 和 "nmcli的网络组Network Teaming" 二者实现的功能一样,但从某种角度,网络组要比Bonding的技术要好 ...

  3. Linux下双网卡绑定技术实现负载均衡和失效保护

    保持服务器的高可用性是企业级 IT 环境的重要因素.其中最重要的一点是服务器网络连接的高可用性.网卡(NIC)绑定技术有助于保证高可用性特性并提供其它优势以提高网络性能.       我们在这介绍的L ...

  4. Linux下双网卡绑定技术实现负载均衡和失效保护 bond

    对于bonding的网络负载均衡是我们在文件服务器中常用到的,比如把三块网卡,当做一块来用,解决一个IP地址,流量过大,服务器网络压力过大的问题.对于文件服务器来说,比如NFS或SAMBA文件服务器, ...

  5. Linux学习之CentOS(二十九)--Linux网卡高级命令、IP别名及多网卡绑定

    本篇随笔将详细讲解Linux系统的网卡高级命令.IP别名以及Linux下多网卡绑定的知识 一.网卡高级命令 在之前的一篇随笔里Linux学习之CentOS(九)--Linux系统的网络环境配置,详细讲 ...

  6. 设置双网卡mic linux,linux双网卡绑定为逻辑网卡

    网卡bond是通过多张网卡绑定为一个逻辑网卡,实现本地网卡的冗余,带宽扩容和负载均衡,在生产场景中是一种常用的技术. 生产环境服务器为:DELL 网卡为:光纤 bond需要修改涉及的网卡配置文件 /e ...

  7. Centos7 / RHEL 7 双网卡绑定

    1. 简要     双网卡绑定技术在centos7中使用了teaming技术,而在rhel6/centos7中使用的是bonding技术,     在centos7中双网卡绑定既能使用teaming也 ...

  8. linux服务器双网卡链路聚合,服务器多网卡绑定与交换机链路聚合对接探讨

    <服务器多网卡绑定与交换机链路聚合对接探讨>由会员分享,可在线阅读,更多相关<服务器多网卡绑定与交换机链路聚合对接探讨(9页珍藏版)>请在人人文库网上搜索. 1.服务器多网卡绑 ...

  9. linux 双网卡bond命令,Linux下bond双网卡绑定(示例代码)

    bond,是一种双网卡绑定技术.即将多块物理网卡绑定成一个逻辑网卡,并实现网卡冗余.流量均衡等的一种可靠性强且高可用技术. 七种bond模式: 一.mod=0即banlance-rr(平衡轮循环策略) ...

最新文章

  1. “计算机艺术之父”、现代计算机技术先驱查理斯·苏黎去世,享年99岁!
  2. 释疑のSAP库位的创建
  3. boost::convert模块实现默认转换器fail失败的测试程序
  4. odoo xml样式_自定义Odoo的界面样式
  5. 扫一扫 移动端_移动端手机APP 身份证识别 手机扫一扫离线识别
  6. 时间序列异常检测机制的研究
  7. Python精通-Python集合操作详解
  8. 1.7 什么时候该改变开发_测试集和指标
  9. 将SPS中被FrontPage修改过的页面重置为Ghost Page
  10. Spread for Windows Forms高级主题(4)---自定义用户交互
  11. 解决Eclipse报错:the file dx.jar was not loaded from the SDK
  12. 【ArcGIS|空间分析】数据交互(Google Earth与ArcGIS,ENVI与ArcGIS)
  13. Linux中文件目录写法
  14. TIPS-国库信息处理系统
  15. XSS 扫描器成长记
  16. 秦时明月--动漫人物介绍
  17. 假如大数据组件中的动物都变成神奇宝贝,那会变成什么样?(大数据的组件动漫化)
  18. C语言 玫瑰花代码实现
  19. FCPX视频剪辑Final Cut Pro X v10.5.4中文版 Macbook支持Silicon M1 附详细安装教程
  20. 电缆公司如何面对企业改革?MES系统打造智能工厂

热门文章

  1. 1小时内注册公司 政务中心104个窗口同厅办公
  2. Git 通过源码编译安装 2.12.2 遇到的问题及解决
  3. 使用oauth2.0自动获取用户信息
  4. WD与循环 组合数学
  5. 磨刀不误砍柴工-git新手教程
  6. 软考考前冲刺第九,十章多媒体基础知识知识产权基础知识
  7. No.1010_第七次团队会议
  8. Elasticsearch未授权访问+Kibana任意操作
  9. 基于约束的SQL攻击
  10. mysql怎么刷题_面试刷题mysql1:一条sql语句是如何经过mysql的体系结构的?