实现负载均分的方法和设备转让专利

申请号 : CN200710165913.9

文献号 : CN101425960B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 杨堃

申请人 : 中兴通讯股份有限公司

摘要 :

本发明提供了一种实现负载均分的方法,用于在一个高速接口和多个低速接口之间传输数据,包括以下步骤:步骤一,从高速接口接收报文并判别报文的类型;步骤二,根据报文的类型从报文获取Hash运算的关键字并利用关键字进行Hash运算,得到报文出低速接口的端口号;以及步骤三,将报文从对应于端口号的低速接口发送出去。本发明提供的实现负载均分的方法,可识别多种报文类型,通过选择合理的关键字进行Hash运算,实现高效的负载均分。本发明还提供了一种实现负载均分的设备。

权利要求 :

1.一种实现负载均分的方法,用于在一个高速接口和多个低速接口之间传输报文,其特征在于,包括以下步骤:步骤一,从高速接口接收报文并判别所述报文的类型,其中,所述报文的类型包括以下至少之一:VLAN报文、MPLS报文以及IP报文;

步骤二,根据所述报文的类型从所述报文获取Hash运算的关键字并利用所述关键字进行Hash运算,得到所述报文出低速接口的端口号,其中,所述VLAN报文中用于所述Hash运算的关键字为标签控制信息;所述MPLS报文中用于所述Hash运算的关键字为标签值;

以及所述IP报文中用于所述Hash运算的关键字为源IP地址和目的IP地址;以及步骤三,将所述报文从对应于所述端口号的低速接口发送出去。

2.根据权利要求1所述的实现负载均分的方法,其特征在于,在步骤一中,根据所述报文的封装协议类型字段判别所述报文的类型。

3.一种实现负载均分的设备,其特征在于,包括:

高速接口控制器及缓存区模块,用于从高速接口接收报文并分别缓存所述报文的控制信息和数据;

报文判别及Hash运算模块,用于判别所述报文的类型,并获取相应的关键字用于Hash运算,得到报文出低速接口的端口号,并将所述报文从所述高速接口控制器及缓存区模块中读出,发送到低速接口控制器及缓存区模块,其中,所述报文的类型包括以下至少之一:VLAN报文、MPLS报文以及IP报文,所述VLAN报文中用于所述Hash运算的关键字为标签控制信息;所述MPLS报文中用于所述Hash运算的关键字为标签值;以及所述IP报文Hash中用于所述Hash运算的关键字为源IP地址和目的IP地址;以及低速接口控制器及缓存区模块,用于将所述报文从对应于所述端口号的低速接口发送出去。

4.根据权利要求3所述的实现负载均分的设备,其特征在于,所述报文判别及Hash运算模块根据所述报文的封装协议类型字段判别所述报文的类型。

5.根据权利要求3所述的实现负载均分的设备,其特征在于,所述高速接口控制器及缓存区模块包括:高速接口控制器子模块,用于从所述高速接口接收报文;内部报文缓存区子模块,用于缓存所述报文的数据;以及报文控制信息缓存区子模块,用于缓存报文控制信息,所述报文控制信息包括:所述报文的长度;

所述报文在所述内部报文缓存区子模块的起始位置;以及

所述报文的封装协议类型字段。

6.根据权利要求3所述的实现负载均分的设备,其特征在于,所述低速接口控制器及缓存区模块包括:低速接口缓存区子模块,用于缓存所述报文判别及Hash运算模块送来的数据;以及低速接口控制器子模块,用于将所述报文从所述低速接口缓存区子模块中读出并发送出去。

说明书 :

实现负载均分的方法和设备

技术领域

[0001] 本发明涉及数据通信领域,尤其涉及一种采用FPGA(FieldProgrammable Gate Array,现场可编程门阵列)实现负载均分(LoadBalance)的方法和装置。

背景技术

[0002] 随着电子技术及互联网技术的不断发展,互联网设备运行的速度越来越快,处理能力越来越强,同时各个设备支持的接口标准也越来越多。由于各个接口标准支持的速率不一样,就出现多个低速接口与一个或多个高速接口互连的情况。这样,当高速接口有数据要发送时,需要由多个低速接口共同分担,否则,如果长时间地将报文只发送到一个低速接口,会导致低速接口拥塞和丢包。这就需要一种高效的负载均分的方法,实现流量在各个低速接口之间平均分。
[0003] 目前,普遍使用的负载均分的方法有单次Hash(哈希)运算和多次Hash运算。单次Hash运算就是利用一次Hash运算的结果确定报文的出口,多次Hash运算采用多次Hash运算,逐次缩小选择的范围,最终确定报文的出口。单次Hash运算实现简单,资源使用量较小,但是容易出现Hash碰撞;而多次Hash运算实现复杂度高,资源利用量大,能在一定程度上避免Hash碰撞。根据实现Hash运算的手段,又可以分为软件实现和硬件实现。软件实现是由网络处理器根据报文信息进行Hash运算,确定报文的出口,而硬件实现就是利用FPGA根据报文信息进行Hash运算,确定报文的出口。软件实现需要由网络处理器解析报文信息,这种方法速度较慢,且会增加网络处理器的负担。硬件实现速度较快,而且硬件实现不但能完成负载均分,还能同时完成各个不同接口标准之间的转换,所以得到较多的应用。
[0004] 现有技术中一般采用的报文负载分担的实现方法,性能和效率较低,支持的报文封装类型少,不合适网络承载内容高速发展的趋势;并且使用不合理的Hash运算的关键字(Key),报文负载分担不能满足“同源同宿”的要求,使得下游设备容易出现报文乱序的现象,增加下游设备处理的难度,或者使用Hash运算的关键字位数过多,增加运算复杂度且降低效率。

发明内容

[0005] 本发明的目的在于提供一种实现负载均分的方法,可识别多种报文类型,通过选择合理的关键字进行Hash运算,实现高效的负载均分。
[0006] 本发明提供了一种实现负载均分的方法,用于在一个高速接口和多个低速接口之间传输报文,包括以下步骤:步骤一,从高速接口接收报文并判别报文的类型;步骤二,根据报文的类型从报文获取Hash运算的关键字并利用关键字进行Hash运算,得到报文出低速接口的端口号;以及步骤三,将报文从对应于端口号的低速接口发送出去。
[0007] 在步骤一中,根据报文的封装协议类型字段判别报文的类型。
[0008] 其中,报文的类型包括以下至少之一:VLAN(Virtual Local AreaNetwork,虚拟局域网)报文、MPLS(Multi Protocol Label Switch,多协议标签交换)报文以及IP(Internet Protocol,互联网)报文。VLAN报文中用于Hash运算的关键字为标签控制信息;MPLS报文中用于Hash运算的关键字为标签值;以及IP报文中用于Hash运算的关键字为源IP地址和目的IP地址。
[0009] 本发明还提供了一种实现负载均分的设备,包括:高速接口控制器及缓存区模块,用于从高速接口接收报文并分别缓存报文的控制信息和数据;报文判别及Hash运算模块,用于判别报文的类型,并获取相应的关键字用于Hash运算,得到报文出低速接口的端口号,并将报文从高速接口控制器及缓存区模块中读出,发送到低速接口控制器及缓存区模块;以及低速接口控制器及缓存区模块,用于将报文从对应于端口号的低速接口发送出去。
[0010] 高速接口控制器及缓存区模块包括:高速接口控制器子模块,用于从高速接口接收报文;内部报文缓存区子模块,用于缓存报文的数据;以及报文控制信息缓存区子模块,用于缓存报文控制信息,报文控制信息包括:报文的长度;报文在内部报文缓存区模块的起始位置;以及报文的封装协议类型字段。
[0011] 低速接口控制器及缓存区模块包括:低速接口缓存区子模块,用于缓存报文判别及Hash运算模块送来的数据;以及低速接口控制器子模块,用于将报文从低速接口缓存区子模块中读出并发送出去。包括:高速接口控制模块,用于高速接口接收报文的控制;报文判别及Hash运算模块,用于判别报文的类型,并从报文获取Hash运算的关键字进行Hash运算,得到报文出低速接口的端口号;以及低速接口控制模块,用于低速接口发送报文的控制。
[0012] 其中,高速接口控制模块包括:高速接口控制器模块,用于从高速接口接收报文;报文控制信息缓存区模块,用于缓存报文的长度、报文在内部报文缓存区模块的起始位置以及报文的封装协议类型字段;以及内部报文缓存区模块,用于缓存报文的数据。
[0013] 其中,低速接口控制模块包括:低速接口缓存区模块,用于缓存报文判别及Hash运算模块送来的数据,低速接口缓存区模块的数量与子低速接口控制器模块的数量相同。子低速接口控制器模块,用于将报文从低速接口缓存区模块读出并发送出去。
[0014] 本发明提供的实现负载均分的方法和装置,增加了对报文封装类型的判别,使得支持的报文封装类型增多了,更适合于当前网络的应用;同时采用FPGA实现,提高了处理的速度和报文转发的效率。

附图说明

[0015] 此处所说明的附图用来提供对本发明的进一步理解,构成本申请的一部分,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。在附图中:
[0016] 图1为根据本发明的实现负载均分的方法的流程图;
[0017] 图2a为本发明支持的VLAN报文封装格式;
[0018] 图2b为本发明支持的MPLS报文封装格式;
[0019] 图2c为本发明支持的IP报文封装格式;
[0020] 图3为根据本发明方法的报文判别流程图;
[0021] 图4为根据本发明方法的具体实施例的流程图;以及
[0022] 图5为根据本发明的实现负载均分的设备的结构图。

具体实施方式

[0023] 下面参考附图,详细说明本发明的具体实施方式。
[0024] 本发明提供了一种实现负载均分的方法,如图1所示,包括以下步骤:
[0025] 步骤S102,从高速接口接收报文并判别报文的类型。
[0026] 步骤S104,根据报文的类型从报文获取Hash运算的关键字并利用关键字进行Hash运算,得到报文出低速接口的端口号。
[0027] 步骤S106,将报文从对应于端口号的低速接口发送出去。
[0028] 由于报文是从高速接口发送到低速接口,流量需要在多个接口之间均分,否则,如果长时间将报文只发送到一个低速接口时,会导致低速接口拥塞和丢包。
[0029] 网络上承载的报文,其封装类型多样。由于报文类型不同,参与Hash运算的关键字也不同,即使采用相同的关键字,其在报文头的位置也不同。
[0030] 本发明支持的报文封装类型包括VLAN封装报文、IP封装报文和MPLS封装报文,其中:
[0031] DA表示二层报文封装目的MAC地址,共6字节;
[0032] SA表示二层报文封装源MAC地址,共6字节;
[0033] TPID表示封装协议类型字段或者IP封装报文长度,是本发明判别报文类型的依据,共2字节;
[0034] Type/Length表示上层封装协议类型,共2字节;
[0035] DATA表示报文数据;以及
[0036] FCS表示前向检验和,共4字节。
[0037] VLAN报文封装格式如图2a所示,TPID为0×8100,表示VLAN封装报文。TPID之后带2字节的TCI(Tag Control Information,标签控制信息),是本发明用于Hash运算的关键字。其中Priority表示报文的优先级,占3比特;CFI(Canonical Format Indicator)表示总线型的以太网与FDDI、令牌环网交换数据时的帧格式指示,占1比特;VLAN ID占12比特,表示VLAN的标识,范围1-4094。
[0038] MPLS报文封装如图2b所示,TPID为0×8847,表示MPLS封装报文。TPID之后带4字节的标签信息。其中Label表示标签值,占20比特,是本发明用于Hash运算的关键字;
Exp为保留位,占3比特;S表示栈底标志,占1比特,如果该位为“1”,表示只有一层MPLS标签,否则表示还有MPLS标签,即多层MPLS标签,最后一层MPLS标签的S为“1”;TTL表示生存时间,占8比特。
[0039] IP报文封装如图2c所示,对于IP封装,其TPID字段小于或等于1500,表示IP封装报文,该字段表示IP报文的长度,而不是封装类型。长度后面紧跟20字节的IP头信息,其中第13字节到第20字节表示源IP地址和目的IP地址,是本发明用于Hash运算的关键字。
[0040] 当有报文需要转发时,首先根据报文头封装信息的TPID字段判别报文的封装类型,然后读取相应的关键字作为Hash运算的输入。
[0041] 在Hash运算时,使用一个64比特的输入寄存器reg[63:0]存放关键字,当关键字的长度不足64比特时(如VLAN报文和MPLS报文),则将寄存器的高位补“0”。由于出接口的个数是n(n为2、4、8或16)个,可以用m比特来表示,所以Hash运算的输出就是m比特的端口号,其中m=log2n。算法如下:port[m-1:0]表示目的端口号:
[0042] Port[m-1:0] = reg[km-1:(k-1)m]XOR reg[(k-1)m-1:(k-2)m]XOR......XOR reg[m-1:0],其中k=1,2,......,64/m,XOR表示异或运算。
[0043] 由于采用FPGA实现,上述运算虽然在表面上看有先后顺序,而实际上m个等式是同时进行运算的,这跟软件实现有极大的不同。软件实现是顺序执行的,放在前面的语句比放在后面的语句先执行,而FPGA实现,则是并行执行的,也就是说,语句执行的时序跟位置顺序没有关系。这也使得采用FPGA实现比软件实现更快速、更高效。
[0044] 如图3所示,对接收报文的判别过程包括以下步骤:
[0045] 步骤S302,读取报文控制信息,包括报文长度、报文在内部报文缓存区中的起始位置和报文封装协议类型字段。其中报文封装协议类型字段用于判别报文类型。
[0046] 步骤S304,判断报文封装协议类型字段是否为0×8100:如果是表示该报文是VLAN报文,则执行步骤S306;否则执行步骤S308,继续判断该类型字段。
[0047] 步骤S306,已知报文为VLAN报文,取2字节的TCI字段作为Hash运算的关键字,将TCI字段赋值给Hash运算输入寄存器reg的低16比特,reg的高48比特赋值为“0”。然后执行步骤S320。
[0048] 步骤S308,判断报文封装协议类型字段是否为0×8847:如果是表示该报文是MPLS报文,则执行步骤S310;否则执行步骤S312,继续判断该类型字段。
[0049] 步骤S310,已知报文为MPLS报文,则继续判断栈底标志S是否为“1”:如果该标志为“1”,表示只有一层MPLS封装,则执行步骤S316;否则,表示有多层MPLS封装,执行步骤S318,表示不是本发明支持的报文封装类型。
[0050] 步骤S312,判断报文封装协议类型字段是否小于或等于1500:如果类型字段小于或等于1500,表示该报文是IP封装,而且该字段表示的是IP报文的长度,则执行步骤S314;否则该报文不是本发明支持的报文封装类型,执行步骤S318。
[0051] 步骤S314,已知报文为IP报文,则取32比特源IP地址和32比特目的IP地址作为Hash运算的关键字,输入到reg。然后执行步骤S320。
[0052] 步骤S316,已知报文为MPLS报文,则取20比特的标签值字段作为Hash运算的关键字,赋值给reg的低20比特,reg的高44比特赋值“0”。然后执行步骤S320。
[0053] 步骤S318,对于本发明不支持的报文封装类型,将Hash运算的关键字赋值为“0”,表示不支持的报文,全部发送到出接口0(端口号为0)。然后执行步骤S320。
[0054] 步骤S320,报文判别操作结束。
[0055] 本发明提供的实现负载均分的方法,用于报文在一个高速接口和多个低速接口之间传输,低速接口的数量可以为2、4、8或16个,下面具体说明报文在一个10G(Gigabit,吉比特)接口和4个2.5G接口之间传输的处理流程,如图4所示,包括以下步骤:
[0056] 步骤S402,从10G接口接收报文。
[0057] 步骤S404,将报文的控制信息存入报文控制信息缓存区,将报文的数据存入内部报文缓存区。
[0058] 步骤S406,当报文控制信息缓存区非空时,从其中读取报文的控制信息,得到报文的长度、报文在内部数据缓存区的起始位置和报文的封装协议类型字段,根据报文的封装协议类型字段判别报文的类型。
[0059] 步骤S408,当知道报文的类型之后,从内部报文缓存区读取报文头信息。对于本发明支持的报文类型,其关键字的位置最深的是IP报文,需要读取34字节的数据(目的MAC地址6字节,源MAC地址6字节,封装协议类型字段2字节,IP头信息20字节)。本发明读取一次是16字节,所以最多读取3次就能得到Hash运算所需的关键字。将得到的关键字输入到64比特的输入寄存器reg中,如果关键字的长度不足64比特,则在reg的高位补“0”,出接口的端口号port[1:0]为:
[0060] Port[1]=reg奇比特异或(即reg[63]^reg[61]......^reg[1]);
[0061] Port[0]=reg偶比特异或(即reg[62]^reg[60]......^reg[0])。
[0062] 步骤S410,缓存报文到接口缓存区,得到报文的出接口的端口号,将报文从内部报文缓存区中读取,读取的起始位置从控制信息中的起始位置字段得到,而读取的长度由控制信息的报文长度决定,并将报文写入port[1:0]所指的接口缓存区中。为了节约读取报文的时间,之前读取3次得到的报文头信息被寄存在报文判别及Hash运算模块中,当得到port[1:0]信息之后,这3拍的数据最先写入接口缓存区。
[0063] 步骤S412,从2.5G接口发送报文,当接口缓存区非空时,接口控制器读取该缓存区的数据,并将读取的数据通过2.5G接口发送出去。
[0064] 本发明还提供了一种实现负载均分的设备,具体结构如图5所示,包括以下部分:
[0065] 高速接口控制器及缓存区模块501,用于从高速接口接收报文并分别缓存报文的控制信息和数据,包括:高速接口控制器子模块5011,用于从高速接口接收报文;内部报文缓存区子模块5012,用于缓存报文的数据;以及报文控制信息缓存区子模块5013,用于缓存报文控制信息,报文控制信息包括报文的长度、报文在内部报文缓存区模块的起始位置以及报文的封装协议类型字段。
[0066] 报文判别及Hash运算模块502,用于判别报文的类型,并获取相应的关键字用于Hash运算,得到报文出低速接口的端口号,并将报文从内部报文缓存区模块中读出,发送到低速接口控制器及缓存区模块。
[0067] 低速接口控制器及缓存区模块503,用于将报文从对应于端口号的低速接口发送出去,包括:低速接口缓存区子模块5031,用于缓存报文判别及Hash运算模块送来的数据;以及低速接口控制器子模块5032,用于将报文从低速接口缓存区子模块中读出并发送出去。
[0068] 本发明提供的实现负载均分的方法和装置,增加了对报文封装类型的判别,使得支持的报文封装类型增多了,更适合于当前网络的应用;同时采用FPGA实现,提高了处理的速度和报文转发的效率。
[0069] 以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。