链路汇聚控制协议-LACP

好久没写博客了!疫情期间也没法上班,只能在家学习学习,安排了学习lacp,上网查找资料,整理汇总了一下。


以太网链路聚合Eth-Trunk简称链路聚合,通过将多个物理接口捆绑为一个逻辑接口,可以在不进行硬件升级的条件下,达到增加链路带宽的目的。

链路聚合技术主要有以下三个优势:

1.增加带宽

链路聚合接口的最大带宽可以达到各成员接口带宽之和。

2.提高可靠性

当某条活动链路出现故障时,流量可以切换到其他可用的成员链路上,从而提高链路聚合接口的可靠性。

3.负载分担

在一个链路聚合组内,可以实现在各成员活动链路上的负载分担。

 

链路聚合组和链路聚合接口

链路聚合组LAG(Link Aggregation Group)是指将若干条以太链路捆绑在一起所形成的逻辑链路。

每个聚合组唯一对应着一个逻辑接口,这个逻辑接口称之为链路聚合接口或Eth-Trunk接口。链路聚合接口可以作为普通的以太网接口来使用,与普通以太网接口的差别在于:转发的时候链路聚合组需要从成员接口中选择一个或多个接口来进行数据转发

 

成员接口和成员链路

组成Eth-Trunk接口的各个物理接口称为成员接口。成员接口对应的链路称为成员链路。

 

活动接口和非活动接口、活动链路和非活动链路

链路聚合组的成员接口存在活动接口和非活动接口两种。转发数据的接口称为活动接口,不转发数据的接口称为非活动接口。

活动接口对应的链路称为活动链路,非活动接口对应的链路称为非活动链路。

 

活动接口数上限阈值

设置活动接口数上限阈值的目的是在保证带宽的情况下提高网络的可靠性。当前活动接口数目达到上限阈值时,再向Eth-Trunk中添加成员接口,不会增加Eth-Trunk活动接口的数目,超过上限阈值的链路状态将被置为Down,作为备份链路。

例如,有8条无故障链路在一个Eth-Trunk内,每条链路都能提供1G的带宽,现在最多需要5G的带宽,那么上限阈值就可以设为5或者更大的值。其他的链路就自动进入备份状态以提高网络的可靠性。

 

活动接口下限阈值

设置活动接口数下限阈值是为了保证最小带宽,当前活动链路数目小于下限阈值时,Eth-Trunk接口的状态转为Down。

例如,每条物理链路能提供1G的带宽,现在最小需要2G的带宽,那么活动接口数下限阈值必须要大于等于2。

 

链路聚合模式

根据是否启用链路聚合控制协议LACP(Link Aggregation Control Protocol),链路聚合分为手工模式LACP模式

 

链路聚合方式

同板:是指链路聚合时,同一聚合组的成员接口分布在同一单板上。

跨板:是指链路聚合时,同一聚合组的成员接口分布在不同的单板上。

:是指在集群场景下,成员接口分布在集群的各个成员设备上。具体请参见集群环境下的链路聚合。

跨设备:是指E-Trunk基于LACP(单台设备链路聚合的标准)进行了扩展,能够实现多台设备间的链路聚合。

 

手工模式链路聚合

手工模式下,Eth-Trunk的建立、成员接口的加入由手工配置,没有链路聚合控制协议LACP的参与。该模式下所有活动链路都参与数据的转发,平均分担流量。如果某条活动链路故障,链路聚合组自动在剩余的活动链路中平均分担流量。

 

当需要在两个直连设备之间提供一个较大的链路带宽,而其中一端或两端设备都不支持LACP协议时,可以配置手工模式链路聚合。

 

LACP模式链路聚合

链路聚合控制协议LACP(Link Aggregation Control Protocol),是基于IEEE802.3ad标准的一种实现链路动态聚合与解聚合的协议,以供设备根据自身配置自动形成聚合链路并启动聚合链路收发数据,LACP模式就是采用LACP的一种链路聚合模式。聚合链路形成以后,LACP负责维护链路状态,在聚合条件发生变化时,自动调整链路聚合。

 

对比手工模式和LACP模式:

  1. Eth-Trunk的建立方式

手工模式:Eth-Trunk的建立、成员接口的加入由手工配置,没有链路聚合控制协议的参与。

LACP模式:Eth-Trunk的建立是基于LACP协议的,LACP为交换数据的设备提供一种标准的协商方式,以供系统根据自身配置自动形成聚合链路并启动聚合链路收发数据。聚合链路形成以后,负责维护链路状态。在聚合条件发生变化时,自动调整或解散链路聚合。

  1. 设备是否需要支持LACP协议

手工模式:不需要

LACP模式:需要

  1. 数据转发

手工模式:正常情况下,所有链路都是活动链路。所有活动链路均参与数据转发。如果某条活动链路故障,链路聚合组自动在剩余的活动链路中分担流量。

LACP模式:正常情况下,部分链路是活动链路。所有活动链路均参与数据转发。如果某条活动链路故障,链路聚合组自动在非活动链路中选择一条链路作为活动链路,参与数据转发的链路数目不变。

  1. 是否支持跨设备的链路聚合

手工模式:不支持

LACP模式:支持

  1. 检测故障

手工模式:只能检测到同一聚合组内的成员链路有断路等有限故障,但是无法检测到链路断连、错连等故障。

LACP模式:不仅能够检测到同一聚合组内的成员链路有断路等有限故障,还可以检测到链路故障、链路错连等故障。

 

 

 

 

 

 

LACP模式链路聚合

系统LACP优先级

系统LACP优先级是为了区分两端设备优先级的高低而配置的参数。LACP模式下,两端设备所选择的活动接口必须保持一致,否则链路聚合组就无法建立。此时可以使其中一端具有更高的优先级,另一端根据高优先级的一端来选择活动接口即可。系统LACP优先级值越小优先级越高

 

接口LACP优先级

接口LACP优先级是为了区别同一个Eth-Trunk中的不同接口被选为活动接口的优先程度,优先级高的接口将优先被选为活动接口。接口LACP优先级值越小,优先级越高。

 

成员接口间M:N备份

LACP模式链路聚合由LACP确定聚合组中的活动和非活动链路,又称为M:N模式,即M条活动链路与N条备份链路的模式。这种模式提供了更高的链路可靠性,并且可以在M条链路中实现不同方式的负载均衡。

 

例如:两台设备间有M+N条链路,在聚合链路上转发流量时在M条链路上分担负载,即活动链路,不在另外的N条链路转发流量,这N条链路提供备份功能,即备份链路。此时链路的实际带宽为M条链路的总和,但是能提供的最大带宽为M+N条链路的总和。

当M条链路中有一条链路故障时,LACP会从N条备份链路中找出一条优先级高的可用链路替换故障链路。此时链路的实际带宽还是M条链路的总和,但是能提供的最大带宽就变为M+N-1条链路的总和。

这种场景主要应用在只向用户提供M条链路的带宽,同时又希望提供一定的故障保护能力时。当有一条链路出现故障,系统能够自动选择一条优先级最高的可用备份链路变为活动链路。

如果在备份链路中无法找到可用链路,并且目前处于活动状态的链路数目低于配置的活动接口数下限阈值,那么系统将会把聚合接口关闭。

 

LACP模式实现原理

LACP通过链路聚合控制协议数据单元LACPDU(Link Aggregation Control Protocol Data Unit)与对端交互信息,LACPDU报文中包含设备的系统优先级、MAC地址、接口优先级、接口号和操作Key等信息。

 

LACP交互过程

1.在LACP模式的Eth-Trunk中加入成员接口后,两端互相发送LACPDU报文。

2.确定主动端和活动链路。

 

端口状态协商(selected、standby)

在动态汇聚组中,端口可能处于两种状态:Selected 或Standby。Selected 端口和Standby 端口都能收发LACP 协议,但Standby 端口不能转发用户报文。由于设备所能支持的汇聚组中的最大端口数有限制,如果当前的成员端口数量超过了最大端口数的限制,则本端系统和对端系统会进行协商,根据设备ID 优的一端的端口ID 的大小,来决定端口的状态。具体协商步骤如下:

比较设备ID(系统优先级+系统MAC 地址)。先比较系统优先级,如果相同再比较系统MAC 地址。设备ID 小的一端被认为优。

比较端口ID(端口优先级+端口号)。对于设备ID 优的一端的各个端口,首先比较端口优先级,如果优先级相同再比较端口号。端口ID 小的端口Selected 端口,剩余端口为Standby 端口。在一个汇聚组中,处于Selected 状态且端口号最小的端口为汇聚组的主端口,其他处于Selected 状态的端口为汇聚组的成员端口。

 

动态LACP:

动态LACP 模式下,Eth-Trunk 接口的建立,成员接口的加入,活动接口的选择完全由LACP 协议通过协商完成。这就意味着启用了动态LACP 协议的两台直连设备上,不需要创建Eth-Trunk 接口,也不需要指定哪些接口作为聚合组成员接口,两台设备会通过LACP 协商自动完成链路的聚合操作。动态LACP 汇聚是一种系统自动创建/删除的汇聚,不允许用户增加或删除动态LACP 汇聚中的成员端口。只有速率和双工属性相同、连接到同一个设备、有相同基本配置的端口才能被动态汇聚在一起。即使只有一个端口也可以创建动态汇聚,此时为单端口汇聚。动态汇聚中,端口的LACP 协议处于使能状态。

 

LACP报文格式(推荐华为的报文查询工具):

https://support.huawei.com/hedex/pages/EDOC1000105967AZI0130X/07/EDOC1000105967AZI0130X/07/resources/message/cd_feature_lacp_message_format.html?ft=99&id=

目的地址是组播地址:01-80-C2-00-00-02

协议类型:0x8809

报文子类型:0x01(LACP)

Actor tlv

Partner tlv

 

链路聚合控制的相关参数

1.LACP协议如何唯一的标识聚合组:

系统ID(System ID) ,由「系统优先级+系统MAC地址」组成,其中,之所以要有「系统优先级」,是因为LACP协议中,链路聚合两端设备扮演不同角色,有了「系统优先级」,管理员可以通过配置干预角色选举。

2.端口ID(Port ID):

对于参与链路聚合的各个端口,也需要在设备内部唯一标识,端口ID由「端口优先级+端口号」组成,之所以需要「端口优先级」,也是因为涉及端口的不同角色选举

3.聚合ID:

在一个设备上,能进行多组聚合,即有多个Aggregator,为了区分这些Aggregator,给每个Aggregator分配了一个聚合ID(Aggregator ID),为一个16位整数

 

端口Key

聚合端口中有两种key:一种是操作key,一种是管理key。

操作key是为形成聚合当前使用的key,管理key是允许管理者对key值进行操作的key。

 

操作Key

在动态LACP聚合中,只有操作KEY相同的端口才能属于同一个聚合组,你可以认为操作KEY相同的端口,其属性相同。

在手工聚合和静态LACP聚合中,虽然同一个聚合组中的端口的操作KEY不一定相同(因端口由管理员手工加入),但是Selected端口的操作KEY一定相同。

操作Key 是在端口汇聚时,系统根据端口的配置(即速率、双工、基本配置、管理Key)生成的一个配置组合。

1.对于手工汇聚组和静态汇聚组,Selected 的端口有相同的操作Key。

2.静态汇聚端口在使能LACP 后,端口的管理Key 与汇聚组ID 相同。

3.动态汇聚端口在使能LACP 协议后,其管理Key 预设为零。

4.对于动态汇聚组,同组成员一定有相同的操作Key。

 

六要素

1.四个要素:

一个聚合组来说,如果需要进行唯一标识的话,需要包含四个元素:本端系统ID、本端操作KEY、对端系统ID、对端操作KEY

2.两个要素:

系统中并不是所有聚合组都包含多个链路,为了区分只包含单个链路的聚合组的情况,还需要额外加上两个元素:本端端口ID和对端端口ID。

3.结论:

这六个元素唯一确定了一个聚合组,称为聚合组ID(Link Aggregation Group ID,LAG ID)。如果一个聚合组中包含多个链路,那么LAG ID中,本端端口ID和对端端口ID为0,相当于只用四元组就可以刻画包含多个链路的聚合组。

 

端口类型

1.Selectet 和未选中:

参与流量转发的端口称为Selected端口,否则称为Unselected端口

2.主端口(master端口)

处于Selected状态且端口号最小的端口称为主端口(Master Port),可以形象的认为,聚合组中的所有端口被汇聚到了主端口,主端口在逻辑上代表了整个聚合组,对于GVRP/GMRP 、STP/RSTP /MSTP等二层协议,都只从主端口发送,其他数据报文则在各个Selected端口间分担。

3.补充:

由于Selected与Unselected端口在实际状态下的选取受到硬件的影响,所以不同厂家产品的具体表现形式可能有差异

 

LACP绑定端口

判断将一个端口绑定到Aggregator的关键依据是LAG ID,判断方法是:

1.Aggregator的操作KEY和端口的操作KEY相同。

2.已经绑定到这个Aggregator的其他端口和这个端口有相同的链路LAG ID,即与Aggregator关联的LAG ID必须和端口的LAG ID相同。

3.「LAG ID」则指的是聚合组ID( Link Aggregation Group ID),「聚合ID」则指的是Aggregator ID. (LAG ID就是指属于同一个聚合中的所有port 包括selected 和Standby,对于手工和静态比较好理解,就是指用户所指定的所有port,对于动态汇聚,指所有port)

 

端口离开Aggregator

1.如果Actor端口在一定时间内(使用long timeout时是90s,使用short timeout是3秒)收不到Partner端口发送的LACP报文,就宣告自己处于超时状态,如果在下一个short timeout时间(3秒)内还没有收到Partner的报文,就会离开这个Aggregator。

2.如果从Partner端口收到的LACP报文,发现LAG ID发生了改变(系统ID或操作KEY发生了变化,系统ID改变说明连接到的对端设备发生了变化,操作KEY发生了变化可能是对端端口的属性发生了变化),这时端口也会离开这个Aggregator。

3.还有一种导致端口离开Aggregator的情况:Actor端口本身的属性发生了变化,设备通过动态操作KEY功能给它分配的操作KEY发生变化,导致和Aggregator的LAG ID不匹配,从而离开聚合组。

 

Active模式和Passive模式

1.Active模式下,端口正常周期性的发送LACP报文;

2.Passive模式下,端口平时不发送LACP报文,不过,一旦收到了对端的LACP报文,就会正常发送LACP报文了。

 

LACP其他功能:

LACP抢占

使能LACP抢占功能后,聚合组会始终保持高优先级的接口作为活动接口的状态。以下两种情况需要使能LACP抢占功能:

Port1接口出现故障而后又恢复了正常。当接口Port1出现故障时被Port3所取代,如果在Eth-Trunk接口下未使能LACP抢占功能,则故障恢复时Port1将处于备份状态;如果使能了LACP抢占功能,当Port1故障恢复时,由于接口优先级比Port3高,将重新成为活动接口,Port3再次成为备份接口。

如果希望Port3接口替换Port1、Port2中的一个接口成为活动接口,可以使能了LACP抢占功能,并配置Port3的接口LACP优先级较高。如果没有使能LACP抢占功能,即使将备份接口的优先级调整为高于当前活动接口的优先级,系统也不会重新选择活动接口。

 

LACP抢占延时

抢占延时是LACP抢占发生时,处于备用状态的链路将会等待一段时间后再切换到转发状态。配置抢占延时是为了避免由于某些链路状态频繁变化而导致Eth-Trunk数据传输不稳定的情况。

Port1由于链路故障切换为非活动接口,此后该链路又恢复了正常。若系统使能了LACP抢占功能并配置了抢占延时,Port1重新切换回活动状态就需要经过抢占延时的时间。

 

活动链路与非活动链路切换

LACP模式链路聚合组两端设备中任何一端检测到以下事件,都会触发聚合组的链路切换:

链路Down事件。

以太网OAM检测到链路失效。

LACP协议发现链路故障。

接口不可用。

在使能了LACP抢占功能的前提下,更改备份接口的优先级高于当前活动接口的优先级。

当满足上述切换条件其中之一时,按照如下步骤进行切换:

关闭故障链路。

从N条备份链路中选择优先级最高的链路接替活动链路中的故障链路。

优先级最高的备份链路转为活动状态并转发数据,完成切换。

 

链路聚合负载分担模式:

在使用Eth-Trunk转发数据时,由于聚合组两端设备之间有多条物理链路,可能会产生同一数据流的第一个数据帧在一条物理链路上传输,而第二个数据帧在另外一条物理链路上传输的情况。这样一来同一数据流的第二个数据帧就有可能比第一个数据帧先到达对端设备,从而产生接收数据包乱序的情况。

 

为了避免这种情况的发生,Eth-Trunk采用逐流负载分担的机制,把数据帧中的地址通过HASH算法生成HASH-KEY值,然后根据这个数值在Eth-Trunk转发表中寻找对应的出接口,不同的MAC或IP地址HASH得出的HASH-KEY值不同,从而出接口也就不同,这样既保证了同一数据流的帧在同一条物理链路转发,又实现了流量在聚合组内各物理链路上的负载分担。逐流负载分担能保证包的顺序,但不能保证带宽利用率。

 

转发原理:

Eth-Trunk位于MAC与LLC子层之间,属于数据链路层。

Eth-Trunk模块内部维护一张转发表,这张表由以下两项组成。

HASH-KEY值

HASH-KEY值是根据数据包的MAC地址或IP地址等,经HASH算法计算得出。

接口号

Eth-Trunk转发表表项分布和设备每个Eth-Trunk支持加入的成员接口数量相关,不同的HASH-KEY值对应不同的出接口。

 

Eth-Trunk模块根据转发表转发数据帧的过程如下:

Eth-Trunk模块从MAC子层接收到一个数据帧后,根据负载分担方式提取数据帧的源MAC地址/IP地址或目的MAC地址/IP地址。

 

根据HASH算法进行计算,得到HASH-KEY值。

Eth-Trunk模块根据HASH-KEY值在转发表中查找对应的接口,把数据帧从该接口发送出去。

 

用户可以根据流量模型设置不同的负载分担方式,流量中某个参数变化越频繁,选择对应负载分担方式的流量就越均衡。例如,在网络中,如果报文的IP地址变化较频繁,那么选择基于目的IP地址、源IP地址或源IP和目的IP地址的负载分担模式更有利于流量在各物理链路间合理的负载分担;如果报文的MAC地址变化较频繁,IP地址比较固定,那么选择基于目的MAC地址、源MAC地址或源MAC和目的MAC地址的负载分担模式更有利于流量在各物理链路间合理的负载分担。

 

配置负载分担方式时,请注意:

负载分担方式只在流量的出接口上生效,如果发现各入接口的流量不均衡,请修改上行出接口的负载分担方式。

尽量将数据流通过负载分担在所有活动链路上传输,避免数据流仅在一条链路上传输,造成流量拥堵,影响业务正常运行。

例如,数据报文的目的MAC和IP地址只有一个,则应选择根据报文的源MAC和IP地址进行负载分担,如果选择根据报文的目的MAC和IP地址进行负载分担则会造成流量只在一条链路上传输,造成流量拥堵。

 

参考资料:华为支持官网

                    LACP技术白皮书

你可能感兴趣的:(网络通信/协议)