链路聚合负载分担方式
摘之:https://support.huawei.com/enterprise/zh/doc/EDOC1100410518/6de0b60d
背景
在使用Eth-Trunk转发数据时,由于聚合组两端设备之间有多条物理链路,可能会产生同一数据流的第一个数据帧在一条物理链路上传输,而第二个数据帧在另外一条物理链路上传输的情况。这样一来同一数据流的第二个数据帧就有可能比第一个数据帧先到达对端设备,从而产生接收数据包乱序的情况。
为了避免这种情况的发生,Eth-Trunk采用逐流负载分担的机制,把数据帧中的地址通过HASH算法生成HASH-KEY值,然后根据这个数值在Eth-Trunk转发表中寻找对应的出接口,不同的MAC或IP地址HASH得出的HASH-KEY值不同,从而出接口也就不同,这样既保证了同一数据流的帧在同一条物理链路转发,又实现了流量在聚合组内各物理链路上的负载分担。逐流负载分担能保证包的顺序,但不能保证带宽利用率。
转发原理
如图3-8所示,Eth-Trunk位于MAC与LLC子层之间,属于数据链路层。
Eth-Trunk模块内部维护一张转发表,这张表由以下两项组成。
- HASH-KEY值HASH-KEY值是根据数据包的MAC地址或IP地址等,经HASH算法计算得出。
- 接口号Eth-Trunk转发表表项分布和设备每个Eth-Trunk支持加入的成员接口数量相关,不同的HASH-KEY值对应不同的出接口。例如,某设备每Eth-Trunk支持最大加入接口数为8个,将接口1、2、3、4捆绑为一个Eth-Trunk接口,此时生成的转发表如图3-9所示。其中HASH-KEY值为0、1、2、3、4、5、6、7,对应的出接口号分别为1、2、3、4、1、2、3、4。
Eth-Trunk模块根据转发表转发数据帧的过程如下:
- Eth-Trunk模块从MAC子层接收到一个数据帧后,根据负载分担方式提取数据帧的源MAC地址/IP地址或目的MAC地址/IP地址。
- 根据HASH算法进行计算,得到HASH-KEY值。
- Eth-Trunk模块根据HASH-KEY值在转发表中查找对应的接口,把数据帧从该接口发送出去。
负载分担方式
用户可以根据流量模型设置不同的负载分担方式,流量中某个参数变化越频繁,选择对应负载分担方式的流量就越均衡。例如,在网络中,如果报文的IP地址变化较频繁,那么选择基于目的IP地址、源IP地址或源IP和目的IP地址的负载分担模式更有利于流量在各物理链路间合理的负载分担;如果报文的MAC地址变化较频繁,IP地址比较固定,那么选择基于目的MAC地址、源MAC地址或源MAC和目的MAC地址的负载分担模式更有利于流量在各物理链路间合理的负载分担。
交换机可以基于报文的以下参数进行负载分担:
- 源MAC地址
- 目的MAC地址
- 源MAC地址和目的MAC地址
- 源IP地址
- 目的IP地址
- 源IP地址和目的IP地址
- VLAN、源物理端口等(对L2、IPv4、IPv6和MPLS报文进行增强型负载分担)
例如,DeviceA的一条TCP报文流的源IP地址为192.168.1.1(MAC地址:a-a-a,源端口号:50),目的IP地址为172.16.1.1(MAC地址:b-b-b,目的端口号:2000),另一条TCP报文流的源IP地址为192.168.1.1(MAC地址:a-a-a,源端口号:60),目的IP地址为10.1.1.1(MAC地址:c-c-c,目的端口号:2000)。如果在DeviceA上配置基于报文的源MAC地址进行负载分担,则报文出接口仅有1个;如果在DeviceA上配置基于报文的目的IP地址进行负载分担,则报文出接口有两个,去往不同目的IP的报文会从不同的出接口转发。
配置负载分担方式时,请注意:
- 负载分担方式只在流量的出接口上生效,如果发现各入接口的流量不均衡,请修改上行出接口的负载分担方式。
- 尽量将数据流通过负载分担在所有活动链路上传输,避免数据流仅在一条链路上传输,造成流量拥堵,影响业务正常运行。例如,数据报文的目的MAC和IP地址只有一个,则应选择根据报文的源MAC和IP地址进行负载分担,如果选择根据报文的目的MAC和IP地址进行负载分担则会造成流量只在一条链路上传输,造成流量拥堵。
跨框Eth-Trunk接口
如图3-10所示,DeviceB和DeviceC通过堆叠,对外呈现为一台设备。跨框Eth-Trunk接口是指将堆叠系统不同设备中的物理接口聚合到一个逻辑接口Eth-Trunk接口中。当堆叠设备中某台设备故障或加入Eth-Trunk接口中的物理成员口故障,可通过堆叠设备间线缆跨框传输数据流量,从而保证了数据流量的可靠传输,同时实现了设备间的备份。
跨框Eth-Trunk接口流量本地优先转发
在设备堆叠情况下,为了保证流量的可靠传输,流量的出接口设置为Eth-Trunk接口。那么Eth-Trunk接口中必定存在跨框成员口。当堆叠设备转发流量时,Eth-Trunk接口通过HASH算法可能会选择跨框的成员口。由于堆叠设备间线缆带宽有限,跨框转发流量增加了堆叠设备之间的带宽承载压力,同时也降低了流量转发效率。为了解决这个问题,可以使能Eth-Trunk接口流量本地优先转发。
如图3-11所示,DeviceB和DeviceC组成堆叠,堆叠设备和DeviceA之间用Eth-Trunk连接。
通过在堆叠设备上部署接口流量本地优先转发功能,可实现:
- 入本设备流量从本设备转发当Eth-Trunk接口在DeviceB有出接口且出接口无故障时,DeviceB的Eth-Trunk接口转发表中将只包含DeviceB的出接口。这样DeviceB到DeviceA的流量在通过HASH算法选择出接口时只能选中DeviceB的接口,流量从DeviceB本设备转发出去。
- 入本设备流量跨框转发当Eth-Trunk接口在DeviceB本设备无出接口或者出接口全部故障时,DeviceB的Eth-Trunk转发表中将包含Eth-Trunk接口中所有可转发的出接口。这样DeviceB到DeviceA的流量在通过HASH算法选择出接口时将选中DeviceC上的出接口,流量将通过DeviceC跨框转发。
- 接口流量本地优先转发功能只对已知单播报文有效,不对未知单播、广播和组播报文生效。
- 使能Eth-Trunk接口流量本地优先转发功能前必须确保本设备Eth-Trunk接口出接口的带宽足以承载本设备转发的流量,防止发生丢包。
PS:Eth-Trunk的负载分担是逐流进行的,逐流负载分担能保证包的顺序,保证了同一数据流的帧在同一条物理链路转发。而不同数据流在不同的物理链路上转发从而实现分担负载。
配置普通负载分担模式,可以基于报文的IP地址或MAC地址来分担负载;对于L2报文、IP报文和MPLS报文还可以配置增强型的负载分担模式。
由于负载分担只对出方向的流量有效,因此链路两端接口的负载分担模式可以不一致,两端互不影响。

共有 0 条评论