专利名称:实现负载均分的方法和设备的制作方法
技术领域:
本发明涉及凄t悟通信领i或,尤其涉及一种采用FPGA (Field Programmable Gate Array,现场可编程门阵列)实现负载均分(Load Balance )的方法和装置。
背景技术:
随着电子技术及互联网技术的不断发展,互联网设备运行的速 度越来越快,处理能力越来越强,同时各个设备支持的接口标准也
越来越多。由于各个接口标准支持的速率不一样,就出现多个低速 接口与一个或多个高速4妾口互连的情况。这样,当高速4矣口有^:据
要发送时,需要由多个低速接口共同分担,否则,如果长时间地将 报文只发送到一个低速接口 ,会导致低速接口拥塞和丢包。这就需 要一种高效的负载均分的方法,实现流量在各个^氐速4妄口之间平均 分配。
目前,普遍使用的负载均分的方法有单次Hash (哈希)运算和 多次Hash运算。单次Hash运算就是利用一次Hash运算的结果确 定报文的出口,多次Hash运算采用多次Hash运算,逐次缩小选择 的范围,最终确定报文的出口。单次Hash运算实现简单,资源使用 量较小,但是容易出现Hash碰撞;而多次Hash运算实现复杂度高, 资源利用量大,能在一定程度上避免Hash石並撞。根据实现Hash运 算的手革殳,又可以分为软件实现和硬件实现。软件实现是由网络处理器根据报文信息进行Hash运算,确定报文的出口 ,而硬件实现就 是利用FPGA根据报文信息进行Hash运算,确定报文的出口。软 件实现需要由网络处理器解析报文信息,这种方法速度较慢,且会 增加网络处理器的负担。硬件实现速度较快,而且硬件实现不但能 完成负载均分,还能同时完成各个不同4妻口标准之间的转4灸,所以 得到4交多的应用。
现有技术中一般采用的报文负载分担的实现方法,性能和效率 较低,支持的报文封装类型少,不合适网络承载内容高速发展的趋 势;并且使用不合理的Hash运算的关键字(Key),报文负载分担 不能满足"同源同宿"的要求,使得下游设备容易出现报文乱序的 现象,增加下游设备处理的难度,或者使用Hash运算的关键字位数 过多,增加运算复杂度且降低效率。
发明内容
本发明的目的在于提供一种实现负载均分的方法,可识别多种 报文类型,通过选择合理的关4建字进《亍Hash运算,实现高效的负载均分。
本发明提供了一种实现负载均分的方法,用于在一个高速接口 和多个低速接口之间传输报文,包括以下步骤步骤一,从高速接 口接收报文并判别报文的类型;步骤二,根据报文的类型从报文获 取Hash运算的关键字并利用关键字进行Hash运算,得到报文出低 速接口的端口号;以及步骤三,将才艮文从对应于端口号的低速4妄口
发送出去。
在步骤一中,根据报文的封装协议类型字段判别报文的类型。其中,报文的类型包括以下至少之一VLAN( Virtual Local Area Network,虚拟、局i或网)才艮文、MPLS ( Multi Protocol Label Switch, 多协议标签交换)才艮文以及IP (Internet Protocol,互耳关网)才艮文。 VLAN才艮文中用于Hash运算的关4建字为标签控制信息;MPLS冲艮文 中用于Hash运算的关4建字为标签值;以及IP才艮文中用于Hash运算 的关《建字为源IPi也址和目的IP;也址。
本发明还提供了一种实现负载均分的设备,包括高速接口控 制器及緩存区模块,用于从高速接口接收报文并分别緩存报文的控 制信息和数据;报文判别及Hash运算模块,用于判别报文的类型, 并获取相应的关键字用于Hash运算,得到报文出低速接口的端口 号,并将报文从高速接口控制器及緩存区模块中读出,发送到低速 接口控制器及緩存区模块;以及低速接口控制器及緩存区模块,用 于将报文从对应于端口号的低速接口发送出去。
高速接口控制器及緩存区模块包括高速接口控制器子模块, 用于从高速接口接收报文;内部报文緩存区子模块,用于緩存报文 的数据;以及报文控制信息緩存区子模块,用于緩存报文控制信息, 报文控制信息包括报文的长度;报文在内部报文緩存区模块的起 始位置;以及报文的封装协议类型字段。
低速接口控制器及緩存区模块包括低速接口緩存区子模块, 用于緩存报文判别及Hash运算模块送来的数据;以及低速接口控制 器子模块,用于将报文从低速接口緩存区子模块中读出并发送出去。 包括高速接口控制模块,用于高速接口接收报文的控制;报文判 别及Hash运算模块,用于判别报文的类型,并从报文获取Hash运 算的关键字进行Hash运算,得到报文出低速接口的端口号;以及低 速接口控制模块,用于低速接口发送报文的控制。其中,高速接口控制模块包括高速接口控制器模块,用于从 高速接口接收报文;报文控制信息緩存区模块,用于緩存报文的长 度、报文在内部报文緩存区模块的起始位置以及报文的封装协议类 型字段;以及内部报文緩存区模块,用于緩存才艮文的数据。
其中,低速接口控制模块包括低速接口緩存区模块,用于緩 存报文判别及Hash运算模块送来的数据,低速接口緩存区模块的数 量与子低速接口控制器模块的数量相同。子低速接口控制器模块, 用于将报文从低速接口緩存区模块读出并发送出去。
本发明提供的实现负载均分的方法和装置,增加了对报文封装 类型的判别,使得支持的报文封装类型增多了,更适合于当前网络 的应用;同时采用FPGA实现,提高了处理的速度和报文转发的效率。
此处所说明的附图用来提供对本发明的进一步理解,构成本申 请的一部分,本发明的示意性实施例及其说明用于解释本发明,并 不构成对本发明的不当限定。在附图中
图l为根据本发明的实现负载均分的方法的流程图2a为本发明支持的VLAN报文封装格式;
图2b为本发明支持的MPLS报文封装格式;
图2c为本发明支持的IP报文封装格式;
图3为根据本发明方法的报文判别流程图4为根据本发明方法的具体实施例的流程图;以及图5为根据本发明的实现负载均分的设备的结构图。
具体实施例方式
下面参考附图,详细i兌明本发明的具体实施方式
。 本发明提供了一种实现负载均分的方法,如图l所示,包括以
下步骤
步骤S102,从高速接口接收4艮文并判别才艮文的类型。
步骤S104,根据报文的类型从报文获取Hash运算的关键字并 利用关键字进行Hash运算,得到报文出低速接口的端口号。
步骤S106,将报文从对应于端口号的低速接口发送出去。
由于报文是从高速接口发送到低速接口 ,流量需要在多个接口 之间均分,否则,如果长时间将才艮文只发送到一个低速接口时,会 导致低速接口拥塞和丟包。
网络上承载的报文,其封装类型多样。由于报文类型不同,参 与Hash运算的关^t字也不同,即4吏采用相同的关4建字,其在才艮文头 的位置也不同。
本发明支持的报文封装类型包括VLAN封装报文、IP封装报文 和MPLS去于装净艮文,其中
DA表示二层报文封装目的MAC地址,共6字节;
SA表示二层报文封装源MAC地址,共6字节;TPID表示封装协议类型字段或者IP封装报文长度,是本发明
判别报文类型的依据,共2字节;
Type/Length表示上层封装协议类型,共2字节; DATA表示报文数据;以及 FCS表示前向检验和,共4字节。
VLAN报文封装格式如图2a所示,TPID为0x8100,表示VLAN 封装净艮文。TPID之后带2字节的TCI ( Tag Control Information,标 签控制信息),是本发明用于Hash运算的关考建字。其中Priority表 示才艮文的4尤先纟及,占3比净争;CFI (Canonical Format Indicator)表 示总线型的以太网与FDDI、令力牟环网交换Jt据时的帧才各式指示, 占1比特;VLAN ID占12比特,表示VLAN的标识,范围1-4094。
MPLS才艮文佳于装^口图2b ,斤示,TPID为0x8847,表示MPLS佳'于 装才艮文。TPID之后带4字节的标签信息。其中Label表示标签值, 占20比特,是本发明用于Hash运算的关键字;Exp为保留位,占 3比特;S表示栈底标志,占1比特,如果该位为"1",表示只有一 层MPLS标签,否则表示还有MPLS标签,即多层MPLS标签,最 后一层MPLS标签的S为'T,; TTL表示生存时间,占8比特。
IP报文封装如图2c所示,对于IP封装,其TPID字段小于或 等于1500,表示IP封装报文,该字段表示IP报文的长度,而不是 封装类型。长度后面紧跟20字节的IP头信息,其中第13字节到第 20字节表示源IP地址和目的IP地址,是本发明用于Hash运算的
关键字。当有报文需要转发时,首先根据报文头封装信息的TPID字段 判别报文的封装类型,然后读取相应的关键字作为Hash运算的输入。
在Hash运算时,使用一个64比特的输入寄存器reg[63:0]存放 关键字,当关键字的长度不足64比特时(如VLAN报文和MPLS 报文),则将寄存器的高位补"0"。由于出接口的个数是n (n为2、 4、 8或16)个,可以用m比特来表示,所以Hash运算的输出就是 m比特的端口号,其中m=log2n。算法如下port[m-1:0]表示目的端 口号
Port[m-l:0]=reg[km-l:(k-l)m] XOR reg[(k-l)m-l :(k-2)m] XOR……XORreg[m-l:O],其中k-l,2,……,64/m, XOR表示异
或运算。
由于采用FPGA实现,上述运算虽然在表面上看有先后顺序, 而实际上m个等式是同时进行运算的,这跟软件实现有才及大的不同。 软件实现是顺序4丸行的,》文在前面的语句比放在后面的语句先4丸行, 而FPGA实现,则是并行才丸行的,也就是说,语句才丸行的时序跟位 置顺序没有关系。这也使得采用FPGA实现比软件实现更快速、更 高效。
如图3所示,对接收报文的判别过程包括以下步骤
步骤S302,读取报文控制信息,包括报文长度、报文在内部报 文緩存区中的起始位置和报文封装协议类型字段。其中报文封装协 议类型字段用于判别寺艮文类型。
ii步骤S304,判断报文封装协议类型字段是否为0x8100:如果是 表示该报文是VLAN报文,则执行步骤S306;否则执行步骤S308, 继续判断该类型字段。
步骤S306,已知报文为VLAN报文,取2字节的TCI字段作 为Hash运算的关键字,将TCI字段赋值给Hash运算输入寄存器reg 的低16比特,reg的高48比特赋值为"0"。然后执行步骤S320。
步骤S308,判断报文封装协议类型字段是否为0x8847:如果是 表示该报文是MPLS报文,则执行步骤S310;否则执行步骤S312, 继续判断该类型字段。
步骤S310,已知报文为MPLS报文,则继续判断栈底标志S是 否为"1":如果该标志为"1",表示只有一层MPLS封装,则执行 步骤S316;否则,表示有多层MPLS封装,执行步骤S318,表示 不是本发明支持的报文封装类型。
步骤S312,判断报文封装协议类型字段是否小于或等于1500: 如果类型字4殳小于或等于1500,表示该,艮文是IP封装,而且该字 段表示的是1P报文的长度,则执行步骤S314;否则该报文不是本 发明支持的报文封装类型,执行步骤S318。
步骤S314,已知才艮文为IP报文,则耳又32比特源IP地址和32 比特目的IP地址作为Hash运算的关键字,输入到reg。然后执行步 骤S320。
步骤S316,已知报文为MPLS报文,则取20比特的标签值字 段作为Hash运算的关键字,赋值给reg的低20比特,reg的高44 比特赋值"0"。然后执行步骤S320。步骤S318,对于本发明不支持的报文封装类型,将Hash运算 的关键字赋值为"0",表示不支持的报文,全部发送到出接口 O(端 口号为0 )。然后#九4于步專聚S320。
步骤S320,才艮文判别操作结束。
本发明提供的实现负载均分的方法,用于报文在一个高速接口 和多个低速"t妻口之间传输,寸氐速4妻口的数量可以为2、 4、 8或16 个,下面具体i兌明才艮文在一个10G (Gigabit,吉比净争)4妻口禾口4个 2.5G接口之间传输的处理流程,如图4所示,包括以下步骤
步骤S402,从1OG接口接收报文。
步骤S404,将报文的控制信息存入报文控制信息緩存区,将报 文的数据存入内部报文緩存区。
步骤S406,当报文控制信息緩存区非空时,从其中读取报文的 控制信息,得到报文的长度、报文在内部数据緩存区的起始位置和 报文的封装协议类型字段,根据报文的封装协议类型字段判别报文
的类型。
步骤S408,当知道报文的类型之后,从内部报文緩存区读取报 文头信息。对于本发明支持的报文类型,其关键字的位置最深的是 IP报文,需要读取34字节的数据(目的MAC地址6字节,源MAC 地址6字节,封装协议类型字段2字节,IP头信息20字节)。本发 明读取一次是16字节,所以最多读取3次就能得到Hash运算所需 的关键字。将得到的关键字输入到64比特的输入寄存器reg中,如 果关4建字的长度不足64比特,则在reg的高4立补"0",出4妾口的端 口号port[l:O]为Port[l]=reg奇比特异或(即reg[63]八reg[61]……八reg[l]);
Port
=reg偶比特异或(即reg[62]Areg[60]……Areg
)。
步骤S410,緩存报文到接口緩存区,得到报文的出接口的端口 号,将报文从内部报文緩存区中读取,读取的起始位置从控制信息 中的起始位置字段得到,而读取的长度由控制信息的报文长度决定, 并将报文写入port[l:O]所指的接口緩存区中。为了节约读取才艮文的 时间,之前读取3次得到的报文头信息被寄存在报文判别及Hash 运算模块中,当得到port[l:O]信息之后,这3拍的数据最先写入接 口緩存区。
步骤S412,从2.5G接口发送报文,当接口緩存区非空时,接 口控制器读取该緩存区的数据,并将读取的数据通过2.5G接口发送 出去。
本发明还提供了一种实现负载均分的设备,具体结构如图5所 示,包4舌以下部分
高速4妻口控制器及緩存区才莫块501,用于从高速4妻口4妄收才艮文 并分别緩存报文的控制信息和数据,包括高速接口控制器子模块 5011,用于从高速接口接收报文;内部报文緩存区子模块5012,用 于緩存报文的数据;以及报文控制信息緩存区子模块5013,用于緩 存报文控制信息,报文控制信息包括报文的长度、报文在内部报文 緩存区模块的起始位置以及报文的封装协议类型字段。
报文判别及Hash运算模块502,用于判别报文的类型,并获取 相应的关键字用于Hash运算,得到报文出低速接口的端口号,并将 报文从内部报文緩存区模块中读出,发送到4氐速接口控制器及緩存
区模块。低速接口控制器及緩存区模块503,用于将报文从对应于端口 号的低速接口发送出去,包括低速接口緩存区子模块5031,用于 緩存报文判别及Hash运算模块送来的数据;以及低速接口控制器子 模块5032,用于将才艮文从低速接口緩存区子模块中读出并发送出去。
本发明提供的实现负载均分的方法和装置,增加了对才艮文封装 类型的判别,使得支持的报文封装类型增多了,更适合于当前网络 的应用;同时采用FPGA实现,提高了处理的速度和报文转发的效率。
对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在 本发明的精神和原则之内,所作的任何修改、等同替换、改进等, 均应包含在本发明的保护范围之内。
权利要求
1. 一种实现负载均分的方法,用于在一个高速接口和多个低速接口之间传输报文,其特征在于,包括以下步骤步骤一,从高速接口接收报文并判别所述报文的类型;步骤二,根据所述报文的类型从所述报文获取Hash运算的关键字并利用所述关键字进行Hash运算,得到所述报文出低速接口的端口号;以及步骤三,将所述报文从对应于所述端口号的低速接口发送出去。
2. 根据权利要求1所述的实现负载均分的方法,其特征在于,在 步骤一中,根据所述报文的封装协议类型字段判别所述报文的类型。
3. 根据权利要求2所述的实现负载均分的方法,其特征在于,所 述报文的类型包括以下至少之一VLAN报文、MPLS报文以 及IP才艮文。
4. 根据权利要求3所述的实现负载均分的方法,其特征在于,包 括所述VLAN报文中用于所述Hash运算的关键字为标签控 制信息;所述MPLS报文中用于所述Hash运算的关键字为标签 值;以及所述IP才艮文中用于所述Hash运算的关《建字为源IP i也址 和目的IP》也址。
5. —种实现负载均分的设备,其特征在于,包括高速接口控制器及緩存区模块,用于从高速接口接收报文 并分别緩存所述报文的控制信息和数据;报文判别及Hash运算模块,用于判别所述报文的类型, 并获取相应的关键字用于Hash运算,得到报文出低速接口的 端口号,并将所述报文从所述高速接口控制器及緩存区模块中读出,发送到低速接口控制器及緩存区模块;以及低速接口控制器及緩存区模块,用于将所述报文从对应于 所述端口号的低速接口发送出去。
6. 根据权利要求5所述的实现负载均分的设备,其特征在于,所 述报文判别及Hash运算模块根据所述报文的封装协议类型字 段判别所述报文的类型。
7. 根据权利要求6所述的实现负载均分的设备,其特征在于,所 述报文的类型包括以下至少之一VLAN报文、MPLS报文以 及IP才艮文。
8. 根据权利要求7所述的实现负载均分的设备,其特征在于,包 括所述VLAN报文中用于所述Hash运算的关键字为标签控 制信息;所述MPLS才艮文中用于所述Hash运算的关4建字为标签 值;以及所述IP报文Hash中用于所述Hash运算的关键字为源IP i也址和目的IP i也址。
9. 根据权利要求5所述的实现负载均分的设备,其特征在于,所述高速接口控制器及緩存区模块包括高速接口控制器子模块,用于从所述高速接口接收报文;内部报文緩存区子模块,用于緩存所述报文的数据;以及报文控制信息緩存区子模块,用于緩存报文控制信息,所 述报文控制信息包括所述报文的长度;所述报文在所述内部报文緩存区模块的起始位置;以及所述报文的封装协议类型字段。
10. 根据权利要求5所述的实现负载均分的设备,其特征在于,所 述低速接口控制器及緩存区模块包括低速接口緩存区子模块,用于緩存所述报文判别及Hash 运算才莫块送来的^t据;以及低速接口控制器子模块,用于将所述报文从所述低速接口 緩存区子模块中读出并发送出去。
全文摘要
本发明提供了一种实现负载均分的方法,用于在一个高速接口和多个低速接口之间传输数据,包括以下步骤步骤一,从高速接口接收报文并判别报文的类型;步骤二,根据报文的类型从报文获取Hash运算的关键字并利用关键字进行Hash运算,得到报文出低速接口的端口号;以及步骤三,将报文从对应于端口号的低速接口发送出去。本发明提供的实现负载均分的方法,可识别多种报文类型,通过选择合理的关键字进行Hash运算,实现高效的负载均分。本发明还提供了一种实现负载均分的设备。
文档编号H04L12/56GK101425960SQ20071016591
公开日2009年5月6日 申请日期2007年11月2日 优先权日2007年11月2日
发明者堃 杨 申请人:中兴通讯股份有限公司