本发明涉及网络技术领域,特别是涉及一种网络地址转换nat的资源分配方法及设备。
背景技术:
nat(网络地址转换,networkaddresstranslation)技术是目前解决ipv4地址缺乏的一种基本业务。natport-range技术,通过给用户指定nat地址的一块端口范围,使得溯源变得更加简单。a+p(地址加端口,addressplusport)技术,通过下发指定公网地址加该地址端口范围,使得用户用指定地址的端口范围进行网络地址转换。
在网络地址转换过程中,无论是v4到v4转换,还是v4和v6互转,都不可避免存在有状态转换,也就是转换设备如cgn(运营商级nat,carriergradenat)必须保存转换前后的信息。转换前后的信息,一般包括源ip、源port、目的ip、目的port、协议号、natip、natport。内网侧能看到源ip、源port、目的ip、目的port、协议号,本文称作内网侧会话。外网侧能看到源ip2(即natip)、源port2(即natport)、目的ip(dstip)、目的端口(dstport)、协议号(protocal),本文称作外网侧会话。
对于内网侧会话,快速建立对应的外网侧会话并相互关联起来,是nat转换的关键技术。建立外网侧会话时,分配相应的natip、natport是关键技术,本文称作资源分配。资源分配现有技术中,较多采用位图分配,一个natip最多65535个端口,多个用户可以共享这65535个端口。比如每个用户分配2048个端口,65535除2048为32,则一个natip最多给32个用户使用。当natip的65535个端口分配完则资源耗尽,用户无法新建连接。
技术实现要素:
为了克服上述缺陷,本发明要解决的技术问题是提供一种网络地址转换nat的资源分配方法及设备,用以解决nat地址不足的问题。
为解决上述技术问题,本发明中的一种网络地址转换nat的资源分配方法,所述方法包括:
根据用户的natip,在预设的端口分配表中分配nat端口分配表项;
根据所述nat端口分配表项建立所述用户的外网侧会话表,以完成创建外网侧会话。
为解决上述技术问题,本发明中的一种网络地址转换nat设备,包括存储器和处理器,所述存储器存储有网络地址转换nat的资源分配计算机程序,所述处理器执行所述程序,以实现如下步骤:
根据用户的natip,在预设的端口分配表中分配nat端口分配表项;
根据所述nat端口分配表项建立所述用户的外网侧会话表,以完成创建外网侧会话。
本发明有益效果如下:
本发明中方法及设备,通过用户的natip,在预设的端口分配表中分配nat端口分配表项,并根据所述nat端口分配表项建立所述用户的外网侧会话表,以完成创建外网侧会话,解决了同一用户使用相同nat地址的问题,以及用户的端口块分配方式,借助端口分配表扩大了nat地址的复用度,从而有效地解决了nat地址不够的问题。
附图说明
图1是本发明实施例中网络地址转换nat的资源分配方法的流程图;
图2是本发明实施例中端口分配示意图;
图3是本发明实施例中一可选地资源分配方法的流程图;
图4是本发明实施例中又一可选地资源分配方法的流程图;
图5是本发明实施例中一种网络地址转换nat设备的结构示意图。
具体实施方式
为了解决nat地址不足的问题,本发明提供了一种网络地址转换nat的资源分配方法及设备,以下结合附图以及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅用以解释本发明,并不限定本发明。
实施例一
如图1所示,本发明实施例提供一种网络地址转换nat的资源分配方法,所述方法包括:
s101,根据用户的natip,在预设的端口分配表中分配nat端口分配表项;
s102,根据所述nat端口分配表项建立所述用户的外网侧会话表,以完成创建外网侧会话。
本发明实施例通过用户的natip,在预设的端口分配表中分配nat端口分配表项,并根据所述nat端口分配表项建立所述用户的外网侧会话表,以完成创建外网侧会话,较好解决了同一用户使用相同nat地址的问题,以及用户的端口块分配方式,借助端口分配表扩大了nat地址的复用度,从而有效地解决了nat地址不够的问题。
如图2所示,以nat地址池中只有1个natip为例,如果有多个类似。nat端口段为一段端口范围,比如1-2048,2049-4096,该图描述了nat端口(简称端口)的复用示意。
在上述实施例的基础上,进一步提出上述实施例的变型。
在本发明实施例中,可选地,所述根据用户的natip,在预设的端口分配表中分配nat端口分配表项,包括:
根据用户的natip,在所述端口分配表中查找与已存在的外网侧会话表项不冲突的nat端口分配表项。
其中,所述nat端口分配表项包括预设的外网侧资源参数信息和端口数组portcurrent。
所述外网侧资源参数信息包括srcip2(natip)、dstip、dstport、protocal。
进一步地,所述根据用户的natip,在预设的端口分配表中查找与已存在的外网侧会话表项不冲突的表项,包括:
在与所述用户的natip对应的所述端口分配表中,从所述端口数组中选取端口数值,并赋值给nat端口值;
若所述nat端口值和所述外网侧资源参数信息与所述已存在的外网侧会话表项不冲突,则将所述nat端口值和所述外网侧资源参数信息作为所述nat端口分配表项。
进一步地,所述从所述端口数组中选取端口数值,并作为nat端口值,包括:
根据预设的累加步进值(例如1),通过累加的方式,从所述端口数组中选取端口数值;或者,
从所述端口数组中随机选取端口数值。
也就是说,本发明实施例中端口分配表项后续使用时,portcurrent采用累加方式,每新建1条外网侧会话累加1。也可以为随机方式,在指定的端口范围(即端口数组的范围)内进行随机分配。
其中,所述根据预设的累加步进值,通过累加的方式,从所述端口数组中选取端口数值,包括:
在所述端口数组中,根据所述累加步进值累加将当前的端口数值,直到将累加得到的端口数值赋值给nat端口值时,所述nat端口值和所述外网侧资源参数信息与所述已存在的外网侧会话表项不冲突。
例如,为每个natip的每个protocal、每个dstip、每个dstport维护一个portcurrent(范围可自定义,比如2048到65535)。将natip、protocal、dstip、dstport、portcurrent写成表,建立hash查找,从而生成端口分配表。
每新建1条外网侧会话,取对应端口分配表的portcurrent加1并赋值给srcport2(natport)。查找外网侧会话表,如果发现已经有相同srcip2(natip)、srcport2(natport)、dstip、dstport、protocal,则重复portcurrent加1。如果没有相同的外网侧会话表,则用分配到的srcport2(natport)组成外网侧nat会话插入。并建立外网侧会话表该表项的hash表值,便于快速查找。当1个natip给100个用户用时,这100个用户同时访问一个目的,portcurrent65535的累加冲突应该不会大。
以下一具体的场景,描述下本发明实施例的效果。现有的场景中,硬件部分由1台nat设备、5台具有网络通信功能的终端组成。终端1和终端2在内网;终端3、终端4、终端5在外网,作为服务器。
第一步:在nat设备上进行nat的相关配置:
(1)配置规则,11.1.1.2作为natip。比如:
ipnatpoolzte11.1.1.211.1.1.2prefiex24
ipnatinsidesourcelist1poolzteoverload
(2)配置nat内网侧接口,外网侧接口,比如:
interfacefei_1/1
ipaddress10.1.1.1255.255.255.0
interfacefei_1/2
ipaddress11.1.1.1255.255.255.0
第二步:配置终端。终端1地址为10.1.1.2,终端2地址为10.1.1.3。终端3地址为110.1.1.2,终端4地址为110.1.1.3,终端5地址为110.1.1.4。终端3、终端4、终端5上开启网页服务,在tcp80端口监听。
第三步:终端1访问终端3,形成内网侧分会表项1,形成外网侧会话表项1,形成端口分配表项第1条(portcurrent赋初值2048)。
终端1再次访问终端3,形成内网侧分会表项2,形成外网侧会话表项2,更新端口分配表项第1条(portcurrent从2048累加到2049)。
终端2访问终端3,形成内网侧分会表项3,形成外网侧会话表项3,更新端口分配表项第1条(portcurrent从2049累加到2050)。
终端1访问终端4,形成内网侧分会表项4,形成外网侧会话表项4,形成端口分配表项第2条(portcurrent赋初值2048)。
终端1访问终端5,形成内网侧分会表项5,形成外网侧会话表项5,形成端口分配表项第3条(portcurrent赋初值2048)。
第四步:在nat设备上查看表项,大概如下。
端口分配表:
外网侧会话表:
内网侧会话表:
在本发明实施例中,可选地,所述端口数组包括端口初始数值和端口最大数值;
其中,当所述累加得到的端口数值大于所述端口最大数值时,将所述累加得到的端口数值置回所述端口初始数值,并继续进一步累加,直到将进一步累加得到的端口数值赋值给nat端口值时,所述nat端口值和所述外网侧资源参数信息与所述已存在的外网侧会话表项不冲突。
例如,端口分配表项第一次使用时,portcurrent初始值(即端口初始数值)可以如下方式确定。可为固定值,比如2048。也可为命令配置值,比如对natip分配端口有范围限制的命令配置值。如果用户以端口块方式分配,可以为端口块起始端口号。也可为natip(或用户分配的端口块)下的累加值,累加值的初值可为固定值或命令配置值,该natip(或用户分配的端口块)每新建一条端口分配表项,该累加值加1,累加值到达最大值(端口最大数值)后又置回初始值。也可以采用随机分配,在指定的端口范围内进行随机分配。
在本发明实施例中,可选地,所述根据所述nat端口分配表项建立所述用户的外网侧会话表,以完成创建外网侧会话之后,包括:
将所端口分配表中预置的计数字段的会话计数sessioncount值加1,当加1后的会话计数值大于预设的阈值时,不再从所述端口分配表中分配nat端口分配表项;
当删除所述外网侧会话时,释放对应的nat端口分配表项,并将所述计数字段的会话计数值减1。
例如,为端口分配表表项增加计数字段,并设置sessioncount(初始值为0),分配给一个会话表项,sessioncount加1,释放一个会话表项,sessioncount减1。当该值大于一定值时,可以不再分配并返回错误。这样可以有效抑制冲突过大。
在本发明实施例中,可选地,所述根据用户的natip,在预设的端口分配表中查找与已存在的外网侧会话表项不冲突的nat端口分配表项之前,包括:
选取当前用户数最少的natip分配给所述用户;或者,
将预先分配natip的端口块资源分给所述用户;或者,
获取所述用户已经使用的natip。
例如,nat设备收到内网侧报文,需要新建会话时,分如下三种情况处理:
(1)如果该用户还没分配会话,则从natpool(nat资源池)中选一个当前用户数最少的natip分配资源。可以通过natip的共享率管理来做到。
(2)如果该用户已经分配会话,则使用前面用过的natip分配资源。可以通过用户管理来做到。
(3)可选,用户以预先分配natip的端口块(一个natip的一段端口范围,比如1到1024端口范围)方式分配资源。当natip的所有端口块都分完后,分配后的端口块可以再次、甚至多次分配给不同用户。也就是同一端口块可以被多个用户同时使用。
在本发明实施例中,可选地,所述根据用户的natip,在预设的端口分配表中分配nat端口分配表项,包括:
根据与所述natip对应的端口位图分配所述nat端口分配表项;
在所述端口位图耗尽时,根据用户的natip,在预设的端口分配表中分配nat端口分配表项。
例如,natip启用端口位图,每1位表示1个端口。从端口位图分配端口,分配出去一个端口置上相应位,回收一个端口清除相应位。优先分配端口位图,当端口位图耗尽才使用端口分配表项复用端口分配。有某一端口的会话表项时端口位图置上相应位,某一端口的所有会话表项删除时端口位图清除相应位(可以将相同natip、相同nat端口及相同协议号的会话表项通过hash表组织,或者对每个端口进行使用计数)。这样能保证所有端口被使用完后,再进行端口复用。
在本发明实施例中,可选地,所述根据所述nat端口分配表项建立所述用户的外网侧会话表,以完成创建外网侧会话之后,包括:
建立内网侧会话表,以完成内网侧会话;
关联所述外网侧会话和所述内网侧会话,并分别在所述外网侧会话表和所述内网侧会话表中加上对方的表项索引。
例如,外网侧会话建立好后,建立对应的内网侧会话。表项包括字段:srcip、srcport、dstip、dstport、protocal。
建立该表项的hash表值,便于快速查找。
在两侧会话表项建立好后,关联内网侧会话和外网侧会话,在各自的表项中加上对方的表项索引。
内网侧会话和外网侧会话可以是同一张会话表,端口复用表也可以与会话表共用公共字段,在表项中处理不同hash冲突链,本发明实施例中为描述方便而分开。
以下举例说明本发明实施例。
如图3所示,资源分配流程包括:
步骤11,nat设备收到内网侧报文,用户需要新建会话表项。
步骤12,获取用户的natip。
步骤13,查找端口分配表项,判断是否已经存在。
步骤14,若存在,portcurrent加1,组成外网侧会话表项,查询外网侧会话表是否有相同的会话表项,若有相同,portcurrent加1,若不相同,执行步骤16。
步骤15,若不存在,新建端口分配表项,portcurrent初值,执行步骤16。
步骤16,新建外网侧会话表项。
步骤17,新建内网侧会话表项,并且关联内外会话表项。
如图4所示,资源分配流程包括:
步骤21,nat设备收到内网侧报文,用户需要新建会话表项。
步骤22,获取用户的natip。
步骤23,查找端口位图,是否能分配端口查找端口分配表项,若是,执行步骤24,若否,执行步骤27。
步骤24,分配端口,查找端口分配表项,是否存在,若存在执行步骤26,若不存在执行步骤27。
步骤25,新建端口分配表项,portcurrent置初值。使用分配端口组成外网侧会话表项,执行步骤30。
步骤26,端口分配表项sessioncount加1,portcurrent值分配端口,使用分配端口组成外网侧会话表项,执行步骤30。
步骤27,查找端口分配表项,是否已经存在。若否,执行步骤28,若是,执行步骤29。
步骤28,新建端口分配表项,portcurrent置初值,组成外网侧会话表项,执行步骤30。
步骤29,portcurrent加1,组成外网侧会话表项。查询外网侧会话表是否有相同会话表项,若有相同,portcurrent加1,若不相同,执行步骤30。
步骤30,新建外网侧会话表项。
步骤31,新建内网侧会话表项,并且关联内外会话表项。
实施例二
本发明实施例提供一种网络地址转换nat设备,所述nat设备包括存储器和处理器,所述存储器存储有网络地址转换nat的资源分配计算机程序,所述处理器执行所述程序,以实现如实施例一中任意一项所述方法的步骤。
本发明实施例通过用户的natip,在预设的端口分配表中分配nat端口分配表项,并根据所述nat端口分配表项建立所述用户的外网侧会话表,以完成创建外网侧会话,较好解决了同一用户使用相同nat地址的问题,以及用户的端口块分配方式,借助端口分配表扩大了nat地址的复用度,从而有效地解决了nat地址不够的问题。
具体说,所述处理器执行所述程序,以实现如下步骤:
根据用户的natip,在预设的端口分配表中分配nat端口分配表项;
根据所述nat端口分配表项建立所述用户的外网侧会话表,以完成创建外网侧会话。
在本发明实施例中,可选地,所述根据用户的natip,在预设的端口分配表中分配nat端口分配表项,包括:
根据用户的natip,在所述端口分配表中查找与已存在的外网侧会话表项不冲突的nat端口分配表项。
其中,所述nat端口分配表项包括预设的外网侧资源参数信息和端口数组。
在本发明实施例中,可选地,所述根据用户的natip,在预设的端口分配表中查找与已存在的外网侧会话表项不冲突的表项,包括:
在与所述用户的natip对应的所述端口分配表中,从所述端口数组中选取端口数值,并赋值给nat端口值;
若所述nat端口值和所述外网侧资源参数信息与所述已存在的外网侧会话表项不冲突,则将所述nat端口值和所述外网侧资源参数信息作为所述nat端口分配表项。
在本发明实施例中,可选地,所述从所述端口数组中选取端口数值,并作为nat端口值,包括:
根据预设的累加步进值,通过累加的方式,从所述端口数组中选取端口数值;或者,
从所述端口数组中随机选取端口数值。
进一步地,所述根据预设的累加步进值,通过累加的方式,从所述端口数组中选取端口数值,包括:
在所述端口数组中,根据所述累加步进值累加将当前的端口数值,直到将累加得到的端口数值赋值给nat端口值时,所述nat端口值和所述外网侧资源参数信息与所述已存在的外网侧会话表项不冲突。
进一步地,所述端口数组包括端口初始数值和端口最大数值;
当所述累加得到的端口数值大于所述端口最大数值时,将所述累加得到的端口数值置回所述端口初始数值,并继续进一步累加,直到将进一步累加得到的端口数值赋值给nat端口值时,所述nat端口值和所述外网侧资源参数信息与所述已存在的外网侧会话表项不冲突。
在本发明实施例中,可选地,所述根据所述nat端口分配表项建立所述用户的外网侧会话表,以完成创建外网侧会话之后,包括:
将所端口分配表中预置的计数字段的会话计数值加1,当加1后的会话计数值大于预设的阈值时,不再从所述端口分配表中分配nat端口分配表项;
当删除所述外网侧会话时,释放对应的nat端口分配表项,并将所述计数字段的会话计数值减1。
在本发明实施例中,可选地,所述根据用户的natip,在预设的端口分配表中查找与已存在的外网侧会话表项不冲突的nat端口分配表项之前,包括:
选取当前用户数最少的natip分配给所述用户;或者,
将预先分配natip的端口块资源分给所述用户;或者,
获取所述用户已经使用的natip。
在本发明实施例中,可选地,所述根据用户的natip,在预设的端口分配表中分配nat端口分配表项,包括:
根据与所述natip对应的端口位图分配所述nat端口分配表项;
在所述端口位图耗尽时,根据用户的natip,在预设的端口分配表中分配nat端口分配表项。
在本发明实施例中,可选地,所述根据所述nat端口分配表项建立所述用户的外网侧会话表,以完成创建外网侧会话之后,包括:
建立内网侧会话表,以完成内网侧会话;
关联所述外网侧会话和所述内网侧会话,并分别在所述外网侧会话表和所述内网侧会话表中加上对方的表项索引。
本发明实施例在具体实现时可以参阅实施例一,具有实施例一的技术效果。
实施例三
本发明实施例提供一种计算机可读存储介质,所述介质存储有网络地址转换nat的资源分配计算机程序,所述程序被至少一个处理器执行时,以实现如实施例一中任意一项所述方法的步骤。
本发明实施例中计算机可读存储介质可以是ram存储器、闪存、rom存储器、eprom存储器、eeprom存储器、寄存器、硬盘、移动硬盘、cd-rom或者本领域已知的任何其他形式的存储介质。可以将一种存储介质藕接至处理器,从而使处理器能够从该存储介质读取信息,且可向该存储介质写入信息;或者该存储介质可以是处理器的组成部分。处理器和存储介质可以位于专用集成电路中。
本发明实施例在具体实现时,可以参阅实施例一和实施例二,基于相应的技术效果。
以上所述的具体实施方式,对本发明的目的、技术方案和有益效果进行了进一步详细说明,所应理解的是,以上所述仅为本发明的具体实施方式而已,并不用于限定本发明的保护范围,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。