什么是LACP?LACP是如何工作的?为什么要用LACP?
什么是LACP?
LACP(Link Aggregation Control Protocol,链路聚合控制协议)是一种基于IEEE802.3ad标准的实现链路动态聚合与解聚合的协议,它是链路聚合中常用的一种协议。链路聚合组中启用了LACP协议的成员端口通过发送LACPDU报文进行交互,双方对哪些端口能够发送和接收报文达成一致,确定承担业务流量的链路。此外,当聚合条件发生变化时,如某个链路发生故障,LACP模式会自动调整聚合组中的链路,组内其他可用成员链路接替故障链路维持负载平衡。这样在不进行硬件升级的情况下,可以增加设备之间的逻辑带宽,提高网络的可靠性。
采用LACP聚合的双方(分别称为Actor和Partner)通过称之为LACPDU(LACP Data Unit)的协议报文来交互本端(Actor)和对端(Partner)的聚合信息,以对整个链路聚合的认识达成一致。协议报文主要包含以下信息:本端和对端系统优先级、本端和对端系统ID、本端和对端的端口操作key、本端和对端的端口优先级、本端和对端的端口ID、本端和对端的端口状态。聚合的双方就根据这些信息,按照一定的选择算法选择合适的链路,控制聚合的状态。被选中的成员链路可以正常转发流量,而未被选中的成员链路将被置为阻塞状态,不能转发任何流量。聚合链路的总带宽等于被选中的成员链路的带宽之和,并且聚合链路上的流量会按照一定的规则分担到各个选中的成员链路上,由于LACPDU是周期性交互,即聚合的双方每隔一段时间便互发一次协议报文,所以当有选中成员链路因为某种原因不能工作时,链路聚合可以很快的感知到,并重设链路状态,置该链路为阻塞,流量被重分配给其他选中成员链路。这样就实现了增加带宽,链路动态备份的功能。
LACP是如何工作的?
LACP的工作过程主要包括以下几个步骤:
端口信息通告:
启用LACP协议的端口通过发送LACPDU(Link Aggregation Control Protocol Data Unit,链路聚合控制协议数据单元)报文与对端交互信息。LACPDU报文中包含设备的系统优先级、MAC地址、接口优先级、接口号和操作Key等信息。
端口选择:
对端接收到LACPDU后,将其中的信息与其他接口所收到的信息进行比较,以选择能够处于selected状态的接口。双方对接口处于selected状态达成一致,从而确定哪些端口能够发送和接收报文,即确定承担业务流量的链路。
链路聚合:
LACP协议通过LACPDU与对端交互信息,使能某端口的LACP协议后,该端口将通过发送LACPDU向对端通告自己的系统优先级、系统MAC、端口优先级、端口号和操作Key。如果发现链路另一端的设备也启用了LACP,则两者能够发现它们之间的多条链路,并将它们合并成单条逻辑链路,即链路聚合组(LAG,Link Aggregation Group)。
模式配置:
LACP可以配置为两种模式中的一种:Active(主动模式)或Passive(被动模式)。在Active模式下,LACP主动在配置的链路上发送Frame;在Passive模式下,LACP的反应是“speak when spoken to”,即仅当被询问时才发送Frame。
链路维护:
聚合链路形成以后,LACP负责维护链路状态。在聚合条件发生变化时(如某个链路发生故障),LACP会自动调整聚合组中的链路,组内其他可用成员链路接替故障链路维持负载平衡。这样可以在不进行硬件升级的情况下,增加设备之间的逻辑带宽,提高网络的可靠性。
负载分担:
在使用Eth-Trunk(以太网链路聚合)转发数据时,LACP采用逐流负载分担的机制,把数据帧中的地址通过HASH算法生成HASH-KEY值,然后根据这个数值在Eth-Trunk转发表中寻找对应的出接口。不同的MAC或IP地址HASH得出的HASH-KEY值不同,从而出接口也就不同,这样既保证了同一数据流的帧在同一条物理链路转发,又实现了流量在聚合组内各物理链路上的负载分担。
为什么要用LACP?
LACP模式对数据传输更加稳定和可靠
手工模式下,所有链路都是活动链路,所有活动链路均参与数据转发,平均分担流量。如果某条活动链路故障,链路聚合组自动在剩余的活动链路中平均分担流量。
LACP模式下,由LACP确定聚合组中的活动和非活动链路,又称为M:N模式,即M条活动链路与N条备份链路的模式。这种模式提供了更高的链路可靠性,并且可以在M条链路中实现不同方式的负载均衡。
如下图所示,两台设备间有M+N条链路,在聚合链路上转发流量时在M条链路上分担负载,即活动链路,不在另外的N条链路转发流量,这N条链路提供备份功能,即备份链路。此时链路的实际带宽为M条链路的总和,但是能提供的**带宽为M+N条链路的总和。当M条链路中有一条链路故障时,LACP会从N条备份链路中找出一条优先级高的可用链路替换故障链路。此时链路的实际带宽还是M条链路的总和,但是能提供的**带宽就变为M+N-1条链路的总和。
LACP模式对聚合链路组的故障检测更加准确和有效
手工模式只能检测到同一聚合组内的成员链路有断路等有限故障,LACP模式不仅能够检测到同一聚合组内的成员链路有断路等有限故障,还可以检测到链路故障、链路错连等故障。
如下图所示,DeviceA与DeviceB之间创建Eth-Trunk,需要将DeviceA上的四个接口与DeviceB捆绑成一个Eth-Trunk。由于错将DeviceA上的一个接口与DeviceC相连,这将会导致DeviceA向DeviceB传输数据时可能会将本应该发到DeviceB的数据发送到DeviceC上。
手工模式的Eth-trunk不能及时检测到该故障,如果在DeviceA和DeviceB上都启用LACP协议,经过协商后,Eth-Trunk就会选择正确连接的链路作为活动链路来转发数据,从而DeviceA发送的数据能够正确到达DeviceB。