以太网链路聚合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协议 | 不需要 | 需要 |
数据转发 | 一般情况下,所有链路都是活动链路。所有活动链路均参与数据转发。如果某条活动链路故障,链路聚合组自动在剩余的活动链路中分担流量。 | 一般情况下,部分链路是活动链路。所有活动链路均参与数据转发。如果某条活动链路故障,链路聚合组自动在非活动链路中选择一条链路作为活动链路,参与数据转发的链路数目不变。 |
是否支持跨设备的链路聚合 | 不支持 | 支持 |
检测故障 | 只能检测到同一聚合组内的成员链路有断路等有限故障,但是无法检测到链路故障、链路错连等故障。 | 不仅能够检测到同一聚合组内的成员链路有断路等有限故障,还可以检测到链路故障、链路错连等故障。 |
根据是否启用链路聚合控制协议LACP,链路聚合分为手工模式和LACP模式。
手工模式下,Eth-Trunk的建立、成员接口的加入由手工配置,没有链路聚合控制协议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条链路中实现不同方式的负载均衡。
基于IEEE802.3ad标准的LACP是一种实现链路动态聚合与解聚合的协议。LACP通过链路聚合控制协议数据单元LACPDU(Link Aggregation Control Protocol Data Unit)与对端交互信息。
在LACP模式的Eth-Trunk中加入成员接口后,这些接口将通过发送LACPDU向对端通告自己的系统优先级、MAC地址、接口优先级、接口号和操作Key等信息。对端接收到这些信息后,将这些信息与自身接口所保存的信息比较,用以选择能够聚合的接口,双方对哪些接口能够成为活动接口达成一致,确定活动链路。
报文字段说明:
字段 | 长度 | 说明 |
---|---|---|
Destination Address | 6字节 | 目的MAC地址,是一个组播地址(01-80-C2-00-00-02) |
Source Address | 6字节 | 源MAC地址,发送端口的MAC地址 |
Length/Type | 2字节 | 协议类型:0x8809 |
Subtype | 1字节 | 报文子类型:0x01,说明是LACP报文 |
Version Number | 1字节 | 协议版本号:0x01 |
TLV_type | 1字节 | 0x00代表Terminator字段0x01代表Actor字段0x02代表Partner字段0x03代表Collector字段 |
Actor_Information_Length | 1字节 | actor信息字段长度,为20字节 |
Actor_Port | 2字节 | 端口号,根据算法生成,由接口所在的槽位号、子卡号和端口号决定 |
Actor_State | 1字节 | 本端状态信息: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_Priority | 2字节 | 本端系统优先级,可以设置,默认情况下为32768 |
Actor_System | 6字节 | 系统ID,本端系统的MAC地址 |
Actor_key | 2字节 | 端口KEY值,系统根据端口的配置生成,是端口能否成为聚合组中的一员的关 键因素,影响Key值得因素有trunk ID、接口的速率和双工模式 |
Actor_Port_Priority | 2字节 | 接口优先级,可以配置,默认为0x8000 |
Reserved | 3字节 | 保留字段,可用于功能调试以及扩展 |
Partner_Information_Length | 1字节 | Partner信息字段长度。Partner字段代表了链路接口接收到对端的系统信息、接口信息和状态信息,与actor字段含义一致。在协商最开始未收到对端信息时,partner字段填充0,接收到对端信息后会把收到的对端信息补充到partner字段当中。 |
Partner_Port | 2字节 | 对端端口号 |
Partner_State | 2字节 | 对端状态信息 |
Partner_System_Priority | 2字节 | 对端系统优先级 |
Partner_System | 6字节 | 对端系统ID,对端系统的MAC地址 |
Partner_key | 2字节 | 对端端口KEY值 |
Partner_Port_Priority | 2字节 | 对端接口优先级 |
Reserved | 2字节 | 保留字段 |
Collector_Information_Length | 1字节 | Collector信息字段长度:0x10 |
CollectorMaxDelay | 2字节 | 最大延时:默认情况下为0xffff |
Reserved | 12字节 | 保留字段 |
Terminator_Length | 1字节 | Terminator信息字段长度:0x00 |
Reserved | 50字节 | 保留字段,全置0 |
FCS | 4字节 | 用于帧内后续字节差错的循环冗余检验(也称为FCS或帧检验序列)。 |
抓包示例:
两端互相发送LACPDU报文。
如下图所示,在DeviceA和DeviceB上创建Eth-Trunk并配置为LACP模式,然后向Eth-Trunk中手工加入成员接口。此时成员接口上便启用了LACP协议,两端互发LACPDU报文。
确定主动端和活动链路。
如下图所示,两端设备均会收到对端发来的LACPDU报文。以DeviceB为例,当DeviceB收到DeviceA发送的报文时,DeviceB会查看并记录对端信息,然后比较系统优先级字段,如果DeviceA的系统优先级高于本端的系统优先级,则确定DeviceA为LACP主动端。如果DeviceA和DeviceB的系统优先级相同,比较两端设备的MAC地址,确定MAC地址小的一端为LACP主动端。
选出主动端后,两端都会以主动端的接口优先级来选择活动接口,两端设备选择了一致的活动接口,活动链路组便可以建立起来,从这些活动链路中以负载分担的方式转发数据。
LACP抢占:
使能LACP抢占功能后,聚合组会始终保持高优先级的接口作为活动接口的状态。
抢占延时是LACP抢占发生时,处于备用状态的链路将会等待一段时间后再切换到转发状态。配置抢占延时是为了避免由于某些链路状态频繁变化而导致Eth-Trunk数据传输不稳定的情况。
LACP模式链路聚合组两端设备中任何一端检测到以下事件,都会触发聚合组的链路切换:
当满足上述切换条件其中之一时,按照如下步骤进行切换:
数据流是指一组具有某个或某些相同属性的数据包。这些属性有源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和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,两端才能正常通信。
两台设备对接时需要保证两端设备上链路聚合的模式一致。
参数 | 缺省值 |
---|---|
链路聚合模式 | 手工负载分担模式 |
活动接口数上限阈值 | 8 |
活动接口数下限阈值 | 1 |
系统LACP优先级 | 32768 |
接口LACP优先级 | 32768 |
LACP抢占 | 去使能 |
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 GigabitEthernet0/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模式链路聚合组,提高两设备之间的带宽与可靠性,具体要求如下:
[SW3]dis current-configuration
#
sysname SW3
#
lacp priority 100
//配置系统LACP优先级
#
interface Eth-Trunk1
//创建eth-trunk接口
mode lacp-static
//配置链路聚合模式为LACP模式
least active-linknumber 2
//配置链路聚合活动接口数下限阈值
max bandwidth-affected-linknumber 3
//配置带宽计算的端口数量
load-balance dst-ip
//配置负载分担方式
lacp timeout fast
//配置当前接口接收LACP协议报文的超时时间
lacp preempt enable
//使能当前Eth-Trunk接口的LACP抢占功能
max active-linknumber 2
//配置链路聚合活动接口数上限阈值
lacp preempt delay 20
//配置当前Eth-Trunk接口的LACP抢占等待时间
//配置为fast,对端发送LACP报文的周期为1秒。
//配置为slow,对端发送LACP报文的周期为30秒。
//LACP协议报文的超时时间为LACP报文发送周期的3倍
lacp selected speed
//更改LACP模式Eth-Trunk依据接口速率来选择活动接口
#
interface GigabitEthernet0/0/1
eth-trunk 1 //加入Eth-trunk接口
lacp priority 100
//配置当前接口的LACP优先级
#
interface GigabitEthernet0/0/2
eth-trunk 1
#
interface GigabitEthernet0/0/3
eth-trunk 1
#
配置结果:
trunkport interface gi 0/0/1 to 0/0/3
//将多个接口同时加上eth-turnk接口中
display eth-trunk [ trunk-id [ interface interface-type interface-number | verbose ] ]
//查看Eth-Trunk接口的配置信息
display lacp statistics eth-trunk 1
//查看LACP模式下LACP报文收发统计信息
display interface eth-trunk 1
//查看eth-trunk接口的状态信息
display trunkmembership eth-trunk 1
//查看eth-trunk的成员接口信息
reset lacp statistics eth-trunk 1
//清除LACP收发报文的统计信息
reset lacp error packet statistics
//清除LACP错误报文的统计信息
参考文档:华为HedEx文档