网络地址转换映射表的操作方法及装置与流程

文档序号:11156989阅读:561来源:国知局
网络地址转换映射表的操作方法及装置与制造工艺

本发明涉及互联网技术领域,尤其涉及一种网络地址转换映射表的操作方法及装置。



背景技术:

近年来,随着互联网的迅猛发展,接入互联网的主机数量成倍增长,联网使用的互联网协议(Internet Protocol,IP)的第四版IPv4协议中IP地址的长度选择了32位,IP地址的短缺已经成为互联网面临的最大问题之一。

为了解决IP地址短缺的问题,人们提出了许多解决方案。在众多的解决方案中,网络地址转换(Network Address Translation,NAT)技术得到了广泛的应用。NAT的基本工作原理是,当私有网主机和公共网主机通信的IP包经过NAT网关时,将IP包中的多个待转换IP地址转换为一个指定的公网IP地址,一定程度上节约了IP地址资待转换。

在实际的应用中,当防火墙接收到私有网需要向公共网络发送的报文时,需要通过NAT模块获取报文的待转换IP地址对应的转换后的公网IP地址,对于已经有待转换IP地址与转换后的公网IP地址转换关系的情况,只需要NAT模块查询已有的待转换IP地址与转换后IP地址之间的对应关系表,即网络地址转换NAT映射表;对于没有待转换IP地址与转换后的公网IP地址转换关系的情况,需要NAT模块从转换后的IP地址池中选择一个可用的IP地址,并将选出的IP地址与报文的待转换IP地址,对应的添加到NAT映射表中,以便下次遇到同样的待转换IP地址可以直接从NAT映射表中查询到转换后的IP地址。可以看到,对于每个接收到的报文来讲,NAT模块都需要先查询NAT映射表,并且还需要维持NAT映射表的超时机制。由于NAT映射表是全局表,在多核系统下,多核同时操作NAT映射全局表时,每个核对NAT映射全局表操作时通常需要加锁操作,即每次查找、维持NAT映射表的超时机制时都需要加锁操作,性能十分差,严重影响数据报文转发的效率。



技术实现要素:

鉴于上述问题,本发明提供一种网络地址转换映射表的操作方法及装置,用以解决现有多核系统中操作NAT映射表造成数据报文转发效率低的问题。

为解决上述技术问题,第一方面,本发明提供了一种网络地址转换映射表的操作方法,所述方法包括:

在获取到与待转换网间协议IP地址对应的公网IP地址后,判断NAT映射表中表项的数量是否超过预设阈值,所述NAT映射表存储有待转换IP地址和公网IP地址对应关系,该对应关系以表项的形式存在,所述表项以最近最少使用LRU链表的方式组织,所述NAT映射表的地址空间为通过内存池预先申请的长期有效的地址空间;

若未超过预设阈值,则对NAT映射表不进行加锁更新;

若超过预设阈值,则根据当前待转换IP地址对应的表项在所述NAT映射表中的位置确定是否对NAT映射表进行加锁更新。

可选的,根据当前待转换IP地址对应的表项在所述NAT映射表中的位置确定是否对NAT映射表进行加锁更新包括:

确定NAT映射表中的前N项;

判断当前待转换IP地址对应的表项是否位于所述NAT映射表中的前N项中,所述前N项对应NAT映射表中的预设常用表项;

若当前待转换IP地址对应的表项位于NAT映射表的前N项中,则对NAT映射表不进行加锁更新;

若当前待转换IP地址对应的表项不位于NAT映射表的前N项中,则对NAT映射表进行加锁更新。

可选的,所述确定NAT映射表中的前N项,包括:

初始化NAT映射表时,根据最大堆排序算法对NAT映射表中每个表项按照在预设时段内的操作次数的大小进行排序,将排序后的前N项确定为NAT映射表中的前N项;

初始化NAT映射表后,若预设单位时间内NAT映射表的加锁更新次数超过预设更新次数,则动态调整NAT映射表中的前N项。

可选的,所述动态调整NAT映射表中的前N项,包括:

若调整前的N值小于N的最大取值Y,将前N项扩大为前N1项,其中N1大于N,N1与N之间的关系如下,

N1=N+(Y-N)/10;

若调整前的N值大于等于N的最大取值Y,则对NAT映射表中表项按照最大堆排序算法进行重新排序,得到新的前N个表项。

可选的,若获取与待转换网间协议IP地址对应的公网IP地址的进程为内核态进程,所述确定NAT映射表中的前N项,包括:

生成获取NAT映射表中的前N项的获取消息;

将所述获取消息以消息机制发送给用户态进程,使用户态进程根据内核态进程发送的获取消息确定NAT映射表中的前N项后返回给内核态进程。

可选的,若获取与待转换网间协议IP地址对应的公网IP地址的进程为内核态进程,所述对NAT映射表进行加锁更新,包括:

生成对NAT映射表进行加锁更新的更新消息;

将所述更新消息发送至用户态进程,使用户态进程根据内核态进程发送的更新消息对NAT映射表进行加锁更新。

可选的,所述NAT映射表中的表项中还包括前项指针和后项指针,所述前项指针指向表项的前一表项,后项指针指向表项的后一表项,所述对NAT映射表进行加锁更新,包括:

将当前待转换IP地址对应的表项、NAT映射表中的第一个表项以及与当前待转换IP地址相邻的表项的前项指针和后项指针进行更新,以使当前待转换IP地址对应的表项为NAT映射表中的第一个表项。

可选的,所述获取到与待转换网间协议IP地址对应的公网IP地址,包括:

查找哈希表中是否有待转换IP地址,所述哈希表中记录待转换IP地址和待转换IP地址对应的表项的空间地址之间的对应关系;

若有待转换IP地址,则根据哈希表中待转换IP地址对应的表项的空间地址获取待转换IP地址对应的公网IP地址;

若没有待转换IP地址,则新建与待转换IP地址对应的表项,并将新建的表项的空间地址以及其中的待转换IP地址对应记录在哈希表中。

可选的,所述新建与待转换IP地址对应的表项,包括:

若获取到与待转换IP地址对应的公网IP地址的进程为用户态进程,则直接对NAT映射表进行加锁后,新建与待转换IP地址对应的表项;

若获取到与待转换IP地址对应的公网IP地址的进程为内核态进程,则生成新建表项的新建消息;

内核态进程将所述新建消息发送给用户态进程,以使用户态进程根据新建消息新建与待转换IP地址对应的表项。

可选的,在所述新建与待转换IP地址对应的表项方法之前,所述方法还包括:

判断所述NAT映射表的地址空间是否已满;

若地址空间已满,则对NAT映射表按照从后到前的顺序删除预设数量的表项,以使新建的表项可以添加到NAT映射表中。

可选的,所述对NAT映射表按照从后到前的顺序删除预设数量的表项,包括:

若获取到与待转换IP地址对应的公网IP地址的进程为用户态进程,则直接执行对NAT映射表按照从后到前的顺序删除预设数量的表项;

若获取到与待转换IP地址对应的公网IP地址的进程内核态进程,则生成对NAT映射表按照从后到前的顺序删除预设数量的表项的删除消息;

内核态进程将所述删除消息发送给用户态进程,以使用户态进程根据删除消息对NAT映射表按照从后到前的顺序删除预设数量的表项。

第二方面,本发明提供了一种网络地址转换映射表的操作装置,所述装置包括:

判断单元,用于在获取到与待转换网间协议IP地址对应的公网IP地址后,判断NAT映射表中表项的数量是否超过预设阈值,所述NAT映射表存储有待转换IP地址和公网IP地址对应关系,该对应关系以表项的形式存在,所述表项以最近最少使用LRU链表的方式组织,所述NAT映射表的地址空间为通过内存池预先申请的长期有效的地址空间;

第一更新单元,用于若未超过预设阈值,则对NAT映射表不进行加锁更新;

第二更新单元,用于若超过预设阈值,则根据当前待转换IP地址对应的表项在所述NAT映射表中的位置确定是否对NAT映射表进行加锁更新。

可选的,第二更新单元包括:

确定模块,用于确定NAT映射表中的前N项;

判断模块,用于判断当前待转换IP地址对应的表项是否位于所述NAT映射表中的前N项中,所述前N项对应NAT映射表中的预设常用表项;

第一更新模块,用于若当前待转换IP地址对应的表项位于NAT映射表的前N项中,则对NAT映射表不进行加锁更新;

第二更新模块,用于若当前待转换IP地址对应的表项不位于NAT映射表的前N项中,则对NAT映射表进行加锁更新。

可选的,所述确定模块用于:

初始化NAT映射表时,根据最大堆排序算法对NAT映射表中每个表项按照在预设时段内的操作次数的大小进行排序,将排序后的前N项确定为NAT映射表中的前N项;

初始化NAT映射表后,若预设单位时间内NAT映射表的加锁更新次数超过预设更新次数,则动态调整NAT映射表中的前N项。

可选的,所述确定模块还用于:

若调整前的N值小于N的最大取值Y,将前N项扩大为前N1项,其中N1大于N,N1与N之间的关系如下,

N1=N+(Y-N)/10;

若调整前的N值大于等于N的最大取值Y,则对NAT映射表中表项按照最大堆排序算法进行重新排序,得到新的前N个表项。

可选的,所述确定模块还用于:

若获取与待转换IP地址对应的公网IP地址的进程为内核态进程,生成获取NAT映射表中的前N项的获取消息;

将所述获取消息以消息机制发送给用户态进程,使用户态进程根据内核态进程发送的获取消息确定NAT映射表中的前N项后返回给内核态进程。

可选的,所述第二更新单元还包括:

更新消息生成模块,用于若获取与待转换IP地址对应的公网IP地址的进程为内核态进程,生成对NAT映射表进行加锁更新的更新消息;

更新消息发送模块,用于将所述更新消息发送至用户态进程,使用户态进程根据内核态进程发送的更新消息对NAT映射表进行加锁更新。

可选的,所述判断单元中的NAT映射表中的表项中还包括前项指针和后项指针,所述前项指针指向表项的前一表项,后项指针指向表项的后一表项,所述第二更新模块还用于:

将当前待转换IP地址对应的表项、NAT映射表中的第一个表项以及与当前待转换IP地址相邻的表项的前项指针和后项指针进行更新,以使当前待转换IP地址对应的表项为NAT映射表中的第一个表项。

可选的,所述装置还包括:

查找单元,用于查找哈希表中是否有待转换IP地址,所述哈希表中记录待转换IP地址和待转换IP地址对应的表项的空间地址之间的对应关系;

获取单元,用于若有待转换IP地址,则根据哈希表中待转换IP地址对应的表项的空间地址获取待转换IP地址对应的公网IP地址;

新建单元,用于若没有待转换IP地址,则新建与待转换IP地址对应的表项,并将新建的表项的空间地址以及其中的待转换IP地址对应记录在哈希表中。

可选的,所述新建单元,包括:

新建模块,用于若获取到与待转换IP地址对应的公网IP地址的进程为用户态进程,则直接对NAT映射表进行加锁后,新建与待转换IP地址对应的表项;

新建消息生成模块,用于若获取到与待转换IP地址对应的公网IP地址的进程为内核态进程,则生成新建表项的新建消息;

新建消息发送模块,用于内核态进程将所述新建消息发送给用户态进程,以使用户态进程根据新建消息新建与待转换IP地址对应的表项。

可选的,所述装置还包括:

第二判断单元,用于在所述新建与待转换IP地址对应的表项之前,判断所述NAT映射表的地址空间是否已满;

删除单元,用于若地址空间已满,则对NAT映射表按照从后到前的顺序删除预设数量的表项,以使新建的表项可以添加到NAT映射表中。

可选的,所述删除单元包括:

删除模块,用于若获取到与待转换IP地址对应的公网IP地址的进程为用户态进程,则直接执行对NAT映射表按照从后到前的顺序删除预设数量的表项;

删除消息生成模块,用于若获取到与待转换IP地址对应的公网IP地址的进程内核态进程,则生成对NAT映射表按照从后到前的顺序删除预设数量的表项的删除消息;

删除消息发送模块,用于内核态进程将所述删除消息发送给用户态进程,以使用户态进程根据删除消息对NAT映射表按照从后到前的顺序删除预设数量的表项。

借由上述技术方案,本发明提供的网络地址转换映射表的操作方法及装置,与现有技术相比,NAT映射表中的表项以最近最少使用(latest Recently Used,LRU)链表的方式组织,当用户态进程和内核态进程查询NAT映射表后,不需要每查询一次NAT映射表就对NAT映射表进行更新来维护NAT映射表的超时机制,而是当查询NAT映射表之后若当前NAT映射表中总的表项的数量没有超过预设阈值,则不对NAT映射表进行加锁更新,这样大大减少了对NAT映射表加锁更新的次数,减少了多核之间的竞争,因此一定程度上提高了整个数据转发系统的效率。

上述说明仅是本发明技术方案的概述,为了能够更清楚了解本发明的技术手段,而可依照说明书的内容予以实施,并且为了让本发明的上述和其它目的、特征和优点能够更明显易懂,以下特举本发明的具体实施方式。

附图说明

通过阅读下文优选实施方式的详细描述,各种其他的优点和益处对于本领域普通技术人员将变得清楚明了。附图仅用于示出优选实施方式的目的,而并不认为是对本发明的限制。而且在整个附图中,用相同的参考符号表示相同的部件。在附图中:

图1示出了本发明实施例提供的一种网络地址转换映射表的操作方法的流程图;

图2示出了本发明实施例提供的另一种网络地址转换映射表的操作方法的流程图;

图3示出了本发明实施例提供的一种NAT映射表的结构体示意图;

图4示出了本发明实施例提供的一种动态调整前N项的流程图;

图5示出了本发明实施例提供的一种对NAT映射表进行操作的示意图;

图6示出了本发明实施例提供的一种网络地址转换映射表的操作装置的组成框图;

图7示出了本发明实施例提供的另一种网络地址转换映射表的操作装置的组成框图。

具体实施方式

下面将参照附图更详细地描述本公开的示例性实施例。虽然附图中显示了本公开的示例性实施例,然而应当理解,可以以各种形式实现本公开而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本公开,并且能够将本公开的范围完整的传达给本领域的技术人员。

为解决解决现有多核系统中操作NAT映射表造成数据报文转发效率低的问题,本发明实施例提供了一种网络地址转换映射表的操作方法,如图1所示,该方法包括:

本发明实施例是基于多核异构平台下的数据转发系统,异构平台指通过不同的平台实现的数据转发,比如包括在用户态实现的快速数据包处理的库和驱动程序DPDK以及在内核态实现的X86操作系统。但是对于在用户态以及在内核态的进程都有对全局的NAT映射表的操作的需求。其中的操作包括查询NAT映射表中的表项、删除NAT映射表中的表项以及在NAT映射表中新建表项等。需要说明的是,NAT映射表包括源IP地址的映射表(Source IP mapaddr,Src map)和/或目的IP地址的映射表(Destination IP mapaddr,Dec map),Src map表中记录待转换的源IP地址与转换后的公网IP地址之间的对应关系,Dec map表中记录待转换的目的IP地址与转换后的公网IP地址之间的对应关系。另外还需要说明的是上述待转换IP地址是指内网IP地址。

101、判断NAT映射表中表项的数量是否超过预设阈值。

执行“判断NAT映射表中表项的数量是否超过预设阈值”是在获取到与待转换IP地址对应的公网IP地址后进行的,NAT映射表存储有待转换IP地址和公网IP地址对应关系,该对应关系以表项的形式存在。

为了维护NAT映射表的超时机制,本发明实施例使用最近最少使用算法(latest Recently Used,LRU)维护NAT映射表的超时机制。具体是将NAT映射表中的表项以LRU链表的方式组织,即常用的表项放在表头,不常用的表项在表尾,当NAT映射表的地址空间不充足时,将最不常用的表项替换出。

另外需要说明的是,NAT映射表的地址空间为通过内存池mempool预先申请的长期有效的地址空间;这样可以保证NAT映射表中表项的地址一直是有效的,即使是在表项删除时,也不会导致地址的失效。而现有采用的地址现用现申请的方式,在用完后便释放,而再次去访问释放的地址空间时已经失效。此外,本发明实施例中采用mempool申请地址空间的方式也是为了保证多核系统中用户态进程或者内核态进行无锁查询时可以保证数据查询的安全性。NAT映射表在用户态进程建立后,以共享内存的方式给内核态进程使用,使内核态进程可以同步查询到NAT映射表中与待转换IP地址对应的公网IP地址,没有延迟,提高了查询NAT映射表的速率。

本步骤中的预设阈值通常设计为实际NAT映射表所能容下的所有表项的70%、75%等小于100%的值。

102、若未超过预设阈值,则对NAT映射表不进行加锁更新。

每次查询完NAT映射表之后为了维护NAT映射表的超时机制,通常需要对NAT映射表进行更新。对于本本实施例使用的超时机制来讲即需要在每次查询完NAT映射表之后都需要将当前被调用的表项放在NAT映射表的表头实现对NAT映射表的更新,而由于NAT映射表是全局表,在多核系统中每次更新NAT映射表时都需要通过加锁进行更新。这样带来了多核竞争NAT映射表资待转换的问题,影响整个系统的性能。为了减少加锁更新的次数,本发明实施例设置超时机制开启的条件,即当NAT映射表中的总的表项的数量未超过预设阈值时,不对NAT映射表进行加锁更新。

103、若超过预设阈值,则根据当前待转换IP地址对应的表项在NAT映射表中的位置确定是否对NAT映射表进行加锁更新。

当NAT映射表中总的表项的数量超过预设阈值时,也不一定对NAT映射表进行加锁更新,还需要判断当前操作的表项在NAT映射表中的位置,根据具体的位置来决定是否对NAT映射表进行加锁更新,再次减少了对NAT映射表的加锁更新的次数,提高了系统的性能。

本发明实施例提供的网络地址转换映射表的操作方法,与现有技术相比,NAT映射表中的表项以最近最少使用(latest Recently Used,LRU)链表的方式组织,当用户态进程和内核态进程查询NAT映射表后,不需要每查询一次NAT映射表就对NAT映射表进行更新来维护NAT映射表的超时机制,而是当查询NAT映射表之后若当前NAT映射表中总的表项的数量没有超过预设阈值,则不对NAT映射表进行加锁更新,这样大大减少了对NAT映射表加锁更新的次数,减少了多核之间的竞争,因此一定程度上提高了整个数据转发系统的效率。

为了对图1所示方法的细化及扩展,本发明实施例还提供了一种网络地址转换映射表的操作方法,如图2所示:

201、查找哈希表中是否有待转换IP地址。

为了更方便地查找NAT映射表,本发明实施例将NAT映射表挂在哈希表上,哈希表中的索引建key为待转换IP地址,值value为待转换IP地址对应的表项的空间地址。因此在获取NAT映射表中与待转换IP地址对应的公网IP地址时,是通过查找哈希表中的key是否有待转换IP地址来判断是否存在包含待转换IP地址对应的表项。

202、若有待转换IP地址,则根据哈希表中待转换IP地址对应的表项的空间地址获取待转换IP地址对应的公网IP地址。

若哈希表中没有待转换IP地址,则新建与待转换IP地址对应的表项,并将新建的表项的空间地址以及其中的待转换IP地址对应记录在哈希表中。下述为建立新的表项的算法,以待转换地址为源IP地址为例:

Lock(srcmap_bucket)

Old_srcmap_head=bucket->next

new_srcmap=old_srcmap_head->next

bucket->next=new_srcmap

unlock(srcmap_bucket)

上述算法的主要含义是:在添加表项前,锁住哈希桶bucket,然后添加表项,添加完成后,释放锁。

另外需要说明的是,本实施例中为了维护NAT映射表的超时机制,是使用最近最少使用算法LRU算法维护NAT映射表的超时机制。具体是将NAT映射表中的表项以LRU链表的方式组织,常用的表项放在表头,不常用的表项在表尾,当NAT映射表的地址空间不充足时,将最不常用的替换出。

为了更清晰地表示NAT映射表的结构,给出NAT映射表的结构体示意图,如图3所示:其中左侧的表为哈希表,哈希表是索引建key和值value配对的集合,哈希表对象是由包含集合中元素的哈希桶bucket组成的。每个NAT映射表中表项对应的表项中包括Key_node和Map addr、prev和next指针以及uptime。Key_node代表待转换IP地址,Map addr代表待转换IP地址转换后对应的公网IP地址,prev和next指针分别指向的是表项在NAT映射表中的前一个表项和后一个表项,这样就可以表示出表项在以LRU链表组织后表项在NAT表中的位置或者顺序。图3中下方为通过LRU链表形式组织后NAT映射表中的表项的顺序展示图,其中每个data所在的节点表示一个表项。

203、判断NAT映射表中表项的数量是否超过预设阈值。

本步骤的实现方式与图1步骤101的实现方式是相同的,此处不再赘述。

204、若未超过预设阈值,则对NAT映射表不进行加锁更新。

本步骤的实现方式与图1步骤102的实现方式是相同的,此处不再赘述。

205、若超过预设阈值,判断当前待转换IP地址对应的表项是否位于NAT映射表中的前N项中。

其中,前N项对应NAT映射表中预设常用的表项,N为正整数。

在判断当前待转换IP地址对应的表项是否位于NAT映射表中的前N项中之前,首先需要确定NAT映射表中的前N项,具体的确定前N项方式为:

在初始化NAT映射表时,根据最大堆排序算法对NAT映射表中每个表项按照在预设时段内的操作次数的多少进行由多到少顺序排序,将排序后的前N项确定为NAT映射表中的前N项。需要说明的是,在实际应用中表明,使用最大堆排序算法相比于普通的排序算法,性能可以提升20倍以上,更进一步的提高了系统的性能。

初始化NAT映射表后,若预设单位时间内NAT映射表的加锁更新次数超过预设更新次数,则动态调整NAT映射表中的前N项。具体动态调整NAT映射表中的前N项的机制为:若调整前的N值小于N的最大取值Y,将前N项扩大为前N1项,其中Y值也是预设的,N1大于N,N1与N之间的关系如下,

N1=N+(Y-N)/10;

若调整前的N值大于等于N的最大取值Y,则对NAT映射表中表项按照最大堆排序算法进行重新排序,得到新的前N个表项。新的前N个表项中包含的表项与调整前的前N项表项中包含的表项通常是不尽相同的。

另外,需要说明的是,确定NAT映射表的前N项是在用户态执行的,当内核态进程在获取到与当前IP地址对应的公网IP地址之后,判断是否对NAT映射表进行加锁更新时,需要生成获取NAT映射表中的前N项的获取消息;然后将获取消息以消息机制发送给用户态进程,使用户态进程根据内核态进程发送的获取消息确定NAT映射表中的前N项后返回给内核态进程。

对于上述动态调整前N项的过程,对应给出具体的流程图,如图4所示。图4中首先是记录NAT映射表在预设单位时间内的更新次数,然后判断更新的总次数是否大于预设更新次数;若小于等于预设更新次数,则结束,即不对前N项进行调整,若大于预设更新次数,则继续判断N值是否小于Y值;若小于Y值,则按照上述公式进行对N进行扩大,得到新的N值,即N1,若大于等于Y值,则重新对NAT映射表中的表项重新按照最大堆排序算法进行重新排序,得到新的前N个表项。

206、若当前待转换IP地址对应的表项不位于NAT映射表的前N项中,则对NAT映射表进行加锁更新。

对NAT映射表进行加锁更新具体是:将当前待转换IP地址对应的表项、NAT映射表中的第一个表项以及与当前待转换IP地址相邻的表项的前项指针和后项指针进行更新,以使当前待转换IP地址对应的表项为NAT映射表中的第一个表项。

需要说明的是,若获取与待转换网间协议IP地址对应的公网IP地址的进程为内核态进程,在需要对NAT映射表进行加锁更新时:首先,生成对NAT映射表进行加锁更新的更新消息;然后,将更新消息发送至用户态进程,使用户态进程根据内核态进程发送的更新消息对NAT映射表进行加锁更新。

对于当前待转换IP地址对应的表项位于NAT映射表的前N项中的情况,则对NAT映射表不进行加锁更新。依照步骤205中动态调整前N项机制,可以尽可能的使最近常用的表项较大概率的位于前N项中。如果,每次查询的表项都可以保证在NAT映射表中的前N项,那么在查询NAT映射表以及维护NAT映射表超时机制的过程中都可以做到无锁,这样大大地提高了系统的性能。

对于上述步骤202中在哈希表中没有查找到待转换IP地址时,则新建与待转换IP地址对应的表项的方式具体包括以下两种情况:

第一种情况,若获取到与待转换IP地址对应的公网IP地址的进程为用户态进程,则直接对NAT映射表进行加锁后,新建与待转换IP地址对应的表项;

第二种情况,若获取到与待转换IP地址对应的公网IP地址的进程为内核态进程,则首先生成新建表项的新建消息:然后内核态进程将新建消息发送给用户态进程,以使用户态进程根据新建消息新建与待转换IP地址对应的表项。

另外,在新建与待转换IP地址对应的表项之前,还需要判断NAT映射表的地址空间是否已满;若地址空间已满,则对NAT映射表按照从后到前的顺序删除预设数量的表项,以使新建的表项可以添加到NAT映射表中。

具体的,对于删除预设数量的表项,包括以下两种情况:

第一种情况:若获取到与待转换IP地址对应的公网IP地址的进程为用户态进程,则直接执行对NAT映射表按照从后到前的顺序删除预设数量的表项;

第二种情况:若获取到与待转换IP地址对应的公网IP地址的进程内核态进程,则首先生成对NAT映射表按照从后到前的顺序删除预设数量的表项的删除消息;然后内核态进程将删除消息发送给用户态进程,以使用户态进程根据删除消息对NAT映射表按照从后到前的顺序删除预设数量的表项。

关于删除表项,在实际应用中还存在其他需要删除表项的情况,比如,当用户设置的进行网络地址转换的规则删除时,对应的表项也需要删除。

从图2的说明中,可以看到,内核态进程直接对NAT映射表进行的操作只有查询操作,其他的操作都需要以消息机制发送给用户态进程处理。这种内核态进程将除查询之外的所有对NAT映射表的操作都以消息机制的方式发送给用户态进程的设计方式可以减少异构平台下用户态进程和内核态进程同时对NAT映射表进行查询之外的操作时造成的系统稳定性降低的影响。其中,除了查询之外的操作主要包括新建表项以及删除表项。需要说明的是,由于内核态进程发送的新建表项以及删除表项的操作属于配置操作,不属于数据转发驱动,因此不关心延迟,因此使用消息机制虽然有延迟但是不会影响数据转发的效率。

下面给出异构平台下,对NAT映射表进行操作的示意图,如图5所示:

其中内核态进程只进行查询的操作,将删除以及新建等都以消息机制发送给用户态进程进行操作。其中kcore0、kcore1、kcore2、以及内核态Nat配置核运行在内核态,ucore0、ucore1、ucore2以及用户态管理核运行在用户态。

进一步的,作为对上述各实施例的实现,本发明实施例的另一实施例还提供了一种网络地址转换映射表的操作装置,用于实现上述图1以及图2所述的方法。如图6所示,该装置包括:第一判断单元31、第一更新单元32以及第二更新单元33。

第一判断单元31,用于在获取到与待转换网间协议IP地址对应的公网IP地址后,判断NAT映射表中表项的数量是否超过预设阈值,NAT映射表存储有待转换IP地址和公网IP地址对应关系,该对应关系以表项的形式存在,表项以最近最少使用LRU链表的方式组织,NAT映射表的地址空间为通过内存池预先申请的长期有效的地址空间;

为了维护NAT映射表的超时机制,本发明实施例使用最近最少使用算法(latest Recently Used,LRU)维护NAT映射表的超时机制。具体是将NAT映射表中的表项以LRU链表的方式组织,即常用的表项放在表头,不常用的表项在表尾,当NAT映射表的地址空间不充足时,将最不常用的表项替换出。

另外需要说明的是,NAT映射表的地址空间使用内存池mempool预先申请的长期有效的地址空间的方式可以保证NAT映射表中表项的地址一直是有效的,即使是在表项删除时,也不会导致地址的失效。而现有采用的地址现用现申请的方式,在用完后便释放,而再次去访问释放的地址空间时已经失效。此外,本发明实施例中采用mempool申请地址空间的方式也是为了保证多核系统中用户态进程或者内核态进行无锁查询时可以保证数据查询的安全性。NAT映射表在用户态进程建立后,以共享内存的方式给内核态进程使用,使内核态进程可以同步查询到NAT映射表中与待转换IP地址对应的公网IP地址,没有延迟,提高了查询NAT映射表的速率。

本步骤中的预设阈值通常设计为实际NAT映射表所能容下的所有表项的70%、75%等小于100%的值。

第一更新单元32,用于若未超过预设阈值,则对NAT映射表不进行加锁更新;

第二更新单元33,用于若超过预设阈值,则根据当前待转换IP地址对应的表项在NAT映射表中的位置确定是否对NAT映射表进行加锁更新。

在未超过预设阈值时,不对NAT映射表进行加锁更新,大大的减少了加锁更新的次数,提高了多核系统的性能。

如图7所示,第二更新单元33包括:

确定模块331,用于确定NAT映射表中的前N项;

判断模块332,用于判断当前待转换IP地址对应的表项是否位于NAT映射表中的前N项中,前N项对应NAT映射表中的预设常用表项;

第一更新模块333,用于若当前待转换IP地址对应的表项位于NAT映射表的前N项中,则对NAT映射表不进行加锁更新;

第二更新模块334,用于若当前待转换IP地址对应的表项不位于NAT映射表的前N项中,则对NAT映射表进行加锁更新。

对NAT映射表进行加锁更新具体是:将当前待转换IP地址对应的表项、NAT映射表中的第一个表项以及与当前待转换IP地址相邻的表项的前项指针和后项指针进行更新,以使当前待转换IP地址对应的表项为NAT映射表中的第一个表项。

确定模块331用于:

初始化NAT映射表时,根据最大堆排序算法对NAT映射表中每个表项按照在预设时段内的操作次数的大小进行排序,将排序后的前N项确定为NAT映射表中的前N项;

需要说明的是,在实际应用中表明,使用最大堆排序算法相比于普通的排序算法,性能可以提升20倍以上,更进一步的提高了系统的性能。

初始化NAT映射表后,若预设单位时间内NAT映射表的加锁更新次数超过预设更新次数,则动态调整NAT映射表中的前N项。

确定模块331还用于:

若调整前的N值小于N的最大取值Y,将前N项扩大为前N1项,其中N1大于N,N1与N之间的关系如下,

N1=N+(Y-N)/10;

若调整前的N值大于等于N的最大取值Y,则对NAT映射表中表项按照最大堆排序算法进行重新排序,得到新的前N个表项。

动态调整前N项机制,可以尽可能的使最近常用的表项较大概率的位于前N项中。如果,每次查询的表项都可以保证在NAT映射表中的前N项,那么在查询NAT映射表以及维护NAT映射表超时机制的过程中都可以做到无锁,这样大大地提高了系统的性能。

确定模块331还用于:

若获取与待转换IP地址对应的公网IP地址的进程为内核态进程,生成获取NAT映射表中的前N项的获取消息;

需要说明的是,确定NAT映射表的前N项是在用户态执行的。

将获取消息以消息机制发送给用户态进程,使用户态进程根据内核态进程发送的获取消息确定NAT映射表中的前N项后返回给内核态进程。

如图7所示,第二更新单元33还包括:

更新消息生成模块335,用于若获取与待转换IP地址对应的公网IP地址的进程为内核态进程,生成对NAT映射表进行加锁更新的更新消息;

更新消息发送模块336,用于将更新消息发送至用户态进程,使用户态进程根据内核态进程发送的更新消息对NAT映射表进行加锁更新。

第一判断单元31中的NAT映射表中的表项中还包括前项指针和后项指针,前项指针指向表项的前一表项,后项指针指向表项的后一表项,第二更新模块334还用于:

将当前待转换IP地址对应的表项、NAT映射表中的第一个表项以及与当前待转换IP地址相邻的表项的前项指针和后项指针进行更新,以使当前待转换IP地址对应的表项为NAT映射表中的第一个表项。

如图7所示,装置还包括:

查找单元34,用于查找哈希表中是否有待转换IP地址,哈希表中记录待转换IP地址和待转换IP地址对应的表项的空间地址之间的对应关系;

为了更方便地查找NAT映射表,本发明实施例将NAT映射表挂在哈希表上,哈希表中的索引建key为待转换IP地址,值value为待转换IP地址对应的表项的空间地址。因此在获取NAT映射表中与待转换IP地址对应的公网IP地址时,是通过查找哈希表中的key是否有待转换IP地址来判断是否存在包含待转换IP地址对应的表项。

为了更清晰地表示NAT映射表的结构,给出NAT映射表的结构体示意图,如图3所示:其中左侧的表为哈希表,哈希表是索引建key和值value配对的集合,哈希表对象是由包含集合中元素的哈希桶bucket组成的。每个NAT映射表中表项对应的表项中包括Key_node和Map addr、prev和next指针以及uptime。Key_node代表待转换IP地址,Map addr代表待转换IP地址转换后对应的公网IP地址,prev和next指针分别指向的是表项在NAT映射表中的前一个表项和后一个表项,这样就可以表示出表项在以LRU链表组织后表项在NAT表中的位置或者顺序。图3中下方为通过LRU链表形式组织后NAT映射表中的表项的顺序展示图,其中每个data所在的节点表示一个表项。

获取单元35,用于若有待转换IP地址,则根据哈希表中待转换IP地址对应的表项的空间地址获取待转换IP地址对应的公网IP地址;

新建单元36,用于若没有待转换IP地址,则新建与待转换IP地址对应的表项,并将新建的表项的空间地址以及其中的待转换IP地址对应记录在哈希表中。

如图7所示,新建单元36,包括:

新建模块361,用于若获取到与待转换IP地址对应的公网IP地址的进程为用户态进程,则直接对NAT映射表进行加锁后,新建与待转换IP地址对应的表项;

新建消息生成模块362,用于若获取到与待转换IP地址对应的公网IP地址的进程为内核态进程,则生成新建表项的新建消息;

新建消息发送模块363,用于内核态进程将新建消息发送给用户态进程,以使用户态进程根据新建消息新建与待转换IP地址对应的表项。

如图7所示,装置还包括:

第二判断单元37,用于在新建与待转换IP地址对应的表项之前,判断NAT映射表的地址空间是否已满;

删除单元38,用于若地址空间已满,则对NAT映射表按照从后到前的顺序删除预设数量的表项,以使新建的表项可以添加到NAT映射表中。

如图7所示,删除单元38包括:

删除模块381,用于若获取到与待转换IP地址对应的公网IP地址的进程为用户态进程,则直接执行对NAT映射表按照从后到前的顺序删除预设数量的表项;

删除消息生成模块382,用于若获取到与待转换IP地址对应的公网IP地址的进程内核态进程,则生成对NAT映射表按照从后到前的顺序删除预设数量的表项的删除消息;

删除消息发送模块383,用于内核态进程将删除消息发送给用户态进程,以使用户态进程根据删除消息对NAT映射表按照从后到前的顺序删除预设数量的表项。

从图6以及图7的说明中,可以看到,内核态进程直接对NAT映射表进行的操作只有查询操作,其他的操作都需要以消息机制发送给用户态进程处理。这种内核态进程将除查询之外的所有对NAT映射表的操作都以消息机制的方式发送给用户态进程的设计方式可以减少异构平台下用户态进程和内核态进程同时对NAT映射表进行查询之外的操作时造成的系统稳定性降低的影响。其中,除了查询之外的操作主要包括新建表项以及删除表项。需要说明的是,由于内核态进程发送的新建表项以及删除表项的操作属于配置操作,不属于数据转发驱动,因此不关心延迟,因此使用消息机制虽然有延迟但是不会影响数据转发的效率。

本发明实施例提供的网络地址转换映射表的操作装置,与现有技术相比,NAT映射表中的表项以最近最少使用(latest Recently Used,LRU)链表的方式组织,当用户态进程和内核态进程查询NAT映射表后,不需要每查询一次NAT映射表就对NAT映射表进行更新来维护NAT映射表的超时机制,而是当查询NAT映射表之后若当前NAT映射表中总的表项的数量没有超过预设阈值,则不对NAT映射表进行加锁更新,这样大大减少了对NAT映射表加锁更新的次数,减少了多核之间的竞争,因此一定程度上提高了整个数据转发系统的效率。

在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。

可以理解的是,上述方法及装置中的相关特征可以相互参考。另外,上述实施例中的“第一”、“第二”等是用于区分各实施例,而并不代表各实施例的优劣。

所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统,装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。

在此提供的算法和显示不与任何特定计算机、虚拟系统或者其它设备固有相关。各种通用系统也可以与基于在此的示教一起使用。根据上面的描述,构造这类系统所要求的结构是显而易见的。此外,本发明也不针对任何特定编程语言。应当明白,可以利用各种编程语言实现在此描述的本发明的内容,并且上面对特定语言所做的描述是为了披露本发明的最佳实施方式。

在此处所提供的说明书中,说明了大量具体细节。然而,能够理解,本发明的实施例可以在没有这些具体细节的情况下实践。在一些实例中,并未详细示出公知的方法、结构和技术,以便不模糊对本说明书的理解。

类似地,应当理解,为了精简本公开并帮助理解各个发明方面中的一个或多个,在上面对本发明的示例性实施例的描述中,本发明的各个特征有时被一起分组到单个实施例、图、或者对其的描述中。然而,并不应将该公开的方法解释成反映如下意图:即所要求保护的本发明要求比在每个权利要求中所明确记载的特征更多的特征。更确切地说,如下面的权利要求书所反映的那样,发明方面在于少于前面公开的单个实施例的所有特征。因此,遵循具体实施方式的权利要求书由此明确地并入该具体实施方式,其中每个权利要求本身都作为本发明的单独实施例。

本领域那些技术人员可以理解,可以对实施例中的设备中的模块进行自适应性地改变并且把它们设置在与该实施例不同的一个或多个设备中。可以把实施例中的模块或单元或组件组合成一个模块或单元或组件,以及此外可以把它们分成多个子模块或子单元或子组件。除了这样的特征和/或过程或者单元中的至少一些是相互排斥之外,可以采用任何组合对本说明书(包括伴随的权利要求、摘要和附图)中公开的所有特征以及如此公开的任何方法或者设备的所有过程或单元进行组合。除非另外明确陈述,本说明书(包括伴随的权利要求、摘要和附图)中公开的每个特征可以由提供相同、等同或相似目的的替代特征来代替。

此外,本领域的技术人员能够理解,尽管在此所述的一些实施例包括其它实施例中所包括的某些特征而不是其它特征,但是不同实施例的特征的组合意味着处于本发明的范围之内并且形成不同的实施例。例如,在下面的权利要求书中,所要求保护的实施例的任意之一都可以以任意的组合方式来使用。

本发明的各个部件实施例可以以硬件实现,或者以在一个或者多个处理器上运行的软件模块实现,或者以它们的组合实现。本领域的技术人员应当理解,可以在实践中使用微处理器或者数字信号处理器(DSP)来实现根据本发明实施例的发明名称(如网络地址转换映射表的操作装置)中的一些或者全部部件的一些或者全部功能。本发明还可以实现为用于执行这里所描述的方法的一部分或者全部的设备或者装置程序(例如,计算机程序和计算机程序产品)。这样的实现本发明的程序可以存储在计算机可读介质上,或者可以具有一个或者多个信号的形式。这样的信号可以从因特网网站上下载得到,或者在载体信号上提供,或者以任何其他形式提供。

应该注意的是上述实施例对本发明进行说明而不是对本发明进行限制,并且本领域技术人员在不脱离所附权利要求的范围的情况下可设计出替换实施例。在权利要求中,不应将位于括号之间的任何参考符号构造成对权利要求的限制。单词“包含”不排除存在未列在权利要求中的元件或步骤。位于元件之前的单词“一”或“一个”不排除存在多个这样的元件。本发明可以借助于包括有若干不同元件的硬件以及借助于适当编程的计算机来实现。在列举了若干装置的单元权利要求中,这些装置中的若干个可以是通过同一个硬件项来具体体现。单词第一、第二、以及第三等的使用不表示任何顺序。可将这些单词解释为名称。

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