一种存储和查找IP地址映射关系的双哈希算法的制作方法

文档序号:16671436发布日期:2019-01-18 23:36阅读:1247来源:国知局
一种存储和查找IP地址映射关系的双哈希算法的制作方法

本发明涉及互联网通信技术领域,尤其涉及一种基于双哈希函数的存储和查找ip地址映射的关系的算法及其现场可编程门阵列实现。



背景技术:

常用的网络地址转换表查找算法有二叉树算法和哈希算法。哈希算法是一种检索效率非常高的组织字典数据的方法,其方式主要为对存储的键值进行哈希运算,使得每一个存储值与表中的一个唯一的位置相对应。哈希函数建立了从“键-值对”到哈希表地址集合的一个映射,有了哈希函数,我们就可以根据键来确定“键-值对”在哈希表中的位置的地址。使用这种方法由于不必进行多次键的比较,所以其搜索速度非常快。

哈希链表的应用能够提高查找效率,哈希链表是一种数据结构,表头和节点的数据结构不同,这样在进行表头或者节点的删除插入以及遍历操作时可以采用统一操作。

目前实现哈希链表的方式主要是利用c语言等高级编程语言来进行软件实现,硬件实现与软件实现相比,有更快的速度、更高的效率以及更好的稳定性。

通常值的取值范围比哈希表地址集合大很多,因此有可能经过同一哈希函数的计算,把不同的值映射到了同一个键(地址)上面,从而产生地址冲突。如果“键-值对”在加入哈希表的时候产生了冲突,就必须分配一个额外的地址来解决冲突,冲突太多会降低数据插入和搜索的效率,因此本领域技术人员希望能找到一个不容易产生冲突的函数,即构造一个地址分布比较均匀的哈希函数来降低地址冲突。



技术实现要素:

针对哈希算法导致的地址冲突的问题所导致的数据插入和搜索效率的降低,本发明所述算法在现场可编程门阵列的器件实现上采用了一种基于双哈希的算法来降低冲突产生的概率,提高地址的分布均匀度,并且基于双哈希同时寻址,其相对于单哈希寻址在搜索效率上有了进一步的提高。

本发明所述的存储和查找网络地址转换表(存储ip和端口信息)的双哈希算法,用于在现场可编程门阵列中实现网络地址转换表的存储和查找,包括以下步骤:在现场可编程门阵列中例化一随机存储器;设置两个或以上的哈希函数用于存储前的哈希运算;对等待存储的(ip和端口值)进行哈希运算;获得在所述哈希运算的结果范围内的一存储地址;遍历读取所有对应所述存储地址的值;判断所有对应所述存储地址的值的情况;将等待存储的(ip和端口值)值存到对应的地址空间内。

在本发明的其他实施例中,所述ip地址还包括对应的端口。

在本发明的其他实施例中,当存储的表完成后,需要查询对应的值时,则通过对应地址进行查找。

在本发明的其他实施例中,所述随机存储器为双口随机存储器。

在本发明的其他实施例中,所述随机存储器的大小为16k*48bits。

在本发明的其他实施例中,所述ip地址和对应的端口为48bits。

在本发明的其他实施例中,所述随机存储器被配置为将每4k个地址作为一个桶的地址范围。

在本发明的其他实施例中,所述桶用于存储哈希算法结果冲突的多个存储值。

在本发明的其他实施例中,所述随机存储器通过ip核例化,并通过初始化文件把所述随机存储器的存储空间初始化为零。

在本发明的其他实施例中,所述存储和查找配置为分别进行或同时进行。

由于本发明是在现场可编程门阵列这类可编程硬件上的实现,其资源相对于在软件层面的实现来说,资源比较有限。因此本发明着重提出哈希函数对于地址空间(硬件资源)的更有效利用,而不是简单使用了拉链法解决了哈希冲突的问题,在软件层面的哈希函数具有足够多的硬件资源,无需考虑使用哈希函数所导致的资源空间利用率低的问题。

在技术实现难度上,由于现场可编程门阵列的特性,需要小心的处理其功能的实现和相对的有限资源。因此在一般的使用中采用双哈希算法(每个哈希函数4个桶一共为8个桶)来替代单哈希算法(每个哈希函数8个桶一共为8个桶)。当然也可以使用多哈希函数以及更多的桶深,但是一方面地址空间的利用率提升并不显著,并且增加了硬件资源的消耗。此外,如果资源足够多并且存储的数据过多可以适当增加双哈希函数的桶深。

另外,由于现场可编程门阵列并行的特性,在进行双哈希的插入和读取数据时可以并行进行,提升了哈希表的操作处理性能,而这是软件层面的哈希表处理方法所不具备的。

以下将结合附图对本发明的构思、具体结构及产生的技术效果作进一步说明,以充分地了解本发明的目的、特征和效果。

附图说明

图1为本发明实施提供的一种存储结构示意图;

图2为本发明实施提供的一种网络地址转换表学习流程图;

图3为本发明实施提供的一种网络地址转换表删除流程图。

具体实施方式

下面结合附图和具体实施方式对本发明做进一步描述。

本发明所述的技术方案,针对在网络地址转换表学习中采用的单哈希算法不足与缺点,提出了一种基于双哈希的算法,其主要原理为通过不同的哈希函数建立两张哈希列表,当有新的ip地址和端口需要学习的时候,经过第一个哈希函数的运算,后放入相应的地址空间,每个地址空间里可以存放四个不同的ip地址和端口,用于解决哈希冲突问题,当在同一个地址空间下的存放的ip地址和端口超过4个时(即冲突次数大于4时),则将ip地址和端口存放进第二个哈希表中。而在检索和删除ip地址和端口的时候,通过ip地址和端口的哈希运算获得对应的键,并通过键来获取存储的值。此外,由于硬件可以同时对两张表同时进行哈希运算,从而提高了网络地址转换表检索和删除效率和速度。

另外,由于第一张哈希表和第二张哈希表使用的是同一片地址空间,而通过对哈希函数的选择使得存放的数据可以更好的利用地址空间,提高了硬件资源的利用率和地址的分布均匀度。

在现场可编程门阵列的哈希表上的具体建立过程如下:

在现场可编程门阵列中例化1块16k*48bits大小的双口ram,作为哈希表的物理地址,当需要存储的内容需要进行存储时,然后将每4k个地址作为一个桶的地址范围,因此16k的地址范围代表了4个桶。

当有值(ip和端口号为48bits)需要存储时,经过哈希运算时,获得一个在0-4096范围内的一个地址值,此时会先遍历读取这4个桶所对应地址的值,双哈希函数的情况下会读取8个地址,并判断8个地址所存储值的情况,之后将值存到对应的地址空间内。

当表建立之后,需要查询对应的值时,则通过对应地址进行查找。

如图1所示,等待存储的ip地址及其端口,同时经过两个哈希函数(哈希函数1和哈希函数2)的运算,分别得到与哈希函数1对应的4个存储地址和与哈希函数2对应的4个存储地址中的一个存储地址,然后判断这个存储地址的链表长度和节点情况,之后将值存到对应的地址空间内。当表建立之后,需要查询对应的值时,则通过对应地址进行查找。

如图2所示,网络地址转换表的学习过程从收到ip和端口号开始,同时通过经过两个哈希函数(哈希函数1和哈希函数2)的运算,以哈希函数1为例,刚收到的ip和端口号,经过哈希函数1运算,得到哈希函数1的存储地址,然后查找这个存储地址上存储的内容,这时判断这个地址存储的内容是否为0,若不为0,说明这个地址已经存有内容,则需继续查找下一个桶(当前地址加4096)所在的地址是否有内容(为0),若仍已存内容则继续查找下一个桶,直到遍历完4个桶(进入下一个桶之前需判断是否超过4个桶);另一边,若查找到的地址上存储的内容确为0,仍需进一步遍历哈希函数1运算所得的地址内容是否有为0,若有则获取保存内容为0的哈希地址,并保存当前的ip和端口内容在该地址上。若遍历完哈希函数1运算所得的地址内容没有为0,则仍需遍历哈希函数2运算所得的地址内容是否有为0,若有则获取保存内容为0的哈希地址,并保存当前的ip和端口内容在该地址上,若没有则结束。哈希函数2运算流程和哈希函数1类似,这里就不再赘述。

如图3所示,网络地址转换表的删除从收到ip和端口号和哈希地址开始,找到这个哈希地址上存储的内容,判断是否与收到的ip和端口号一致,如果一致则清除该地址下的内容(置零),如果不一致,则再继续查找下一个桶,再次判断内容是否一致。另外,进入下一个桶之前需判断是否超过4个桶。

以上详细描述了本发明的较佳具体实施例。应当理解,本领域的普通技术无需创造性劳动就可以根据本发明的构思作出诸多修改和变化。因此,凡本技术领域中技术人员依本发明的构思在现有技术的基础上通过逻辑分析、推理或者有限的实验可以得到的技术方案,皆应在由权利要求书所确定的保护范围内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1