所选语种没有对应资源,请选择:

本站点使用Cookies,继续浏览表示您同意我们使用Cookies。Cookies和隐私政策>

提示

尊敬的用户,您的IE浏览器版本过低,为获取更好的浏览体验,请升级您的IE浏览器。

升级

什么是Hash

评分并提供意见反馈 :
华为采用机器翻译与人工审校相结合的方式将此文档翻译成不同语言,希望能帮助您更容易理解此文档的内容。 请注意:即使是最好的机器翻译,其准确度也不及专业翻译人员的水平。 华为对于翻译的准确性不承担任何责任,并建议您参考英文文档(已提供链接)。
什么是Hash

什么是Hash

原理介绍

简介

在网络部署当中,当存在多条转发路径的时候,常常会部署负载分担功能。通过部署负载分担,可以基于报文的输入位置(端口)、业务类型(协议)、报文内容、流表、时间戳等特点进行转发,或者基于随机数进行逐包、基于轮转方式进行逐包转发,以达到充分利用链路,提高转发效率的目的。

其中,基于时间戳、随机、轮转逐包的方式实际部署较少,主要因为该方式可能导致同一个用户的流量经过网络的不同路径传输后到达目的服务器出现报文乱序或多份的情况。常见的负载分担方案一般选择基于业务类型或报文内容(通常选择五元组包括源IP、目的IP、协议号、协议源端口、协议目的端口)方式进行负载分担。

常见的负载分担处理过程包含,输入(流量、报文的有效字段)、处理(通过Hash算法进行计算)和输出(根据计算结果将流量通过相应的出接口转发)。其中,通过Hash计算的结果会直接影响负载分担的效果,因此如何利用好Hash算法进行计算,在负载分担部署当中就显得尤为重要。

说明:

本文中使用的命令和配置举例,部分可能只有某些款型才支持,本文中不再详细说明。了解具体的支持情况,请查询产品文档。

Hash算法概念和基本原理

Hash一般翻译做“散列”,就是把固定或任意长度的输入,通过散列算法变换成固定长度的输出,该输出就是散列值。这种转换是一种压缩映射,通常散列值的空间远小于输入的空间,不同的输入可能会散列成相同的输出,而且不可能从散列值来唯一确定输入值。简单而言Hash就是一种将一定长度的消息压缩到某一固定长度的消息摘要的处理。

图1-1 Hash算法流程

图1-1所示,Hash计算的流程如下:

  1. 获取报文的信息。对于普通的IP报文,为原MAC、目的MAC、原IP、目的IP、VLAN、四层端口号等;对于隧道报文,则为报文的外层和内层报文的上述字段。按照配置的Hash模型,将这些信息作为Hash因子的参考值。可通过命令设置。
  2. 根据Hash算法和Seed对Hash因子进行计算,得到Hash Key。

    其中,Hash算法是芯片提供固定种类的算法,不同的算法对于不同的流量模型计算的效果不同,有多种算法以供选择。可通过命令设置。

    另外,Seed是一个数值,用于参与计算。在相同Hash因子的情况下,Seed值会影响计算出的Hash Key的值。可通过命令设置。

  3. 为了让同一个Hash因子衍生更多的变化,以更加灵活的适应不同的HASH场景,芯片可以对Hash Key的值进行0~15位的偏移。可通过命令设置。
  4. 将Hash_Key转化为Offset值,Offset值与出口个数进行取余运算,根据结果决定报文的出口。

负载分担方式

在确定了Hash算法配置之后,还有两种负载分担方式会对流量转发有影响。现介绍如下。

弹性负载分担

链路增加或减少时,尽量少的切换链路上的流量,只有部分流量进行链路切换。例如,有一个链路聚合组中包含3条成员链路,分别根据Hash Key值进行数据转发,其中一条链路故障无法转发数据时,未配置弹性负载分担情况下另外两条链路会重新分配流量。如果配置了弹性负载分担,另外两条链路上之前分配的流量不会发生变化,只是将故障链路上的流量大致均匀地分配到这两条链路上,这样对业务造成的影响较小。当故障链路恢复后,会从这两条链路卸载一部分流量到故障恢复的这条链路上,各链路的流量分配和故障前流量分配也不会完全一致。

可通过命令load-balance enhanced resilient profile profile-name进行配置。

同源同宿负载分担

同源同宿指属于同一个网络连接的双向数据报文必须从同一个输出接口输出。网络流量分析中,仅分析通信双方的单向流量是不够的,比如某台服务器要查看通信双方的信息时,往往需要结合通信双方的双向流量才能全面分析流量包含的信息,因此需要将通信双方的报文转发到同一台服务器上进行分析,这就要求设备在特定的转发流程中支持同源同宿。

配置方法如下:

Eth-Trunk(CE8800&CE7800&CE6800&CE5800)

<HUAWEI> system-view
[~HUAWEI] load-balance profile default
[~HUAWEI-load-balance-profile-default] eth-trunk hash-mode 5

ECMP(CE8800&CE7800&CE6800&CE5800)

<HUAWEI> system-view
[~HUAWEI] load-balance ecmp
[~HUAWEI-ecmp] hashmode 5

ECMP&Eth-Trunk(CE12800)

<HUAWEI> system-view
[~HUAWEI] load-balance profile default
[~HUAWEI-load-balance-profile-default] mode symmetry

典型问题

Hash极化(Hash不均)

Hash极化,是指流量经过2次或2次以上Hash后出现的负载分担不均匀的现象。常见于跨设备的多次Hash场景,即第一级进行ECMP Hash,第二级再进行ECMP或者Eth-Trunk Hash。在同一设备上,若存在ECMP的出接口为多个Eth-Trunk也可能会出现Hash极化。

问题描述

图1-2 Hash极化示意图

图1-2所示,Switch A的入接口有4种流量,出接口为4条等价链路,经Hash计算,流量3和流量4走上面两条链路到Switch B;流量1和流量2走下面两条链路到Switch C。在Switch B出接口同样为4条等价链路,若采用与Switch A相同或者类似的Hash算法,其Hash的结果将为流量3和流量4走上面两条链路,而下面两条链路没有流量。Switch C的情况类似。这种经过多次Hash后,ECMP或者Eth-Trunk各成员口之间流量极度不均匀的想象称为Hash极化。

实际上,交换机Hash功能的实现很大程度上取决于芯片,所以当使用同类型芯片的交换机位于网络中相邻的层级时,就可能会出现Hash极化问题。同一设备上若存在Eth-Tunk+ECMP的二级Hash,也存在该极化的风险。

因此,在多级网络中部署ECMP或者Eth-Trunk负载分担,需要考虑出现Hash极化问题的风险。

调整建议

如果流量转发出现负载分担不均或者Hash极化现象,可以通过调整设备上的Hash算法来解决。例如,对于图1 Hash极化示意图中的类似组网的跨设备的极化场景,可调整Switch A上的Hash算法来解决该问题。

相关的配置方法如下。

ECMP调整方法(CE8800&CE7800&CE6800&CE5800):

<HUAWEI> system-view
[~HUAWEI] load-balance ecmp
[~HUAWEI-ecmp] hashmode 4

ECMP调整方法(CE12800):

<HUAWEI> system-view
[~HUAWEI] load-balance profile default
[~HUAWEI-load-balance-profile-default] ecmp hash-mode 3

如果负载分担方式采用的Eth-Trunk,对应的配置如下:

<HUAWEI> system-view
[~HUAWEI] load-balance profile default
[~HUAWEI-load-balance-profile-default] eth-trunk hash-mode 5

若为同一台设备的Eth-Trunk+ECMP负载分担的极化,则可调整ECMP和Eth-Trunk的Hash-mode选择不同的Hash算法。如果现象还存在,可以通过调整Eth-Trunk负载分担Hash计算的universal-id值进一步调整,配置方法如下:

<HUAWEI> system-view
[~HUAWEI] load-balance profile default
[~HUAWEI-load-balance-profile-default] eth-trunk universal-id  5

相关信息

了解了Hash算法,我们可以看出,影响Hash计算的结果有以下因素:

  • HASH因子:可根据流量模型进行配置;

    相关设置命令:

    ip [ src-ip | dst-ip | l4-src-port | l4-dst-port | protocol ] *

    ipv6 [ src-ip | dst-ip | protocol | l4-src-port | l4-dst-port ] *

    l2 [ src-mac | dst-mac | vlan | eth-type ] *

  • Hash算法:通过hash-mode hash-mode-id参数进行选择;
  • Seed值:通过seed seed-data进行设置。当网络中存在多个厂商设备时,建议不同厂商配置为一致;
  • 偏移量:通过universal-id universal-id参数进行设置。取值范围为1~16,其中1表示不位移。通常为一种Hash算法对应一种偏移量。当网络中存在多个厂商设备时,建议不同厂商配置为一致;
  • Offset算法:芯片固定,CE设备无法修改。

交换机厂商只能根据芯片提供的各种因素进行选择和组合,进行Hash计算。Hash负载分担的效果与流量模型强相关,对于基于流的Hash,理论上不存在一种组合可以适用于各种场景。

当网络中出现Hash极化、负载分担不均的问题时,我们可以考虑通过调整不同层级的网络设备的Hash计算参数来进行调整,使得Hash计算差异化,从而解决问题。

翻译
下载文档
更新时间:2019-07-01

文档编号:EDOC1100087021

浏览量:1330

下载量:140

平均得分:
本文档适用于这些产品
相关版本
相关文档
Share
上一页 下一页