88440559_p0 1080.jpg

1. Eth-Trunk(以太网链路聚合)特征


Eth-Trunk - 图2

  • 增加链路带宽
  • 提供可靠性、负载均衡
  • 消除生成树的计算
  • 将多个物理接口捆绑在一起作为一个逻辑接口工作(所有配置都在逻辑接口上),提供高带宽的冗余保护
  • 在堆叠/集群方式下的流量本地优先转发功能只对已知单播有效,对广播、组播和未知单播均不生效(默认开启)
  • LACPDU 报文的 DMAC 为「0180-c200-0002」
  • 支持的聚合方式
    • 同板:同一聚合组的成员接口分布在同一单板上(同一设备)
    • 跨板:同一聚合组的成员接口分布在不同的单板上(同一设备)
    • 跨框:在集群场景下,成员接口分布在集群的各个成员设备上(堆叠设备)
    • 跨设备:E-Trunk基于LACP(单台设备链路聚合的标准)进行了扩展,能够实现多台设备间的链路聚合(跨设备:E-trunk)

      2. 聚合条件


  1. Eth-Trunk 接口中的成员接口必须是同一类型
  2. 可以将不同接口板上的以太网接口加入到同一个 Eth-Trunk,与成员接口直连的对端接口也必须捆绑为 Eth-Trunk 接口,两端才能正常通信
  3. 每个 Eth-Trunk 接口下最多可以包含 8 个成员接口
  4. 成员接口不能配置任何业务和静态 MAC 地址
  5. 成员接口加入Eth-Trunk 时,必须为缺省的 hybrid 类型接口
  6. 不能嵌套,一个物理接口只能属于一个聚合组,聚合组之间不能嵌套
  7. 当成员接口的速率不一致时,实际使用中速率小的接口可能会出现拥塞,导致丢包
  8. 当成员接口加入 Eth-Trunk 后,学习 MAC 地址时是按照 Eth-Trunk 来学习的,而不是按照成员接口来学习

    3. 术语


  • 链路聚合组和链路聚合接口
    • 链路聚合组 LAG(Link Aggregation Group)是指将若干条以太链路捆绑在一起所形成的逻辑链路
    • 每个聚合组唯一对应着一个逻辑接口,这个逻辑接口称之为链路聚合接口或 Eth-Trunk 接口
    • 链路聚合接口可以作为普通的以太网接口来使用,与普通以太网接口的差别在于: 转发的时候链路聚合组需要从成员接口中选择一个或多个接口来进行数据转发
  • 成员接口和成员链路
    • 成员接口:组成 Eth-Trunk 接口的各个物理接口
    • 成员链路:成员接口对应的链路
  • 活动接口和非活动接口、活动链路和非活动链路
    • 链路聚合组的成员接口存在活动接口和非活动接口两种
      • 活动接口:转发数据的接口
      • 非活动接口:不转发数据的接口
    • 活动链路:活动接口对应的链路
    • 非活动链路:非活动接口对应的链路
  • 活动接口数上限阈值(max bandwidth-affected-linknumber)
    • 设置活动接口数上限阈值的目的是在保证带宽的情况下提高网络的可靠性
    • 当前活动链路数目达到上限阈值时,再向 Eth-Trunk 中添加成员接口,不会增加 Eth-Trunk 活动接口的数目,超过上限阈值的链路状态将被置为 Down,作为备份链路
    • 手工负载分担模式链路聚合不支持活动接口数上限阈值
  • 活动接口数下限阈值(least active-linknumber)
    • 设置活动接口数下限阈值是为了保证最小带宽,当前活动链路数目小于下限阈值时,Eth-Trunk 接口的状态转为 Down
  • 链路聚合模式
    • 链路聚合模式分为「手工模式和 LACP 模式[M:N]」

      4. Manual(手工聚合模式)


image.png

  • 不使用协议来协商链路信息
  • 不支持跨设备链路聚合
  • 所有链路都是活动链路,都参与转发(活动链路 down 后,自动调整或解散链路聚合)
  • 只能检测到同一聚合组内的成员链路有断路等有线故障,但是无法检测到链路故障、链路错连等故障

    5. LACP(M:N 聚合模式)


1)概述

使用 LACP 协议来协商链路信息

image.png

  • LACP协议:链路聚合控制协议,基于 「802.1ad」
    • 系统根据自身配置自动形成聚合链路并启动聚合链路收发数据
    • 聚合链路形成以后,负责维护链路状态,在聚合条件发生变化时,自动调整或解散链路聚合
  • 系统LAC**P优先级:区分两端设备优先级的高低[数值越小越优]**
    • 其中一端具有更高的优先级,另一端根据高优先级的一端来选择活动接口
  • 接口LACP优先级:区别同一个 Eth-Trunk 中的不同接口被选为活动接口的优先程度[数值越小越优]
    • 优先级高的接口将优先被选为活动接口
  • 成员接口间M:N备份:由 LACP 确定聚合组中的活动和非活动链路[**M:N 模式,M 条活动链路与 N 条备份链路**]
    • 提供了更高的链路可靠性,并且可以在 M 条链路中实现不同方式的负载均衡
  • 支持跨设备链路聚合
  • 部分链路是活动链路,还存在备份链路[**活动链路 down 后,备份链路顶替**]
  • 能够检测到同一聚合组内的成员链路有断路等有线故障,还可以检测到链路故障、链路错连等故障[**设备会自动选择正确连接的链路进行数据交互**]

    2)LACP Message

    image.png
    LACP Message 格式主要字段解释

  • Destination Address:目的 MAC。是一个组播地址 0180-c200-0002

  • Source Address:源 MAC 地址。是发送端口的 MAC 地址
  • Length/Type:协议类型为 0x8809
  • Subtype:报文子类型。0x01 说明是 LACP 报文
  • Version Number:版本号
  • TLV_type:可变类型
    • 0x00 代表 Terminator 字段
    • 0x01 代表 Actor 字段
    • 0x02 代表 Partner 字段
    • 0x03 代表 Collector 字段
  • Actor_Information_Length:actor 信息字段长度,值为 20byte。代表了链路本端的系统信息、接口信息和状态信息
    • Actor_Port:端口号
    • Actor_State:本端状态信息
      • LACP_Activity:代表链路所在的聚合组参与LACP协商的方式
        • 0 = 被动方式的 LACP,不会主动发送协商报文,除非收到协商报文才会参与
        • 1 = 主动的 LACP,主动方式下会主动发送LACPDU报文给对方
      • LACP_Timeout:代表链路接收LACPDU报文的周期,超时时间为周期的 3 倍
        • 0 = 慢周期 30s
        • 1 = 快周期 1s
      • Aggregation:标识该链路能否被聚合组聚合
        • 0 = 独立链路,不能被聚合
        • 1 = 可以被聚合的链路
      • Synchronization:代表该链路是否已被分配到一个正确的链路聚合组
        • 0 = 链路不在正确的 Eth-Trunk 中
        • 1 = 链路已经关联了 Eth-Trunk,并且系统 ID 和被发送的运行Key 信息是一致的
      • Collecting:帧的收集
        • 0 = 帧的收集未被使能
        • 1 = 表示这个链路收到的帧的收集是使能的,并且不期望在没有管理变化或接收协议信息变化的情况下被禁止
      • Distributing:帧的分配
        • 0 = 表示这个链路发出的帧的分配被明确禁止,并且不期望在没有管理变化或接收协议信息变化的情况下被使能
        • 1 = 帧的分配被使能
      • Default:仅用于诊断调试时使用
        • 0 = 正在使用 Eth-Trunk 对端的 LACPDU 里的信息
        • 1 = 代表接收到的对端的信息是管理配置的
      • Expired:仅用于诊断调试时使用
        • 0 = 本端接收状态机处于正常状态
        • 1 = 本端的接收机是处于超时状态
    • Actor_System_Priority:本端系统优先级,默认 32768
    • Actor_System:系统 ID。是本端系统的 MAC 地址
    • Actor_key:端口 KEY 值,系统根据端口的配置生成,是端口能否成为聚合组中的一员的关键因素
    • Actor_Port_Priority:接口优先级,默认为 0x8000(32768)
  • Reserved:保留字段
  • Partner_Information_Length:Partner 信息字段长度。代表了链路接口接收到对端的系统信息、接口信息和状态信息,与 actor 字段含义一致。在协商最开始未收到对端信息时,partner 字段填充 0,接收到对端信息后会把收到的对端信息补充到 partner 字段当中
    • Partner_Port:对端端口号
    • Partner_State:对端状态信息
    • Partner_System_Priority:对端系统优先级
    • Partner_System:对端系统 ID。是对端系统的 MAC 地址
    • Partner_key:对端端口 KEY 值
    • Partner_Port_Priority:对端接口优先级
  • Reserved:保留字段
  • Collector_Information_Length:Collector 信息字段长度,值为 0x10
  • CollectorMaxDelay:最大延时。默认情况下为 0xffff
  • Reserved:保留字段
  • Terminator_Length:Terminator 信息字段长度。值为 0x00
  • Reserved:保留字段
  • FCS:校验和

    3)LACP 建立过程

    ① 两端互相发送 LACPDU 报文

    image.png

    ② 确定主动端和活动链路

    image.png

  • 两端设备均会收到对端发来的 LACPDU 报文。当 DeviceB 收到 DeviceA 发送的报文时,DeviceB 会查看并记录对端信息,然后比较系统优先级字段

    • 如果 DeviceA 的系统优先级高于本端的系统优先级,则确定 DeviceA 为 LACP 主动端
    • 如果 DeviceA 和 DeviceB 的系统优先级相同,比较两端设备的 MAC 地址,MAC 地址小的一端为 LACP 主动端

      ③ 选出主动端后,两端都会以主动端的接口优先级来选择活动接口

      image.png
  • 如果主动端的接口优先级都相同,则选择接口编号比较小的为活动接口

  • 两端设备选择了一致的活动接口,活动链路组便可以建立起来,从这些活动链路中以负载分担的方式转发数据

    4)LAPC 抢占

    image.png

  • LACP 默认不支持抢占,需要手工开启

  • 使能 LACP 抢占功能后,聚合组会始终保持高优先级的接口作为活动接口的状态
  • 为了避免由于某些链路状态频繁变化影响流量的传输,需要使用抢占时延。使能 LACP 抢占时延后,处于备用状态的链路将会等待一段时间后再切换到转发状态
  • 抢占的链路状态切换
    • 触发:
      1. 链路 Down 事件
      2. 以太网 OAM 检测到链路失效
      3. LACP 协议发现链路故障
      4. 接口不可用
      5. 在使能了 LACP 抢占功能的前提下,更改备份接口的优先级高于当前活动接口的优先级
    • 切换步骤:
      1. 关闭故障链路
      2. 从 N 条备份链路中选择优先级最高的链路接替活动链路中的故障链路
      3. 优先级最高的备份链路转为活动状态并转发数据,完成切换

        6. 负载分担方式


1)系统分担方式

不建议修改Load-balance

  • 逐包的负载分担:在使用 Eth-Trunk 转发数据时,由于聚合组两端设备之间有多条物理链路,就会产生同一数据流的第一个数据帧在一条物理链路上传输,而第二个数据帧在另外一条物理链路上传输的情况。容易造成接收数据包乱序的情况(同一数据流的第二个数据帧就有可能比第一个数据帧先到达对端设备)
  • 逐流的负载分担(目前交换机仅支持逐流的负载分担):保证了同一数据流的帧在同一条物理链路转发,又实现了流量在聚合组内各物理链路上的负载分担。逐流负载分担能保证包的顺序,但不能保证带宽利用率

    2)逐流负载分担转发原理

  1. Eth-Trunk 模块从 MAC 子层接收到一个数据帧后,根据负载分担方式提取数据帧的源 MAC地址 / IP地址或目的 MAC地址 / IP地址
  2. 根据 HASH 算法进行计算,得到 HASH-KEY 值
  3. Eth-Trunk 模块根据 HASH-KEY 值在转发表中查找对应的接口,把数据帧从该接口发送出去

    3)负载分担方式

    | 分担方式 | 解释 | 机制 | | :—-: | :—-: | :—-: | | Src mac | 根据报文的源MAC地址进行负载分担 | 从将源 MAC 地址、 VLAN ID 、以太网类型及入端口信息中分别选择指定位的3bit数值进行异或运算,根据运算结果选择Eth-Trunk表中对应的出接口 | | Dst mac | 根据报文的目的MAC地址进行负载分担 | 从目的 MAC 地址、 VLAN ID 、以太网类型及入端口信息中分别选择指定位的3bit数值进行异或运算,根据运算结果选择 Eth Trunk 表中对应的出接口 | | Src ip | 根据报文的源IP地址进行负载分担 | 从源 IP 地址、入端口的 TCP/UDP 端口号中分别选择指定位的3bit数值进行异或运算,根据运算结果选择Eth-Trunk表中对应的出接口 | | Dst ip | 根据报文的目的IP地址进行负载分担 | 从目的 IP 地址、出端口的 TCP/UDP 端口号中分别选择指定位的3bit数值进行异或运算,根据运算结果选择Eth-Trunk表中对应的出接口 | | Src dst mac | 根据报文的源MAC地址和目的MAC地址进行负载分担 | 从目的 MAC 地址、源 MAC 地址、 VLAN ID 、以太网类型及入端口信息中分别选择指定位的3bit数值进行异或运算,根据运算结果选择Eth-Trunk表中对应的出接口 | | Src dst ip | 根据报文的源IP地址和目的IP地址进行负载分担 | 从目的 IP 地址、源 IP 地址两种负载分担模式的运算结果进行异或运算,根据运算结果选择 Eth Trunk 表中对应的出接口 | | 根据报文的VLAN、源物理端口等对L2、IPv4、IPv6和MPLS报文进行增强型负载分担 | | |

4)注意

  • 负载分担方式只在流量的出接口上生效,如果发现各入接口的流量不均衡,需要修改上行出接口的负载分担方式
  • 尽量将数据流通过负载分担在所有活动链路上传输,避免数据流仅在一条链路上传输,造成流量拥堵,影响业务正常运行

    7. Linux 对接 Eth-Trunk


  • 需要 Manual/On 链路聚合:Mode 0、Mode 2
  • 需要 LACP 链路聚合:Mode 4
  • 无需任何配置的有:Mode1(相同vlan)、Mode3(不同vlan)、Mode5、Mode6 | 服务器网卡绑定模式 | | 交换机对接方式 | 说明 | | :—-: | :—-: | :—-: | —- | | Mode 0 | round-robin | Manual/On | 服务器所绑定的网卡被修改成相同 MAC Address,因此需要交换机通过 Manual/on 模式进行对接 | | Mode 1 | active-backup | / | 服务器采用双网卡(一个处于主状态;一个处于从状态)。所有数据都通过主状态的端口进行传输。当主状态端口对应链路出现故障时,数据通过从状态端口传输。因此需要交换机在对应的两个端口配置在同一个 VLAN | | Mode 2 | load balancing | Manual/On | 服务器的多网卡基于指定的 Hash 策略传输数据包,因此需要交换机通过 Manual/on 模式进行对接 | | Mode 3 | broadcast | / | 服务器多网卡对于同一份报文会复制两份分别从两个端口传输,因此建议交换机在对应的两个端口配置在不同 VLAN | | Mode 4 | 802.3ad | LACP | 服务器的多网卡采用 LACP 模式绑定,因此需要交换机通过 LACP 模式进行对接 | | Mode 5 | transmit load balancing | / | 服务器的多网卡采用适配器传输负载均衡,因此不需要在交换机上进行配置 | | Mode 6 | adaptive load balancing | / | 服务器的多网卡采用适配器适应性负载均衡,因此不需要在交换机上进行配置 |