bonding的源代码分析.docxVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多

1.目的

本文档结合相关内核代码和对Linux2.6.9内核中Bonding模块的三种主要工作模式的工作原理和流程。在配置Bond模块时,除了资料[2],本文档也有一定的参考价值。

2.内容

本文档包含下列内容:

*Bonding模块工作流程综述。(第3节)

*Bonding链路状态监控机制(mii模式、arp模式)描述。(第4节)

*Bonding模块三种主要工作模式:balance-rr、active-backup和broadcast相关代码分析。(第5

节)

*Bonding模块关键数据结构和函数的代码分析。(第5节)

如果想了解bonding模块的原理和工作流程,请阅读3、4节,如果想进一步分析bonding模块的代

码,请阅读5节。

3.Bonding模块工作流程综述

Bonding模块本质上是一个虚拟的网卡驱动(networkdevicedriver),只不过并没有真实的物理网卡与之对应,而是由这个虚拟网卡去“管辖”一系列的真实的物理网卡,所以它的代码结构和一般网卡驱动的代码结构非常类似,这是共性;除此之外,它还有自己的一些特性功能,例如特别的链路状态

监控机制,绑定/解除绑定等。

1.物理网卡的活动状态和链路状态:

在bonding模块中为每一个被绑定的物理网卡定义了两种活动状态和四种链路状态:注意,这里的链路状态和实际网卡真实的链路状态(是否故障、是否有网线连接)没有直接的关系,虽然bonding模块通过MII或者ARP侦测到实际网卡故障时也会改变自定义的链路状态值(例如从BOND_LINK_UP切换到BOND_LINK_FAIL随后切换到BOND_LINK_DOWN状态),但是概念上应该把这两类链路状态区分开。在本文档随后的内容中,除非特别指出,“链路状态”都指bonding模块

自定义的链路状态。

活动状态:

*BOND_STATE_ACTIVE:处于该状态的网卡是潜在的发送数据包的候选者

*BOND_STATE_BACKUP:处于该状态的网卡在选择发送数据的网卡时被排除

链路状态:

*BOND_LINK_UP:上线状态(处于该状态的网卡是是潜在的发送数据包的候选者)

*BONDLINKDOWN:故障状态

*BONDLINKFAIL:网卡出现故障,向状态BONDLINKDOWN切换中

*BOND_LINK_BACK:网卡恢复,向状态BOND_LINK_UP切换中

一个网卡必须活动状态为BOND_STATE_ACTIVE并且链路状态为BOND_LINK_UP,才有可能作为发送数据包的候选者,注意,这里所说的数据包并不包含ARP请求,在使用ARP链路状态监控时,

一个处于BOND_LINK_BACK状态的网卡也可能发送ARP请求。

bonding模块的所有工作模式可以分为两类:多主型工作模式和主备型工作模式,balance-rr和broadcast属于多主型工作模式而active-backup属于主备型工作模式。(balance-xor、自适应传输负载均衡模式(balance-tlb)和自适应负载均衡模式(balance-alb)也属于多主型工作模式,IEEE802.3ad

动态链路聚合模式(802.3ad)属于主备型工作模式,在本文档中不加以讨论)

在多主型工作模式中,如果物理网卡不出现故障,所有的物理网卡都处于BOND_STATE_ACTIVE和BOND_LINK_UP的状态下,参与数据的收发,此时:如果工作在balance-rr模式中轮流向各个网卡发送数据,curr_active_slave字段(见5.1.3)指向前次发送数据(不包含ARP请求)的物理网卡,该指针每次发送过数据后都会切换到下一个物理网卡;在broadcast模式中向所有网卡发送数据,

curr_active_slave字段除非网卡有故障发生不会切换

在主备型工作模式中,如果物理网卡不出现故障,只有一块网卡(活动网卡)处于BOND_STATE_ACTIVE和BOND_LINK_UP的状态下,负责数据的收发,而其他网卡(后备网卡)处于BOND_STATE_BACKUP和BOND_LINK_DOWN状态下,此时curr_active_slave字段指向当

前的活动网卡。

如果工作在active-backup模式下,可以指定一个物理网卡作为主网卡(primitiveinterface),如果主网卡可用,就把主网卡作为当前活动网卡,否则在其他的可用网卡中选取一块网卡作为当前

文档评论(0)

tttt1 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档