专利名称:一种ip报文负载分担实现方法及装置的制作方法
技术领域:
本发明涉及通信技术领域,尤其涉及一种IP报文负载分担实现方法及装置。
背景技术:
随着网络应用的日益普及和网络规模日益庞大,Internet上需要传送的信息量大大增加。对于路由器来说,他们需要为大量报文提供寻径、转发功能,此时路由器的负载能力和性能就成为必须面对的一个实际问题在网络流量增大的情况下,甚至接口故障的情况下,如何能够使路由器仍然提供可靠的高质量的服务?其中一种可行的方法就是负载分担。所谓的负载分担就是到达一个给定的目的地址允许使用多条路径的技术。这些路径可能来源于静态路由或者动态路由协议,一种负载分担组网如图1所示。
如图1,用户需要访问远端服务器,数据流在路由器A查询路由表后,找到两条路径A-B-D和A-C-D。这时通过负载分担处理将数据流量平均分担到两条路径上,因此对于单一路径上的流量针对于不负载分担的情况都减少到一半,这就大大缓解了路由器B和C的承受能力。
此外,负载分担也被使用在trunk上。trunk是将多个物理端口聚合在一起形成一个汇聚组,实现出、入负荷在各成员端口中的分担,同时提供更高的连接可靠性的技术。每个trunk端口可以配置同一IP地址,即逻辑上可以被看作一个实际端口来使用,数据流通过负载分担被平均分担到trunk组内的不同物理端口上,达到减少端口负荷能力的目的。典型的组网如图2所示。
不难发现,无论对于多条路由的负载分担,还是trunk的负载分担,要想最大可能的提高分担链路的负荷能力和性能,充分利用网络资源,就要尽可能的将数据流量平均的分担到每条链路上,因此好的负载分担算法的选择则成为关键。
负载分担的基本算法通常有两种基于数据流的负载分担和基于报文的负载分担。基于数据流的负载分担,是利用数据流包含的特定信息来分发报文,最常见的是路由器针对源地址&目的地址对来分发报文假设到达同一个主机有N条路径,在目的地址相同的情况下,源地址是访问者1地址的所有报文走第一条路,源地址是访问者2地址的所有报文走第二条路……,依此类推,源地址是访问者N地址的所有报文走第N条路。
对于IP报文来说,使用报文源IP地址&目的IP地址作为key进行hash处理,最简单的hash算法是使用源IP与目的IP进行异或操作,之后将32bit长度的结果再进行多次折半异或操作,每次折半异或操作后结果长度减半,折半异或次数与最后需要获得的hash结果位长有关,例如需要获得4bit的hash结果,那么需要折半异或3次。最后将hash结果作为分担链路标识选择对应的负载分担链路转发报文。
上述分担算法简单描述如下key1=源IP地址,key2=目的IP地址,key1 XOR key2=key’,key’_H16 XOR key’_L16=key”,key”_H8 XOR key”_L8=key,key_H4 XOR key_L4=key””,key””低4bit作为hash的最后结果上述操作详细流程如图3所示,对于给定的源地址和目的地址对即使有多条可用路径也只能选择同一条路径。若只有一条流则只会走一条分担链路,根本无法进行负载分担。在实际环境中,到达各个目的地址的流量可能相差很多,到达某个目的地址的报文又总是选择同一条路径,这种工作方式可能会导致负载分担不均衡。
基于报文的负载分担就是说路由器将目的地址是A的一个报文从第一条路径发送,目的地址是A(目的地址相同)的第二个报文从第二条路径发送。
基于报文的负载分担算法实现思想是为每条需要进行负载分担的路由或trunk接口分配一个计数器,每收到一个报文,将对应的计数器加1,根据计数器值轮询各条对应的分担路径,按顺序从相应分担路径转发报文,以达到负载分担效果。
此种方法的缺点是需要为每条需要进行负载分担的路由或trunk接口都分配一个计数器,路由器上往往会存在大量路由,这样会导致要分配管理大量计数器,造成存储资源的严重浪费。此外,对计数器的频繁操作也会大量占用存储器访问带宽,影响转发性能。
发明内容
本发明的目的在于提供一种IP报文负载分担实现方法及装置,解决了基于数据流的负载分担算法的分担不均衡问题及基于报文的负载分担算法的存储资源的严重浪费和影响转发性能问题。
本发明的目的是通过以下技术方案实现的一种IP报文负载分担实现方法,包括在基于数据流的负载分担hash计算中引入唯一标识一份报文的标识字段作为key,获得负载分担路径来转发IP报文。
所述方法具体包括
利用报文源IP地址、目的IP地址及唯一标识一份报文的标识字段作为基于数据流的负载分担hash计算中的key,获得与负载分担路径数量相关位数的结果;将所述结果作为索引,查找对应的负载分担路径;利用所述查找到的路径转发IP报文。
所述利用标识字段作为key在进行hash计算时,所述标识字段仅与相同位数的hash计算结果进行相应的hash操作。
所述标识字段在每发送一份报文时,其值加1。
所述标识字段为报文头部中的标识信息。
一种IP报文负载分担实现装置,包括标识字段获取模块,用于获取报文中唯一标识一份报文的标识字段;负载分担计算模块,用于将报文源IP地址、目的IP地址及标识字段作为key获得负载分担路径转发报文。
所述装置进一步包括报文转发模块,用于根据负载分担计算模块获得的负载分担路径转发报文。
所述负载分担计算模块进一步包括负载分担hash计算子模块,用于将报文源IP地址、目的IP地址及标识字段作为key进行hash计算操作,得到与负载分担路径数量相关位数的结果;负载分担路径查找子模块,用于将所述hash算法操作获得的结果作为索引查找对应的负载分担路径。
所述装置设置于路由器中。
由上述本发明提供的技术方案可以看出,本发明由于在基于数据流的分担hash算法中引入了IP报文的唯一标识,相当于引入了基于报文的负载分担算法的特点,即当同一条数据流,报文源地址和目的地址均不变的情况下,hash结果也会根据报文携带的16位标识不同而不断变化,使相同数据流的报文也能够均衡的分担到全部分担链路上。同时,由于使用报文自己携带的标识,而不用再为每条需要进行负载分担的路由或trunk接口都分配计数器,大大减少了存储资源的浪费,也不会因为频繁访问存储器影响转发性能。
因此本发明实现了综合基于数据流负载分担算法和基于报文的负载分担算法的优点,对于多条数据流和单条数据流的情况都可以使报文能够均衡的分担到全部分担链路上。且算法实现简单,也不会占用和访问大量存储空间,对转发性能没有影响。
图1为现有技术负载分担组网示意图;图2为现有技术trunk组网示意图;图3为现有技术逐流hash算法实现流程图;图4为IP数据报格式及首部中的各字段;图5为本发明所述方法一种实施例操作流程图;图6为本发明所述装置一种实施例模块示意图。
具体实施例方式
本发明的核心思想是提供一种IP报文负载分担实现方法及装置,综合基于数据流和基于报文的负载分担算法,在进行hash计算时引入IP报文头部中唯一标识一份数据报的16位标识信息,对于多条数据流或单条数据流的情况都可以使报文均衡的分担到全部分担链路上。
所述IP数据报格式及首部中的各字段如图4所示,各字段说明如下版本表示IP协议的版本,通常有4和6两种,图4是IPV4报文格式。
首部长度表示IP首部占32bit字的数目,包括可能的选项部分。
服务类型包括一个3bit的优先级子字段,4bit的TOS(服务类型)子字段和1bit未用位,但必须置0。4bit的TOS分别代表最小时延、最大吞吐量、最高可靠性和最小费用。
总长度指整个IP数据报的长度,以字节为单位。
标识字段唯一地标识主机发送的每一份数据报,也就是下文中用到的16位标识字段。
片偏移当报文需要分片时,标识该片偏移原始数据报开始处的位置。
生存时间设置了数据报可以经过的最多路由器数,它指定了数据报的生存时间。
协议标识以此IP报文承载的高层协议类型。
首部检验和是根据IP首部计算的检验和码。它不对首部后面的数据进行计算。
源IP地址和目的IP地址标识报文发出的起始地址和最终到达的目的地址。
任选项是数据报中的一个可变长的可选信息,这些选项很少被使用,并非所有的主机和路由器都支持这些选项。
16位标识字段唯一地标识主机发送的每一份数据报。通常每发送一份报文此标识字段的值就会加1。此标识最初是用于在IP报文分片时,在目的地通过相同标识来确定相同报文进行分片重组使用的。
此处利用该标识唯一标识每一个报文的特点,代替基于报文的负载分担的分配计数器使用,将该标识与报文源IP地址和目的IP地址共同作为hash算法的key,重新改进hash算法,最简单的方法可以仍然为异或操作,例如key1=源IP地址,key2=目的IP地址,
key3=16位标识,key1 XOR key2=key’,key’_H16 XOR key’_L16 XOR key3=key”,key”_H8 XOR key”_L8=key,key_H4 XOR key_L4=key””,key””低4bit作为hash的最后结果。最后将hash结果作为分担链路标识,选择对应的负载分担链路转发报文。
本发明所述方法一种实施例操作流程如图5所示,假设负载分担路径共16条,则在得到4位长度结果时,即为最终的结果。具体操作步骤如下步骤1取报文源IP地址作为HASH_key1,取报文目的地址作为HASH_key2,取报文16位标识作为HASH_key3;路由器接收到报文后,在分配路由前,为了实现负载分担,需要进行负载分担计算,首先获取报文文源IP地址及目的地址。取报文源IP地址作为HASH_key1,取报文目的地址作为HASH_key2,同时取报文头部唯一标识所述报文的16位标识作为HASH_key3;步骤2将HASH_key1与HASH_key2进行异或操作,得到32位长度的结果作为HASH_key’;一般报文的源IP地址及目的IP地址均为32位,在进行hash算法时,由于HASH_key3为16位的字段,所以第一次执行的异或操作为HASH_key1与HASH_key2进行异或操作,得到一个32位长度的结果,记作HASH_key’;步骤3取HASH_key’的高16位数据与低16位数据进行异或操作,得到16位长度结果,再次与HASH_key3进行异或操作,得到16位长度结果作为HASH_key”;将上述HASH_key1与HASH_key2进行异或操作得到的32位长度结果HASH_key’的高16位数据与低16位数据进行异或操作,得到16位长度结果,由于HASH_key3为16位的字段,因此将所述得到的16位长度结果再次与HASH_key3进行异或操作,得到另一个16位长度结果,记作HASH_key”;步骤4取HASH_key”的高8位数据与低8位数据进行异或操作,得到8位长度结果作为HASH_key;步骤5取HASH_key的高4位数据与低4位数据进行异或操作,得到4位长度结果作为HASH_key””,这是hash的最终结果;由于负载分担路径一共16条,因此得到的4位长度的结果即为最终结果;步骤6将所述HASH_key””的值作为索引,在该条路由对应的分担链路表中查找对应的负载分担路径,利用查找到的路径进行报文的转发。
本发明提供一种IP报文负载分担实现装置,所述装置设置于路由器中,其一种实施例模块示意图如图6所示,包括标识字段获取模块、负载分担计算模块及报文转发模块。
所述标识字段获取模块,用于获取报文中唯一标识一份报文的标识字段。
所述负载分担计算模块,用于将报文源IP地址、目的IP地址及标识字段作为key获得负载分担路径。该模块进一步包括负载分担hash计算子模块,用于将报文源IP地址、目的IP地址及标识字段作为key进行hash计算操作,得到与负载分担路径数量相关位数的结果。
负载分担路径查找子模块,用于将所述hasn算法操作获得的结果作为索引查找对应的负载分担路径。
所述报文转发模块,用于根据所述获得的负载分担路径转发报文。
综上所述,本发明所述方法由于在基于数据流的分担hash算法中引入了IP报文的唯一标识,相当于引入了基于报文的负载分担算法的特点,即当同一条数据流,报文源地址和目的地址均不变的情况下,hash结果也会根据报文携带的16位标识不同而不断变化,使相同数据流的报文也能够均衡的分担到全部分担链路上。同时,由于使用报文自己携带的标识,而不用再为每条需要进行负载分担的路由或trunk接口都分配计数器,大大减少了存储资源的浪费,也不会因为频繁访问存储器影响转发性能。
以上所述,仅为本发明较佳的具体实施方式
,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到的变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应该以权利要求的保护范围为准。
权利要求
1.一种IP报文负载分担实现方法,其特征在于,包括在基于数据流的负载分担hash计算中引入唯一标识一份报文的标识字段作为key,获得负载分担路径来转发IP报文。
2.如权利要求1所述的一种IP报文负载分担实现方法,其特征在于,所述方法具体包括利用报文源IP地址、目的IP地址及唯一标识一份报文的标识字段作为基于数据流的负载分担hash计算中的key,获得与负载分担路径数量相关位数的结果;将所述结果作为索引,查找对应的负载分担路径;利用所述查找到的路径转发IP报文。
3.如权利要求1所述的一种IP报文负载分担实现方法,其特征在于,所述利用标识字段作为key在进行hash计算时,所述标识字段仅与相同位数的hash计算结果进行相应的hash操作。
4.如权利要求1所述的一种IP报文负载分担实现方法,其特征在于,所述标识字段在每发送一份报文时,其值加1。
5.如权利要求1至4中任一项所述的一种IP报文负载分担实现方法,其特征在于,所述标识字段为报文头部中的标识信息。
6.一种IP报文负载分担实现装置,其特征在于,包括标识字段获取模块,用于获取报文中唯一标识一份报文的标识字段;负载分担计算模块,用于将报文源IP地址、目的IP地址及标识字段作为key获得负载分担路径转发报文。
7.如权利要求6所述的一种IP报文负载分担实现装置,其特征在于,所述装置进一步包括报文转发模块,用于根据负载分担计算模块获得的负载分担路径转发报文。
8.如权利要求6所述的一种IP报文负载分担实现装置,其特征在于,所述负载分担计算模块进一步包括负载分担hash计算子模块,用于将报文源IP地址、目的IP地址及标识字段作为key进行hash计算操作,得到与负载分担路径数量相关位数的结果;负载分担路径查找子模块,用于将所述hash算法操作获得的结果作为索引查找对应的负载分担路径。
9.如权利要求6至8中任一项所述的一种IP报文负载分担实现装置,其特征在于,所述装置设置于路由器中。
全文摘要
本发明涉及通信技术领域中一种IP报文负载分担实现方法及装置,所述方法包括利用报文源IP地址、目的IP地址及唯一标识一份报文的标识字段作为基于数据流的负载分担hash算法中的key,获得与负载分担路径数量相关位数的结果;将所述结果作为索引,查找对应的负载分担路径;利用所述查找到的路径转发IP报文。本发明实现了综合基于数据流负载分担算法和基于报文的负载分担算法的优点,对于多条数据流和单条数据流的情况都可以使报文能够均衡的分担到全部分担链路上。且算法实现简单,也不会占用和访问大量存储空间,不会影响转发性能。
文档编号H04L12/56GK1913454SQ20061011199
公开日2007年2月14日 申请日期2006年8月30日 优先权日2006年8月30日
发明者俞致伟 申请人:华为技术有限公司