发明内容
鉴于现有技术中存在的技术缺陷和技术弊端,本发明实施例提供克服上述问题或者至少部分地解决上述问题的一种路由方法、哈希运算方法、路由器、装置和设备。
作为本发明实施例的一个方面,涉及一种哈希运算方法,可以包括:
基于至少两个已有的CRC本原多项式分别得到哈希参数矩阵;
将得到的至少两个所述哈希参数矩阵进行融合生成新的哈希参数矩阵;
基于所述新的哈希参数矩阵对输入数据进行哈希运算。
作为本发明实施例的第二方面,涉及一种路由方法,可以包括:
基于至少两种CRC哈希算法对路由信息进行哈希运算,并根据该哈希运算的运算结果查找相应的数据流;
当多个不同的路由信息的运算结果对应于同一个数据流时,确定为所述CRC哈希算法发生了冲突;
基于所述至少两种CRC哈希算法各自的CRC本原多项式分别获取哈希参数矩阵;
将得到的至少两个所述哈希参数矩阵进行融合生成新的哈希参数矩阵;
基于所述新的哈希参数矩阵对所述路由信息进行哈希运算,并根据该哈希运算的运算结果查找相应的数据流进行路由转发。
作为本发明实施例的第三方面,涉及一种哈希运算装置,可以包括:
参数矩阵获取模块,用于基于至少两个已有的CRC本原多项式分别得到哈希参数矩阵;
参数矩阵融合模块,用于将得到的至少两个所述哈希参数矩阵进行融合生成新的哈希参数矩阵;
哈希运算模块,用于基于所述新的哈希参数矩阵对输入数据进行哈希运算。
作为本发明实施例的第四方面,涉及一种路由器,可以包括:
运算模块,用于基于至少两种CRC哈希算法对路由信息进行哈希运算;
查找模块,用于根据哈希运算的运算结果查找相应的数据流;
确定模板,用于当多个不同的路由信息的运算结果对应于同一个数据流时,确定为所述CRC哈希算法发生了冲突;
获取模块,用于基于所述至少两种CRC哈希算法各自的CRC本原多项式分别得到哈希参数矩阵;
融合模块,用于将得到的至少两个所述哈希参数矩阵进行融合生成新的哈希参数矩阵;
运算模块,还用于基于所述新的哈希参数矩阵对所述路由信息进行哈希运算;
转发模块,用于根据新的哈希参数矩阵对所述路由信息进行哈希运算的运算结果查找相应的数据流进行转发。
作为本发明实施例的第五方面,涉及一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现上述哈希运算方法、路由方法。
作为本发明实施例的第六方面,涉及一种计算机设备,包括存储器,处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现上述哈希运算方法、路由方法。
本发明实施例至少实现了如下技术效果:
本发明通过将已有的至少两种CRC哈希算法的哈希参数矩阵进行融合生成新的哈希参数矩阵,基于该新的哈希参数矩阵实现新的CRC哈希算法以减少哈希冲突的概率。整个过程只需要将已有的硬件电路相结合即可快速生成新的CRC哈希算法,无需根据新的CRC本原多项式搭建新的硬件电路,因此提高了原有硬件资源的利用率,减少了资源浪费,并且简单、方便、易于实现。
本发明的其它特征和优点将在随后的说明书中阐述,并且,部分地从说明书中变得显而易见,或者通过实施本发明而了解。本发明的目的和其他优点可通过在所写的说明书、权利要求书、以及附图中所记载的结构来实现和获得。
下面通过附图和实施例,对本发明的技术方案做进一步的详细描述。
具体实施方式
下面将参照附图更详细地描述本公开的示例性实施例。虽然附图中显示了本公开的示例性实施例,然而应当理解,可以以各种形式实现本公开而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本公开,并且能够将本公开的范围完整的传达给本领域的技术人员。
这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本发明相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本发明的一些方面相一致的装置和方法的例子。
实施例1
本发明实施例提供了一种哈希运算方法,参照图1所示,该方法可以包括以下步骤:
步骤S11、基于至少两个已有的CRC本原多项式分别得到哈希参数矩阵。
其中,CRC(Cyclic Redundancy Check,循环冗余校验)本原多项式是用于生成循环冗余校验码的表达式,每种CRC哈希算法对应一个CRC本原多项式,可以由硬件电路实现。
例如:一个本原多项式为:G(x)=X8+X2+X1+1,其所对应的硬件电路结构如图2所示,其中的M(x)表示输入数据,C(x)表示输出的CRC码,即CRC哈希运算的运算结果。该硬件电路中的寄存器可以为线性反馈移位寄存器(LSFR)。
其中,所述哈希参数矩阵是指输出的CRC码与输入数据之间的参数形成的矩阵。每一种CRC哈希算法通过其各自的CRC本原多项式可以分别推导出相应的哈希参数矩阵。具体过程将在后续内容进行详细介绍。
步骤S12、将得到的至少两个所述哈希参数矩阵进行融合生成新的哈希参数矩阵。
具体地,可以将至少两个所述哈希参数矩阵进行如下至少一项逻辑运算生成新的哈希参数矩阵:相加、相减、相乘或相除。融合后生成新的哈希参数矩阵也表示输出的CRC码与输入数据之间的参数关系,因此可以理解为是一种新的哈希算法。
步骤S13、基于所述新的哈希参数矩阵对输入数据进行哈希运算。
如前所述,融合后生成新的哈希参数矩阵也可以理解为是一种新的哈希算法,因此,通过该新的哈希算法对输入数据重新进行哈希运算后会得到新的运算结果。
本实施例所述方法也可以基于FPGA(Field Programmable Gate Array,现场可编程门阵列)或ASIC(特殊应用集成电路或专用集成电路)实现,通过将已有的硬件电路相结合便可以快速生成新的CRC哈希算法,而且可编程逻辑单元可用于各种网络设备和芯片,当一些应用场景中发生哈希冲突时,可以便可以通过该方法生成新的CRC哈希算法重新进行哈希运算,从而降低冲突概率。当然,除了用于网络设备领域,只要用到由硬件、或软硬件结合实现HASH算法复用的场合,都可以使用本公开实现,本发明实施例对此不作限定。
以下,参照图3,针对上述步骤S11的具体可选实现方式进行如下说明:
步骤S111、根据所述CRC本原多项式确定当前输出的CRC数据串与输入数据和前次输出的CRC数据串之间的参数关系。
参照图2所示,其中数据流输入M(x)={D0,D1,……,D6,D7},当数据从D0到D7逐步输入到移位寄存器序列中去,C(x)便可以得到整个数据M(x)的CRC值,即得到哈希的运算结果C(x)。基于图2中可以得到:
其中,C0'~C7'表示当前的CRC数据串,C0~C7表示前次输出的CRC数据串。
将数据M(x)={D0,D1,......,D6,D7}的数据逐一带入(公式1),得到CRC的并行计算表达式:
因此,上述CRC可以表示成C(x)=XN*M(x)%G(x)。其中,XN表示需要哈希运算的数据,根据上述G(x)的例子,N=8,数据左移8次(计算机语言中空打8bit),数学运算中用乘N次方表示,%表示求余。
将C(x)=XN*M(x)%G(x)数据迭代展开之后便得到并行的CRC算法公式,即:
其中,D(i)表示当前的输入数据,PD(x,i)表示针对D(i)的参数,C(j)为前次输出的CRC数据串,PC(x,j)表示针对C(j)的参数,i,j=(0到N-1)。
上述公式3即为当前输出的CRC数据串与输入数据和前次输出的CRC数据串之间的参数关系。
步骤S112、令所述前次输出的CRC数据串为0,得到所述当前输出的CRC数据串与所述输入数据之间的参数关系。
从上述公式3可见,当前输出的CRC数据串既与当前的输入数据有关,也与前次输出的CRC数据串有关。本实施例中,为了消除前次输出的CRC数据串的影响,令前次输出的CRC数据串为0。
即,令C(j)==0,其中,j=(0到N-1),由此将公式3简化为:
H(x)=∑(D(i)&PD(x,i)) ---(公式4)
其中,j=(0到N-1)
上述公式4即为当前输出的CRC数据串与所述输入数据之间的参数关系。
步骤S113、根据所述当前输出的CRC数据串与所述输入数据之间的参数关系得到所述哈希参数矩阵。
根据上述公式4,将上述公式2相应地简化为:
其中的运算符“^”,表示verilog语言中的异或运算。
将公式5按照位数对齐的方式可以改写为如下形式:
将公式5-1中的数据D前面的系数写成矩阵形式如下:
上述公式5-2即为对应于上述本原多项式G(x)=X8+X2+X1+1的哈希参数矩阵。
类似地,对应于另一个本原多项式G(x)=X8+X5+X4+1所得到的哈希参数矩阵如下:
此后,在步骤S12中,将上述公式5-2所示的哈希参数矩阵与5-3所示的哈希参数矩阵进行融合即生成新的哈希参数矩阵。具体的方式可以为矩阵的相加、相减、相乘或相除等。在实际应用时,可以根据输入数据的维度和逻辑运算的类型,通过填充零等方式调整所述哈希参数矩阵的行宽和/或列宽。
例如,要实现G(0x104c11db7)32G(0x10007)16的组合输出对于整个PD矩阵,G(0x104c11db7)32可以对齐数据{D0~D31},而G(0x10007)16可以对齐数据{D32~D47},也可以根据需求对其任意数据D。比如D选取{D0,D3,D4,D6,D7,D30,D47,D31,D20}等等。
作为PD(x,i)的两个关键参数,x表示HASH输出的位宽,i表示输入数据位宽。只要x,i参数设计能覆盖基本需求,就可以在此范围内实现任意的HASH函数。我们记作PD(M,N),则公式5-2的整个PD适配任意PD(x,i)的配置和函数如下:
基于同一发明构思,本发明实施例还提供了一种哈希运算装置,参照图4所示,该哈希运算装置10可以包括:参数矩阵获取模块11、参数矩阵融合模块12和哈希运算模块13,其工作原理如下:
参数矩阵获取模块11基于至少两个已有的CRC本原多项式分别得到哈希参数矩阵。具体地,参数矩阵获取模块11先根据所述CRC本原多项式确定当前输出的CRC数据串与输入数据和前次输出的CRC数据串之间的参数关系;然后令所述前次输出的CRC数据串为0,得到所述当前输出的CRC数据串与所述输入数据之间的参数关系;最后根据所述当前输出的CRC数据串与所述输入数据之间的参数关系得到所述哈希参数矩阵。
此后,参数矩阵融合模块12将得到的至少两个所述哈希参数矩阵进行融合生成新的哈希参数矩阵。具体地,参数矩阵融合模块12可以将至少两个所述哈希参数矩阵进行如下至少一项逻辑运算生成新的哈希参数矩阵:相加、相减、相乘或相除。可选地,参数矩阵融合模块12在将得到的至少两个所述哈希参数矩阵进行融合生成新的哈希参数矩阵之前,还根据所述输入数据的维度和所述逻辑运算的类型,调整所述哈希参数矩阵的行宽和/或列宽。
最后,哈希运算模块13基于所述新的哈希参数矩阵对输入数据进行哈希运算。
以上各模块的具体说明可参见上述方法流程中的相关内容,此处不再赘述。
本发明实施例通过将已有的至少两种CRC哈希算法的哈希参数矩阵进行融合生成新的哈希参数矩阵,基于该新的哈希参数矩阵实现新的CRC哈希算法以减少哈希冲突。整个过程只需要将已有的硬件电路相结合即可快速生成新的CRC哈希算法,无需根据新的CRC本原多项式搭建新的硬件电路,因此提高了原有硬件资源的利用率,减少了资源浪费,并且简单、方便、易于实现。
实施例2
本发明实施例提供了一种路由方法,是上述哈希运算方法在路由转发场景中的具体应用,参照图5所示,该方法可以包括以下步骤:
步骤S21、基于至少两种CRC哈希算法对路由信息进行哈希运算,并根据该哈希运算的运算结果查找相应的数据流。
其中,CRC哈希算法是基于CRC技术实现的哈希算法。上述路由信息具体可以是五元组数据,五元组数据是指源IP地址,源端口,目的IP地址,目的端口,和传输层协议这五个量组成的一个集合。通过每一种CRC哈希算法对五元组数据进行哈希运算均能得到相应的固定长度数值,基于该固定长度数值与数据流ID相匹配,从而查找到相应的数据流,对查找到的该数据流进行路由转发,即将该数据流发送给具有相应目的IP地址的服务器的相应目的端口。
步骤S22、当多个不同的路由信息的运算结果对应于同一个数据流时,确定为所述CRC哈希算法发生了冲突。
如前所述,任何哈希算法都有自身局限性,例如当对不同的输入数据进行相同的哈希运算均得到相同的固定长度数值时则发生了冲突。具体地,在本步骤中,当使用一种CRC哈希算法针对不同的五元组数的哈希运算结果均对应同一个数据流时,则认为该CRC哈希算法发生了冲突。本实施例就为了解决该冲突问题,进一步提供了后续步骤。
具体地,在实际应用中,可以当确定所述CRC哈希算法发生冲突的次数超过预定值时再执行后续步骤。例如,当一种CRC哈希算法发生冲突时对应的数据流当全部数据流的比例超过5%时,再执行后续步骤。
步骤S23、基于所述至少两种CRC哈希算法各自的CRC本原多项式分别得到哈希参数矩阵。
关于本步骤的具体说明可参照实施例1中的步骤S11,此处不再赘述。
步骤S24、将得到的至少两个所述哈希参数矩阵进行融合生成新的哈希参数矩阵。
关于本步骤的具体说明可参照实施例1中的步骤S12,此处不再赘述。
步骤S25、基于所述新的哈希参数矩阵对所述路由信息进行哈希运算,并根据哈希运算的运算结果查找相应的数据流进行路由转发。
如前所述,融合后生成新的哈希参数矩阵也可以理解为是一种新的哈希算法,因此,通过该新的哈希算法对输入的五元组数据重新进行哈希运算后会得到新的运算结果,即得到新的固定长度数值,基于该新的固定长度数值查找相应的数据流进行路由转发。
基于同一发明构思,本发明实施例还提供了一种路由器,参照图6所示,该路由器20可以包括:运算模块21、查找模块22、确定模板23、获取模块24、融合模块25和转发模块26,其工作原理如下:
运算模块21基于至少两种CRC哈希算法对路由信息据进行哈希运算;查找模块22根据哈希运算的运算结果查找相应的数据流。
在上述的数据流查找过程中,当多个不同的路由信息的运算结果对应于同一个数据流时,确定模板23确定为相应的CRC哈希算法发生了冲突。
当每次检测到CRC哈希算法冲突,或者当确定出所述CRC哈希算法发生冲突的次数超过预定值后,由获取模块24基于所述至少两种CRC哈希算法各自的CRC本原多项式分别得到哈希参数矩阵,并由融合模块25将得到的至少两个所述哈希参数矩阵进行融合生成新的哈希参数矩阵。运算模块21再基于所述新的哈希参数矩阵对所述路由信息进行哈希运算;从而转发模块26根据新的哈希参数矩阵对所述路由信息进行哈希运算的运算结果查找相应的数据流进行转发。具体的过程可参见上述实施例1的相关内容,此处不再赘述。
由运算模块21重新基于新的哈希参数矩阵对所述路由信息进行哈希运算,由于更换了新的哈希算法,因此针对同样的路由信息再次进行哈希运算时出现冲突的概率会大大降低。当不再出现冲突时,则能够由转发模块26根据新的哈希运算的运算结果查找到相应的数据流并进行路由转发。
以上各模块的具体说明可参见上述方法流程中的相关内容,此处不再赘述。
本发明实施例在进行路由转发的场景中当多个不同的路由信息的哈希运算结果对应于同一个数据流时,确定为相应的CRC哈希算法发生了冲突,通过运用了上述哈希运算方法生成新的CRC哈希算法对同样的路由信息重新进行哈希运算,从而降低了冲突概率。与上述实施例1类似,本实施例同样地也提高了原有硬件资源的利用率,减少了资源浪费,并且简单、方便、易于实现。
本领域内的技术人员应明白,本发明的实施例可提供为方法、系统、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器和光学存储器等)上实施的计算机程序产品的形式。
本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。