链路聚合简介
以太网链路聚合Eth-Trunk简称链路聚合,它通过将多条以太网物理链路捆绑在一起成为一条逻辑链路,从而实现增加链路带宽的目的。同时,这些捆绑在一起的链路通过相互间的动态备份,可以有效地提高链路的可靠性。
目的:
随着网络规模不断扩大,用户对骨干链路的带宽和可靠性提出越来越高的要求。在传统技术中,常用更换高速率的接口板或更换支持高速率接口板的设备的方式来增加带宽,但这种方案需要付出高额的费用,而且不够灵活。
采用链路聚合技术可以在不进行硬件升级的条件下,通过将多个物理接口捆绑为一个逻辑接口,达到增加链路带宽的目的。在实现增大带宽目的的同时,链路聚合采用备份链路的机制,可以有效的提高设备之间链路的可靠性。
链路聚合主要有以下三个优势:
- 增加带宽链路聚合接口的最大带宽可以达到各成员接口带宽之和。
- 提高可靠性当某条活动链路出现故障时,流量可以切换到其他可用的成员链路上,从而提高链路聚合接口的可靠性。
- 负载分担在一个链路聚合组内,可以实现在各成员活动链路上的负载分担。
原理描述
基本概念:
如在两个设备之间通过三条以太网物理链路相连,将这三条链路捆绑在一起,就成为了一条逻辑链路。这条逻辑链路的最大带宽等于原先三条以太网物理链路的带宽总和,从而达到了增加链路带宽的目的;同时,这三条以太网物理链路相互备份,有效地提高了链路的可靠性。
链路聚合的一些基本概念:
- 链路聚合组和链路聚合接口链路聚合组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模式两种
- 两种链路聚合模式比较:
维度手工模式LACP模式定义Eth-Trunk的建立、成员接口的加入由手工配置,没有链路聚合控制协议的参与。Eth-Trunk的建立是基于LACP协议的,LACP为交换数据的设备提供一种标准的协商方式,以供系统根据自身配置自动形成聚合链路并启动聚合链路收发数据。聚合链路形成以后,负责维护链路状态。在聚合条件发生变化时,自动调整或解散链路聚合。设备是否需要支持LACP协议不需要需要数据转发一般情况下,所有链路都是活动链路。所有活动链路均参与数据转发。如果某条活动链路故障,链路聚合组自动在剩余的活动链路中分担流量。一般情况下,部分链路是活动链路。所有活动链路均参与数据转发。如果某条活动链路故障,链路聚合组自动在非活动链路中选择一条链路作为活动链路,参与数据转发的链路数目不变。是否支持跨设备的链路聚合不支持支持检测故障只能检测到同一聚合组内的成员链路有断路等有限故障,但是无法检测到链路故障、链路错连等故障。不仅能够检测到同一聚合组内的成员链路有断路等有限故障,还可以检测到链路故障、链路错连等故障。
- 设备支持的链路聚合方式:
- 同一设备:是指链路聚合时,同一聚合组的成员接口分布在同一设备。
- 堆叠设备:是指在堆叠场景下,成员接口分部在堆叠的各个成员设备上。
- 跨设备:是指E-Trunk基于LACP(单台设备链路聚合的标准)进行了扩展,能够实现多台设备间的链路聚合。
- 手工模式链路聚合:
根据是否启用链路聚合控制协议LACP,链路聚合分为手工模式和LACP模式。
手工模式下,Eth-Trunk的建立、成员接口的加入由手工配置,没有链路聚合控制协议LACP的参与。当需要在两个直连设备之间提供一个较大的链路带宽而设备又不支持LACP协议时,可以使用手工模式。手工模式可以实现增加带宽、提高可靠性和负载分担的目的。
- LACP模式链路聚合:
作为链路聚合技术,手工负载分担模式Eth-Trunk可以完成多个物理接口聚合成一个Eth-Trunk口来提高带宽,同时能够检测到同一聚合组内的成员链路有断路等有限故障,但是无法检测到链路层故障、链路错连等故障。
为了提高Eth-Trunk的容错性,并且能提供备份功能,保证成员链路的高可靠性,出现了链路聚合控制协议LACP(Link Aggregation Control Protocol),LACP模式就是采用LACP的一种链路聚合模式。
LACP为交换数据的设备提供一种标准的协商方式,以供设备根据自身配置自动形成聚合链路并启动聚合链路收发数据。聚合链路形成以后,LACP负责维护链路状态,在聚合条件发生变化时,自动调整或解散链路聚合。
- 基本概念:
- 系统LACP优先级系统LACP优先级是为了区分两端设备优先级的高低而配置的参数。LACP模式下,两端设备所选择的活动接口必须保持一致,否则链路聚合组就无法建立。此时可以使其中一端具有更高的优先级,另一端根据高优先级的一端来选择活动接口即可。系统LACP优先级值越小优先级越高。
- 接口LACP优先级接口LACP优先级是为了区别同一个Eth-Trunk中的不同接口被选为活动接口的优先程度,优先级高的接口将优先被选为活动接口。接口LACP优先级值越小,优先级越高。
- 成员接口间M:N备份LACP模式链路聚合由LACP确定聚合组中的活动和非活动链路,又称为M:N模式,即M条活动链路与N条备份链路的模式。这种模式提供了更高的链路可靠性,并且可以在M条链路中实现不同方式的负载均衡。
- LACP模式实现原理:
基于IEEE802.3ad标准的LACP是一种实现链路动态聚合与解聚合的协议。LACP通过链路聚合控制协议数据单元LACPDU(Link Aggregation Control Protocol Data Unit)与对端交互信息。
在LACP模式的Eth-Trunk中加入成员接口后,这些接口将通过发送LACPDU向对端通告自己的系统优先级、mac地址、接口优先级、接口号和操作Key等信息。对端接收到这些信息后,将这些信息与自身接口所保存的信息比较,用以选择能够聚合的接口,双方对哪些接口能够成为活动接口达成一致,确定活动链路。
- LACPDU报文:
报文字段说明:
字段长度说明Destination Address6字节目的MAC地址,是一个组播地址(01-80-C2-00-00-02)Source Address6字节源MAC地址,发送端口的MAC地址Length/Type2字节协议类型:0x8809Subtype1字节报文子类型:0x01,说明是LACP报文Version Number1字节协议版本号:0x01TLV_type1字节0x00代表Terminator字段0x01代表Actor字段0x02代表Partner字段0x03代表Collector字段Actor_Information_Length1字节actor信息字段长度,为20字节Actor_Port2字节端口号,根据算法生成,由接口所在的槽位号、子卡号和端口号决定Actor_State1字节本端状态信息:LACP_Activity:代表链路所在的聚合组参与LACP协商的方式。主动的LACP被编码为1,主动方式下会主动发送LACPDU报文给对方,被动方式不会主动发送协商报文,除非收到协商报文才会参与。LACP_Timeout:代表链路接收LACPDU报文的周期,有两种,快周期1s和慢周期30s,超时时间为周期的3倍。短超时被编码为1,长超时被编码为0。Aggregation:标识该链路能否被聚合组聚合。如果编码为0,该链路被认为是独立的,不能被聚合,即,这个链路只能作为一个个体链路运行。Synchronization:代表该链路是否已被分配到一个正确的链路聚合组,如果该链路已经关联了一个兼容的聚合器,那么该链路聚合组的识别与系统ID和被发送的运行Key信息是一致的。编码为0,代表链路当前不在正确的聚合里。Collecting:帧的收集使能位,假如编码为1,表示在这个链路上进来的帧的收集是明确使能的;即收集当前被使能,并且不期望在没有管理变化或接收协议信息变化的情况下被禁止。其它情况下这个值编码为0。Distributing:帧的分配使能位,假如编码为0,意味着在这个链路上的外出帧的分配被明确禁止,并且不期望在没有管理变化或接收协议信息变化的情况下被使能。其它情况下这个值编码为1。Default:诊断调试时使用,编码为1,代表接收到的对端的信息是管理配置的。假如编码为0,正在使用的运行伙伴信息在接收到的LACPDU里。该值不被正常LACP协议使用,仅用于诊断协议问题。Expired:诊断调试时使用,编码为1,代表本端的接收机是处于EXPIRED超时状态;假如编码为0,本端接收状态机处于正常状态。该值不被正常LACP协议使用,仅用于诊断协议问题。Actor_System_Priority2字节本端系统优先级,可以设置,默认情况下为32768Actor_System6字节系统ID,本端系统的MAC地址Actor_key2字节端口KEY值,系统根据端口的配置生成,是端口能否成为聚合组中的一员的关 键因素,影响Key值得因素有trunk ID、接口的速率和双工模式Actor_Port_Priority2字节接口优先级,可以配置,默认为0x8000Reserved3字节保留字段,可用于功能调试以及扩展Partner_Information_Length1字节Partner信息字段长度。Partner字段代表了链路接口接收到对端的系统信息、接口信息和状态信息,与actor字段含义一致。在协商最开始未收到对端信息时,partner字段填充0,接收到对端信息后会把收到的对端信息补充到partner字段当中。Partner_Port2字节对端端口号Partner_State2字节对端状态信息Partner_System_Priority2字节对端系统优先级Partner_System6字节对端系统ID,对端系统的MAC地址Partner_key2字节对端端口KEY值Partner_Port_Priority2字节对端接口优先级Reserved2字节保留字段Collector_Information_Length1字节Collector信息字段长度:0x10CollectorMaxDelay2字节最大延时:默认情况下为0xffffReserved12字节保留字段Terminator_Length1字节Terminator信息字段长度:0x00Reserved50字节保留字段,全置0FCS4字节用于帧内后续字节差错的循环冗余检验(也称为FCS或帧检验序列)。
抓包示例:
报文字段说明:
Destination Address6字节目的MAC地址,是一个组播地址(01-80-C2-00-00-02)Source Address6字节源MAC地址,发送端口的MAC地址Length/Type2字节协议类型:0x8809Subtype1字节报文子类型:0x01,说明是LACP报文Version Number1字节协议版本号:0x01TLV_type1字节0x00代表Terminator字段0x01代表Actor字段0x02代表Partner字段0x03代表Collector字段Actor_Information_Length1字节actor信息字段长度,为20字节Actor_Port2字节端口号,根据算法生成,由接口所在的槽位号、子卡号和端口号决定Actor_State1字节本端状态信息:LACP_Activity:代表链路所在的聚合组参与LACP协商的方式。主动的LACP被编码为1,主动方式下会主动发送LACPDU报文给对方,被动方式不会主动发送协商报文,除非收到协商报文才会参与。LACP_Timeout:代表链路接收LACPDU报文的周期,有两种,快周期1s和慢周期30s,超时时间为周期的3倍。短超时被编码为1,长超时被编码为0。Aggregation:标识该链路能否被聚合组聚合。如果编码为0,该链路被认为是独立的,不能被聚合,即,这个链路只能作为一个个体链路运行。Synchronization:代表该链路是否已被分配到一个正确的链路聚合组,如果该链路已经关联了一个兼容的聚合器,那么该链路聚合组的识别与系统ID和被发送的运行Key信息是一致的。编码为0,代表链路当前不在正确的聚合里。Collecting:帧的收集使能位,假如编码为1,表示在这个链路上进来的帧的收集是明确使能的;即收集当前被使能,并且不期望在没有管理变化或接收协议信息变化的情况下被禁止。其它情况下这个值编码为0。Distributing:帧的分配使能位,假如编码为0,意味着在这个链路上的外出帧的分配被明确禁止,并且不期望在没有管理变化或接收协议信息变化的情况下被使能。其它情况下这个值编码为1。Default:诊断调试时使用,编码为1,代表接收到的对端的信息是管理配置的。假如编码为0,正在使用的运行伙伴信息在接收到的LACPDU里。该值不被正常LACP协议使用,仅用于诊断协议问题。Expired:诊断调试时使用,编码为1,代表本端的接收机是处于EXPIRED超时状态;假如编码为0,本端接收状态机处于正常状态。该值不被正常LACP协议使用,仅用于诊断协议问题。Actor_System_Priority2字节本端系统优先级,可以设置,默认情况下为32768Actor_System6字节系统ID,本端系统的MAC地址Actor_key2字节端口KEY值,系统根据端口的配置生成,是端口能否成为聚合组中的一员的关 键因素,影响Key值得因素有trunk ID、接口的速率和双工模式Actor_Port_Priority2字节接口优先级,可以配置,默认为0x8000Reserved3字节保留字段,可用于功能调试以及扩展Partner_Information_Length1字节Partner信息字段长度。Partner字段代表了链路接口接收到对端的系统信息、接口信息和状态信息,与actor字段含义一致。在协商最开始未收到对端信息时,partner字段填充0,接收到对端信息后会把收到的对端信息补充到partner字段当中。Partner_Port2字节对端端口号Partner_State2字节对端状态信息Partner_System_Priority2字节对端系统优先级Partner_System6字节对端系统ID,对端系统的MAC地址Partner_key2字节对端端口KEY值Partner_Port_Priority2字节对端接口优先级Reserved2字节保留字段Collector_Information_Length1字节Collector信息字段长度:0x10CollectorMaxDelay2字节最大延时:默认情况下为0xffffReserved12字节保留字段Terminator_Length1字节Terminator信息字段长度:0x00Reserved50字节保留字段,全置0FCS4字节用于帧内后续字节差错的循环冗余检验(也称为FCS或帧检验序列)。
抓包示例:
抓包示例:
图:LACP报文抓包示例
LACP模式Eth-Trunk建立过程如下:
1. 两端互相发送LACPDU报文。
如下图所示,在DeviceA和DeviceB上创建Eth-Trunk并配置为LACP模式,然后向Eth-Trunk中手工加入成员接口。此时成员接口上便启用了LACP协议,两端互发LACPDU报文。
2. 确定主动端和活动链路。
如下图所示,两端设备均会收到对端发来的LACPDU报文。以DeviceB为例,当DeviceB收到DeviceA发送的报文时,DeviceB会查看并记录对端信息,然后比较系统优先级字段,如果DeviceA的系统优先级高于本端的系统优先级,则确定DeviceA为LACP主动端。如果DeviceA和DeviceB的系统优先级相同,比较两端设备的MAC地址,确定MAC地址小的一端为LACP主动端。
选出主动端后,两端都会以主动端的接口优先级来选择活动接口,两端设备选择了一致的活动接口,活动链路组便可以建立起来,从这些活动链路中以负载分担的方式转发数据。
3. LACP抢占:
使能LACP抢占功能后,聚合组会始终保持高优先级的接口作为活动接口的状态。
图:抢占功能演示
以下两种情况需要使能LAXP的抢占功能:
- Port1接口出现故障而后又恢复了正常。当接口Port1出现故障时被Port3所取代,如果在Eth-Trunk接口下未使能LACP抢占功能,则故障恢复时Port1将处于备份状态;如果使能了LACP抢占功能,当Port1故障恢复时,由于接口优先级比Port3高,将重新成为活动接口,Port3再次成为备份接口。
- 如果希望Port3接口替换Port1、Port2中的一个接口成为活动接口,可以使能了LACP抢占功能,并配置Port3的接口LACP优先级较高。如果没有使能LACP抢占功能,即使将备份接口的优先级调整为高于当前活动接口的优先级,系统也不会进行重新选择活动接口的过程,不切换活动接口。
LACP抢占延时:
抢占延时是LACP抢占发生时,处于备用状态的链路将会等待一段时间后再切换到转发状态。配置抢占延时是为了避免由于某些链路状态频繁变化而导致Eth-Trunk数据传输不稳定的情况。
活动链路与非活动链路的切换:
LACP模式链路聚合组两端设备中任何一端检测到以下事件,都会触发聚合组的链路切换:
- 链路Down事件。
- 以太网OAM检测到链路失效。
- LACP协议发现链路故障。
- 接口不可用。
- 在使能了LACP抢占功能的前提下,更改备份接口的优先级高于当前活动接口的优先级。
当满足上述切换条件其中之一时,按照如下步骤进行切换:
- 关闭故障链路。
- 从N条备份链路中选择优先级最高的链路接替活动链路中的故障链路。
- 优先级最高的备份链路转为活动状态并转发数据,完成切换。
链路聚合负载分担方式:
背景:
数据流是指一组具有某个或某些相同属性的数据包。这些属性有源MAC地址、目的MAC地址、源IP地址、目的IP地址、TCP/UDP的源端口号、TCP/UDP的目的端口号等。
对于负载分担,可以分为逐包的负载分担和逐流的负载分担。
- 逐包的负载分担在使用Eth-Trunk转发数据时,由于聚合组两端设备之间有多条物理链路,就会产生同一数据流的第一个数据帧在一条物理链路上传输,而第二个数据帧在另外一条物理链路上传输的情况。这样一来同一数据流的第二个数据帧就有可能比第一个数据帧先到达对端设备,从而产生接收数据包乱序的情况。
- 逐流的负载分担这种机制把数据帧中的地址通过HASH算法生成HASH-KEY值,然后根据这个数值在Eth-Trunk转发表中寻找对应的出接口,不同的MAC或IP地址HASH得出的HASH-KEY值不同,从而出接口也就不同,这样既保证了同一数据流的帧在同一条物理链路转发,又实现了流量在聚合组内各物理链路上的负载分担。逐流负载分担能保证包的顺序,但不能保证带宽利用率。
注:目前AR系列路由器仅支持逐流的负载分担。
转发原理:
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值在转发表中查找对应的接口,把数据帧从该接口发送出去。
负载分担方式:
为了避免数据包乱序情况的发生,Eth-Trunk采用逐流负载分担的机制,其中如何转发数据则由于选择不同的负载分担方式而有所差别。
负载分担的方式主要包括以下几种,用户可以根据具体应用选择不同的负载分担方式。
- 根据报文的源MAC地址进行负载分担
- 根据报文的目的MAC地址进行负载分担
- 根据报文的源IP地址进行负载分担
- 根据报文的目的IP地址进行负载分担
- 根据报文的源MAC地址和目的MAC地址进行负载分担
- 根据报文的源IP地址和目的IP地址进行负载分担
配置负载分担方式时,请注意:
- 负载分担方式只在流量的出接口上生效,如果发现各入接口的流量不均衡,请修改上行出接口的负载分担方式。
- 尽量将数据流通过负载分担在所有活动链路上传输,避免数据流仅在一条链路上传输,造成流量拥堵,影响业务正常运行。
例如,数据报文的目的MAC和IP地址只有一个,则应选择根据报文的源MAC和IP地址进行负载分担,如果选择根据报文的目的MAC和IP地址进行负载分担则会造成流量只在一条链路上传输,造成流量拥堵。
配置注意事项:
链路聚合前:
- 成员接口不能配置某些业务,例如成员接口不能修改接口类型、不能配置静态MAC地址。
- Eth-Trunk接口不能嵌套,即Eth-Trunk接口的成员接口不能是Eth-Trunk接口。
- 一个Eth-Trunk接口中的成员接口必须是以太网类型和速率相同的接口。
以太网类型和速率不同的接口不能加入同一个Eth-Trunk接口,如GE接口和FE接口不能加入同一个Eth-Trunk接口,GE电接口和GE光接口不能加入同一个Eth-Trunk接口。
- 如果本端设备接口加入了Eth-Trunk,与该接口直连的对端接口也必须加入Eth-Trunk,两端才能正常通信。
- 两台设备对接时需要保证两端设备上链路聚合的模式一致。
链路聚合后:
- 一个以太网接口只能加入到一个Eth-Trunk接口,如果需要加入其它Eth-Trunk接口,必须先退出原来的Eth-Trunk接口。
- 当成员接口加入Eth-Trunk后,学习MAC地址或ARP地址时是按照Eth-Trunk来学习的,而不是按照成员接口来学习。
- 删除聚合组时需要先删除聚合组中的成员接口。
缺省配置:
参数缺省值链路聚合模式手工负载分担模式活动接口数上限阈值8活动接口数下限阈值1系统LACP优先级32768接口LACP优先级32768LACP抢占去使能LACP抢占等待时间30s接收LACP报文超时时间90s
链路聚合配置命令行
配置手工负载分担模式:
如下图,交换机1和2都有VLAN10,20.通过在两个交换机之间配置链路聚合提高链路带宽,以及增加一定的可靠性。
图:配置手工负载模式
配置命令行:
两个交换机配置相同
[SW1]dis current-configuration
#
sysname SW1
#
vlan batch 10 20
#
interface Eth-Trunk1
port link-type trunk
port trunk allow-pass vlan 10 20
#
interface GigabitEthe.NET0/0/1
eth-trunk 1 //加入Eth-trunk接口
#
interface GigabitEthernet0/0/2
eth-trunk 1 //加入Eth-trunk接口
#
interface GigabitEthernet0/0/3
eth-trunk 1 //加入Eth-trunk接口
#
执行:display eth-trunk 1,查看配置结果:
图:手工负载模式配置情况
配置LACP模式链路聚合:
如下图,在两台设备上配置LACP模式链路聚合组,提高两设备之间的带宽与可靠性,具体要求如下:
- 两条活动链路具有负载分担的能力。
- 两设备间的链路具有一条冗余备份链路,当活动链路出现故障链路时,备份链路替代故障链路,保持数据传输的可靠性。
图:LACP模式