以太网链路聚合基础知识

技术背景

随着业务的发展和园区规模扩大,用户对于带宽、可靠性要求越来越高,传统的升级设备提高网络带宽、部署冗余链路并辅以生成树协议实现高可靠的解决方案存在灵活度低、故障恢复时间长、配置复杂等问题。通过链路聚合技术与堆叠、集群技术实现网络带宽提升与高可靠性保障。

可靠性

网络可靠性指的是当设备或者链路出现单点或多点故障时保证网络服务不间断的能力。 网络的可靠性可以从单板、设备、链路多个层面实现

单板可靠性

核心就是主控板和交换网板,线路板上就是我们常见到的各个接口。

单板可靠性体现在配置多个主控板和交换网板,单个槽位的主控板、交换网板损坏并不影响设备的正常运行。而线路板故障的话,该板卡上的接口也会故障无法使用。

设备可靠性

设备可靠性主要是使用冗余设备,采用主备模式,当其中一台设备故障时,另一台设备可以立马切换角色并接替原来设备的工作。

链路可靠性

同样也是主备思路,在设备之间部署多条物理路线,同时为了防止环路,搭配生成树协议,保留一条链路,其他链路称为备份链路。

链路聚合

在链路可靠性中,设备之间存在多条链路,但由于 STP 的防止环路,导致实际上只有一条链路工作,设备之间链路带宽并没有提高。 以太网链路聚合(Eth-Trunk),通过将多个物理接口捆绑成一个逻辑接口,可以提高链路带宽。

  • 聚合组 (Link Aggregation Group, LAG) :若干个链路捆绑在一起形成的逻辑链路。每个聚合组唯一对应着一个逻辑接口,这个逻辑接口又称为 Eth-Trunk 接口。
  • 成员接口和成员链路:一望而知,就是组成 Eth-Trunk 接口的各个物理接口以及其对应的链路。在同一个聚合组中要求成员接口的接口速率、双工模式和 VLAN 配置要相同。
  • 活动接口和活动链路:活动接口又称为选中接口(Selected 接口),时参与数据转发的成员接口,其对应的链路就是活动链路(Active link)
  • 非活动接口和非活动链路:相对活动接口和活动链路
  • 聚合模式:根据是否开启 LACP(Link Aggregation Control Protocol,链路聚合控制协议),链路聚合可以分为手工模式LACP模式

手工模式

Eth-Trunk的建立、成员接口的加入均使用手工配置,双方系统之间不使用 LACP 进行协商。 正常情况下所有链路都是活动链路,都参与数据的转发,平均分担流量,当其中有活动链路故障时,剩下的活动链路继续分担流量。

手工模式的缺陷:

  1. 手工模式下,设备之间没有报文交互,只能人工确认,必须保证成员接口的对端接口都属于同一设备并且加入同一链路聚合接口,如果出现下图情况则会导致通信异常:

其中一个成员接口的对端是 SW3 而不是 SW2 ,流量被负载分担到 SW3,导致通信异常。

  1. 手动模式下,只能通过物理层状态判断对端接口是否正常工作。

如上图的故障则无法自动判断出来。

LACP 模式

LACP模式:采用 LACP 协议的链路聚合模式,设备间通过 LACPDU (Link Aggregation Control Protocol Data Unit) 进行交互,通过协议协商确保对端是同一台设备、同一个聚合接口的成员接口。

LACPDU 报文中包含设备优先级、MAC地址、接口优先级、接口号等

系统优先级

LACP 模式下,两端设备所选的活动接口数目必须保持一致,否则 LAG 无法建立,此时可以使其中任意一端称为主动端,对应的另一端根据主动端选择活动接口。

通过设备优先级确定主动端,值越优先级越高,优先级相同时通过比较哪一端的 MAC 地址小来确定主动端。

接口优先级

选出主动端后,两端都会以主动端的接口优先级来选择活动接口,优先级越高的先被选为活动接口,接口优先级值越小,优先级越高。 跟设备优先级一样,默认值为32768

最大活动接口数

当成员接口数目超过最大活动接口数时,会通过比较 接口优先级接口号 选举出较优的接口称为活动接口,其余的成为非活动接口,同时对应的链路分别称为活动链路、非活动链路,交换机只会从活动接口中发送、接收报文。 当活动链路中出现链路故障时,可以从非活动链路中找出一条优先级最高(比较接口优先级、接口号)的链路替换故障链路,实现总体带宽不变化、业务的不间断转发。

选举过程

  1. 两台交换机通过多条链路连接后,两台机子都配置 LACP 模式的链路聚合,同时设置相同的最大活跃接口数。两台交换机的每个成员接口都收发LACPDU 根据 选举原则 选出优先级较高的交换机作为主动端
  2. 主动端在本端比较各个成员接口的优先级和接口编号,并根据最大活动接口数,选出活动接口
  3. 主动端选举完活动接口后,通过 LACPDU 将本端的选举结果告知对端, 每一个成员接口 都发送 LACPDU ,而不仅仅是活动接口。LACPDU 中有三个 flags 来标识端口状态,分别是 Synchronization、Collecting、Distributing ,如果是活跃端口,三个字段的值都为1,否则均为0
  4. 非主动端(备份端)根据主动端的选举结果,明确本端的活动接口,同时对应的链路成为活动链路。

负载分担

基于传输模式,负载分担可以分为:基于包的负载分担模式和基于流的负载分担。

基于包的负载分担中,如果数据帧在不同的链路上转发,可能导致数据帧到达对端的时间不一致,可能会导致数据乱序。 在 Eth-Trunk 中推荐采用基于流的负载分担,既保证同一数据流的数据帧在同一条物理链路转发,又实现了流量在聚合组内各物理链路上的负载分担。

Eth-Trunk 支持基于报文的 IP 地址或 MAC 地址来进行负载分担,本地有效,对出方向的报文生效。 根据不同的业务场景,选择不同的负载分担算法,可以很好的实现负载均衡。例如报文的 IP 地址变化频繁,那么基于源 IP 、目的 IP 或源目 IP 的负载分担模式更加合理:

堆叠、集群

堆叠(iStack):多台支持堆叠特性的交换机通过堆叠线缆连接在一起,从逻辑上变成一台交换设备,作为一个整体参与数据转发。

集群(Cluster Switch System,CSS):将两台支持集群特性的交换机设备组合在一起,从逻辑上组合成一台交换设备。 集群只支持两台设备,一般框式交换机支持 CSS ,盒式交换机支持 iStack

堆叠和集群的优势:

  • 堆叠交换机对外表现为一台逻辑交换机,控制平面合一,统一管理
  • 堆叠内物理设备转发平面合一,转发信息共享并实时同步
  • 跨物理设备的链路被聚合成一个 Eth-Trunk 端口,和下游设备实现互联

堆叠、集群的应用:

需要增加交换机上行带宽时,可以增加新交换机与原交换机组成堆叠系统,将成员交换机的多条物理链路配置成一个 LAG ,同时形成设备间备份和链路的跨设备冗余备份,增加可靠性。

两台设备组成集群,虚拟成单一的逻辑设备。简化后的组网不再需要使用 MSTPVRRP 等协议,简化了网络配置,同时依靠跨设备的链路聚合,实现快速收敛,提高可靠性。

堆叠、集群的具体细节见 堆叠与集群

链路聚合常见问题

一端动态聚合一端静态聚合

image.png

两边聚合模式一致时(以动态聚合为例),SW1为根桥,参考端口为SW1的1口,此时STP报文在2口链路上交互(与链路聚合强相关的协议报文,在聚合正常时各个选中端口对应的链路上都会发送,例如LACP,而不强相关的,如STP、LLDP和M-LAG中的DRCP等,只会通过其中一个选中端口发送,估计和hash有关)

image.png

此时修改聚合模式,将SWB和SWA均改为静态,然后将SWB改为动态。 SWB上的日志如下: image.png

可以看到聚合口先down后up,查看聚合口具体情况,发现存在一个选中端口,为1口 image.png

但可以看到flag字段中包含G,代表Default,根据 802.3文档

Defaulted is encoded in bit 6. If TRUE (encoded as a 1), this flag indicates that the Actor’s Receive machine is using Defaulted operational Partner information, administratively configured for the Partner. If FALSE (encoded as a 0), the operational Partner information in use has been received in a LACPDU

此时该端口为默认选中,G置位因为此时处于LACP协商阶段,未收到对方的LACP报文,设备不断地从该端口对外发送LACP报文。而此时SW1是静态聚合,并没有使能LACP,而静态聚合中参考端口为本地端口,无其他意外(如参考key、物理down或超出成员端口数量等)默认成员端口up,此时SW1认为对端两个口也是up。 image.png

但此时会有个问题,由于使能了生成树协议,对于SW1来说,自己是根桥,从2口不断发送BPDU,对于SW2来说,只有1口是选中的,2口并未选中,因此整个聚合口中只有1口这个active端口,但1口永远不会收到BPDU,因此经过了BPDU超时时间后,SW2认为自己是根桥,对外发送BPDU,SW1从1口收到BPDU,1口属于聚合口,以聚合口形式参与STP计算,因此触发dispute image.png

那如果关闭生成树,是否还会有问题? 答案是有的,对于SW1来说,两个成员接口均正常,因此报文会负载均衡发送到两条链路上,而实际上SW2只有1口是正常运行的,那么SW1 hash到2口发送出去的报文就会在SW2上丢包,比如ARP报文等,因此此时可能会存在部分设备正常通信,部分设备无法通信的问题。

非直连设备之间的链路聚合

image.png

现在要在A和B之间做链路聚合,但因为距离原因,需要在中间加一台C做中继, 这样做链路聚合是否可行呢?

静态聚合 静态聚合是本地聚合,不需要交互LACP协议报文 配置之后,聚合口即可变为Select, (1)如果A、B、C启用了STP,因为A和C,B和C之间都不是聚合。此时如果SWA是根桥,此时SWA会收到SWC发的低优先级BPDU,从而导致聚合口被dispute。 (2)如果A和B使能STP,C上不使能STP,此时如果SWC互联SWA或者SWB的接口都放通了一样的vlan,那么A或者B的聚合口会被阻塞,无法转发流量。(C上不使能STP,这个时候BPDU报文从SWC的其中一个口到了C设备后是组播报文,这个时候按照广播处理,会从另一个口又回到A设备,造成接口阻塞)

动态聚合 动态聚合需要两个设备交互LACP报文,A和B能否建立动态链路聚合,主要取决于C设备是否可以透传LACP报文,所以中间C设备要求一般是一个传输设备,可以透传LACP报文。如果C设备为6800,接口配置lacp transparent enable 后可透传LACP。

不同厂商链路聚合对接

image.png

image.png

image.png