学习笔记之LACP-0806/0807

LACP(Link Aggregation Control Protocol)是链路聚合技术中的一个用来控制的协议。

就目前的学习,链路聚合(Link Aggregation)包含的东西很多,协议被转入IEEE802.1ax之后有三百多页。在百度上找到的资料基本千篇一律,抄的都是一样的。要想深入了解,还得自己看协议,现就目前的学习做一个总结。

在链路聚合(Link Aggregation)中,正如原文中提到的一样:

“The Link Aggregation Control Protocol (LACP) provides a standardized means for exchanging information between Partner Systems on a link to allow their Link Aggregation Control instance to reach agreement on the identity of the LAG to which the link belongs ,move the link to that LAG,and enable its transmission and reception functions in an orferly manner”

总的来说,LACP只管控制将链路聚合在一起,至于其后,怎么向上传输数据,怎么向下分发数据,怎么实现负载均衡等等问题,这些他都不管。

LACP实现数据传输的帧为LACPDU,LACPDU的封装格式为:protocol id | LACPDU | padding octets。所谓protocol ID就是以太网帧格式中的"长度/类型"字段(8位,当值小于1518时表示长度,大于1518时表示类型),就像ARP是0x 0806,IP是0x 0800,LACP的类型为Slow Protocols EtherType(hexadecimal  8809)。

LACPDU结构中具体每个字段的意义,百度上可以搜索到,我不想在这里赘述。我想学习一下,LACP是怎么控制“agree on the LAG”,“move the link to that LAG” ,"enable its transmission and reception functions"

发送LACPDU,是受NTT(Need-To-Transmit)变量来控制的,这个变量的设置有两种方式:周期性的检查,或者是在某些必要做出改变的时候。

按照官方的说法(不好意思我又要po原文了,因为我怕翻译不够准确)“The operation of  the protocol is controlld by a number of state machine,each of which performs a distinct function” 就是把在接收到LACPDU后的数据处理分为几个不同的状态机,每个状态机分别执行不同的功能。

  1. Receive machine(RX):这个状态机从partner那里接受数据,之后记录其中包含的信息,为这个报文标记时间(Short Timeout / Long Timeout),在这个阶段检查链路两方所存储的对方的信息是否相同,如果不同,则置位NTT来发送LACPDU。

  2. Periodic:Periodic Transmission Mechine,这个状态机决定,actor和parter是否需要定期交换信息来对聚合进行监控。

  3. Selection Logic:为这个端口挑选一个合适的即将加入的Aggregator(聚合器)。

  4. Mux machine:根据目前协议的内容,决定将该端口加入到某个聚合器,或者将该端口从某个聚合器删除,或者设置这条链路的收集、分发数据的开关。

  5. Transmit machine:进行LACPDU的输出(受NTT控制)

就上图和协议原文,大致总结如下(如有错误,欢迎指正):

  1. Receive Machine是唯一一个接触了原始报文的人,它在收到报文后,对报文的信息进行处理,然后将partner传来的信息发送各个状态机。
  2. 下一步,有一个periodic的概念,也就是说,系统为了能监视这条链路是否完好,是否能正常工作,会设置一个周期性发送报文检测机制。Fast_periodic_time=1s,Slow_periodic_time=30s,也就是说,periodic这个状态机,啥事都不干,就专注在周期性发LACPDU这件事情上了。这个LACPDU是LACPDU 结构里的state里的第二位设置的0(slow),1(fast)。值得注意的是,这个选择长周期或者短周期是依据对方的LACP里的actor_state状态来决定的,也就是说,周期发送数据的间隔应该依据对方的标准。
  3. 与周期性检测相对应的,当一个LACPDU报文来了之后,记录下关于对方的信息,在正常设置的periodic情况下应该是在规定的时间内进行更新,但是如果因为某些原因,导致接受不到LACPDU报文了,这个与periodic的fast,slow相对应的有一个三倍的最大超时设置。也就是说,当采用Fast_periodic_time=1s时,如果1x3=3s后还没有收到LACPDU,这个时候Receive Machine就发送默认的参数给其他状态机。(这些默认的参数应该会包含一些信息,让其他状态机做出相应的举动)
  4. 接下来有一个逻辑选择的功能selection logic,这一步是必须的,只有为一个端口选择了一个合适的Aggregator,才能把这个端口聚合到其中。也就是说,咱们得走程序,先选择(select),后加入(attach)。
  5. 在选择一个Aggregator后,通过一些细节的条件限制,就进入到了MUX状态,在这个状态里,会把这个Aggregation Port加入到这个Aggregator中,通知会设置NTT使该端口发送数据到partner告诉他们自己的改变。

总结起来一句话,“Aggregation is represented by an Aggregation Port selecting an appropriate Aggregator,and then attaching to that Aggregator”,什么是聚合,聚合就是端口选择一个合适的聚合器,然后增加到这个聚合器中。

注意:

  1. 在交换机本身,都是把自己看做是actor,把对方看做是partner。在报文的设置中也是如此,所以从对方接受到的信息,要看对方的状态,则看这段报文里的actor。(不要与对比系统优先级搞混)
  2. 在各个状态之间改变,都是依靠参数的改变来进行工作的。举个例子,端口能否正常使用,需要使能端口的collect和distribute这两个参数,表示本端口能接收和发送,于此同时需要发送LACPDU给partner告诉对方;再然后partner会向我方发送LACPDU使能它的collect和distribute,只有确认这些信息无误之后,才能实现最后的传输数据通信。

猜你喜欢

转载自blog.csdn.net/dandandean_96/article/details/81453312