发明内容
本发明的目的在于克服上述现有技术的缺点,提供一种可重复使用地址
池资源、占用内存少且维护简单的地址资源利用方法,有效地解决Internet的
地址短缺问题。
本发明提供了一种网络地址资源的利用方法,用于在网络地址转换中进
行公有地址分配和转换,该方法包括步骤:
建立一个地址池HASH表,所述地址池表示一组连续的公有地址,所述地
址池HASH表的内容对应公有地址资源;
根据内部网络用户数据流的目的三元组“协议号+目的IP地址+目的端口
号”从所述地址池HASH表中取出对应的公有“IP地址+端口号”对;
根据所述内部网络用户数据流的五元组“源IP地址+源端口号+协议号+
目的IP地址+目的端口号”及所述公有“IP地址+端口号”对,分别建立正向
网络地址转换关系表和反向网络地址转换关系表。
优选地,所述建立一个地址池HASH表的步骤包括:设定所述地址池
HASH表的大小为64K的2N(N=0,1,2...)倍。
可选地,所述建立一个地址池HASH表的步骤包括:设定所述地址池
HASH表对应2N(N=0,1,2,...)个IP地址。
优选地,所述建立一个地址池HASH表的步骤包括:设定所述地址池
HASH表的每个表项的内容为一个计数器,所述计数器表示所有公有地址资源
的分配指针。
可选地,所述设定所述地址池HASH表的每个表项的内容为一个计数器的
步骤包括:设定所述计数器的位数为16+N(N=0,1,2,...)。
可选地,所述建立一个地址池HASH表的步骤包括:设定所述地址池
HASH表的每个表项的内容为两个计数器,其中,第一个计数器表示所有公有
地址资源的分配指针,另一个计数器用于对所述第一个计数器对应的地址资
源分配计数。
优选地,所述根据内部网络用户数据流的目的三元组“协议号+目的IP地
址+目的端口号”从所述地址池HASH表中取出对应的公有“IP地址+端口号”
对的步骤包括步骤:
取内部网络用户数据流的目的三元组“协议号+目的IP地址+目的端口
号”进行HASH运算,得到一个HASH值,
以所述HASH值查找所述地址池HASH表,
取出所述HASH值对应的所述地址池中的表项,
根据取出的所述地址池中的表项取得所述公有“IP地址+端口号”对。
可选地,所述根据取出的所述地址池中的表项取得所述公有“IP地址+端
口号”对的步骤包括步骤:
根据所述取出的所述地址池中的表项取得所述表项对应的计数器的值,
由所述计数器的值高16位取得所述内部网络用户数据流的目的三元组
“协议号+目的IP地址+目的端口号”对应的公有端口号,
由所述计数器的值减去高16位后剩余的低位取得所述内部网络用户数据
流的目的三元组“协议号+目的IP地址+目的端口号”对应的公有IP地址。
可选地,所述由所述计数器的值减去高16位后剩余的低位取得所述内部
网络用户数据流的目的三元组“协议号+目的IP地址+目的端口号”对应的公
有IP地址的步骤包括步骤:
建立一个公有IP地址索引表,所述公有IP地址索引表的内容表示公有IP地
址,
取得所述计数器的值减去高16位后剩余的值,
以所述剩余的值作为索引值,查找所述公有IP地址索引表,
取出所述公有IP地址索引表中对应所述索引值的公有IP地址。
可选地,所述根据所述内部网络用户数据流的五元组“源IP地址+源端口
号+协议号+目的IP地址+目的端口号”及所述公有“IP地址+端口号”对,分
别建立正向网络地址转换关系表和反向网络地址转换关系表的步骤包括步
骤:
对数据流五元组“源IP地址+源端口号+协议号+目的IP地址+目的端口
号”及所述公有“IP地址+端口号”对进行HASH运算,分别生成正向网络地
址转换表项和反向网络地址转换表项;
将生成的所述正向网络地址转换表项插入所述正向网络地址转换关系表
中;
如果所述正向网络地址转换关系表中已有一个同样的表项,则对所述内
部网络用户重新分配公有地址;
将生成的所述反向网络地址转换表项插入所述反向网络地址转换关系表
中。
由于在网络地址转换中采用了上述网络地址资源利用方法,使得地址池
资源可以动态重复使用,提高了地址资源的利用率,这样,对只申请到少量
IP地址但却经常同时有多个用户上外部网络的情况,这种转换极为有用。
具体实施方式
在结合附图和实施方式对本发明作进一步的详细说明之前,首先对地址
池的公有地址资源可以动态复用的原理作一详细说明:
NAT技术通过地址复用来提高对已注册地址的有效利用率。NAT技术中
具体的IP地址复用方法是:在内部网中使用私有的虚拟地址,即由Internet地
址分配委员会(IANA)所保留的几段私有网络IP地址。由于这部分地址的路由
信息被禁止出现在Internet骨干网络中,所以如果在Internet中使用这些地址是
不会被任何路由器正确转发的,因而也就不会因大家都使用这些地址而相互
之间发生冲突。在边界路由器中设置一定的地址转换关系表并维持一个注册
的真实IP地址池(IP Pool),通过路由器中的转换功能将内部的虚拟地址映射为
相应的注册地址,使得内部主机可以与外部主机间透明地进行通信。
NAT技术的一般形式为:NAT网关依据一定的规则,对所有进出的数据
包进行源与目的地址识别,并将由内向外的数据包中源地址替换成一个真实
地址(注册过的合法地址),而将由外向内的数据包中的目的地址替换成相应的
虚地址(内部用的非注册地址)。从网关的出入方向看,NAT有正向转换(也称
为入向转换,inbound)、反向转换(也称为出向转换,outbound)和双向转换(bi-
directional)3种形式。从转换对应关系的角度来看,NAT还可分为静态转换和
动态转换。所谓静态转换就是在网关上预先设置好虚拟地址与实际地址的一
一对应关系,在工作时不作实时更改;而动态转换则无需预先设置,直接由
网关在运行时根据网络连接和地址空间的使用情况自行决定地址对应关系。
在网络地址转换中,地址转换关系表至少记录有分配的地址、端口信
息,还可以进一步记录会话流的状态、动作、时间戳状态信息,此时地址转
换关系表又可称为流状态表。
以TCP/UDP协议为例,对于TCP/UDP协议的会话,其中TCP
(Transmission Control Protocol)为传输控制协议,UDP(User Datagram
Protocol)为用户数据报协议,TCP和UDP是TCP/IP(Transmission Control
Protocol/Internet Protocol)协议中的两个传输层协议,它们使用IP路由功能把数
据包发送到目的地,从而为应用程序及应用层协议提供网络服务。这两种协
议都可以根据用户数据流的五元信息组“协议号+IP源地址+TCP/UDP源端口
号+IP目的地址+TCP/UDP目的端口号”来进行唯一性的标识;
进行正向地址转换时,由于不同用户的IP地址和端口号必然不相同,因
此,仅由用户数据流的二元信息组“源IP地址+TCP/UDP源端口号”就可唯一
标识一个数据流;而进行反向地址还原时,使用用户数据流的五元信息组
“协议号+IP源地址+TCP/UDP源端口号+IP目的地址+TCP/UDP目的端口号”
来唯一标识一个数据流。所以,当用户访问的目的三元组“协议号+IP目的地
址+TCP/UDP目的端口号”不同时,即使从地址池中分配相同的公有地址资源
(“IP地址+TCP/UDP端口号”对),也不会带来冲突;另一方面,如果用户
访问的目的三元组“协议号+IP目的地址+TCP/UDP目的端口号”相同,则需
要分配不同的公有地址池资源(“IP地址+TCP/UDP端口号”对)来区分不同
的数据流。由此可见,对于每一个目的三元组,地址池的公有地址资源可以
重复利用。以用户数据流的目标五元组“IP地址+TCP/UDP端口号+目的三元
组”为关键字(KEY)查找地址转换关系表,就可以确定唯一的转换表项,
达到地址池资源公有地址复用的目的。
对于其它协议,地址池的公有地址资源也可以重复利用:
例如:对于ICMP协议的会话,其中ICMP(Internet Control Message
Protocol)为网际控制报文协议,ICMP查询会话可以由源IP地址、目的IP地址
和ICMP查询号来标识,因此可以用“目的IP地址+协议号+ICMP类型”来标
志不同的目的,以用户数据流的目标三元组“目的IP地址+协议号+ICMP类
型”为关键字(KEY)查找地址转换关系表,就可以确定唯一的转换表项,
达到地址池资源公有地址复用的目的;
对于其它的协议,至少也可以用数据流的二元组“目的IP地址+协议类
型”来来标志不同的目的,并据此复用地址池公有地址资源。
下面结合附图和实施方式对本发明作进一步的详细说明:
参照图3,图3描述了本发明的优选实施例网络地址资源的利用方法的步
骤的流程:
首先在步骤31建立一个地址池HASH表,所述地址池表示一组连续的公有
地址,所述地址池HASH表的内容对应公有地址资源,所述地址池HASH表的
大小为64K的2N(N=0,1,2…)倍。其中,N的取值直接决定了地址的复用率,N
取得越大,目标空间就划分得越细,从而地址池可重复利用的次数也就越
多。比如N=16时,地址池HASH表的大小为64K,也就是每个地址池资源最多
可能复用64k次,而N=0时,就退化为了传统的没有复用的地址资源分配方
式,即一个地址池资源只能同时被一个连接使用。同时,注意到N取得越大
时,消耗的内存也越多。因此N的取值要在复用率和地址空间消耗这两个因素
中权衡。下文将参照图4和图5对所述地址池HASH表的具体内容和结构进行详
细描述。
再参照图3,建立地址池HASH表后,进到步骤32,取内部网络用户数据
流的目的三元组“协议号+目的IP地址+目的端口号”进行HASH运算,得到一
个HASH值,对应64K的地址池HASH表得到的HASH值为16位(即地址池
HASH表的大小为216=64K),对应128K的地址池HASH表得到的HASH值为17
位(即地址池HASH表的大小为217=128K),依此类推;
得到HASH值后,进到步骤33,以得到的HASH值查找上述地址池HASH
表;
然后,进到步骤34,取出地址池HASH表中的对应表项;
取出地址池HASH表中的对应表项后,进到步骤35,根据取出的地址池
HASH表中的对应表项取得对应内部网络用户数据流的目的三元组“协议号+
目的IP地址+目的端口号”的公有“IP地址+端口号”对;
然后,进到步骤36,对目标五元组“源IP地址+源端口号+协议号+目的
IP地址+目的端口号”及公有“IP地址+端口号”进行HASH运算,分别生成
正向网络地址转换表项和反向网络地址转换表项;
然后,进到步骤37,判断正向网络地址转换表中是否已有与上述生成的
正向网络地址转换表项相同的表项,
如果有相同的表项,则返回步骤34,对所述内部网络用户重新分配
公有地址,
如果没有相同的表项,则进到步骤38,将生成的正向网络地址转换
表项插入到正向网络地址转换关系表中;
然后,进到步骤39,将生成的反向网络地址转换表项插入到反向网络地
址转换关系表中。
按照图3所示的本发明的优选实施例网络地址资源的利用方法的步骤的流
程,如有连接删除时,直接删除NAT转换关系表中的对应的转换表项,对地
址池没有操作。
对于图3描述的本发明的优选实施例网络地址资源的利用方法的步骤的流
程,不仅适用于TCP/UDP连接,对基于其它协议的连接同样适用,只要使用
相应的地址转换关系表的查找KEY。
参照图4,图4描述了本发明的优选实施例网络地址资源的利用方法中一
个64K的地址池HASH表的内容和结构:
地址池HASH表由64K个表项组成,每个表项的内容Counter1,
Counter2,...,Counter64K分别是一个计数器,这些计数器的位数相同,并且
由地址池HASH表对应IP地址个数的不同而不同:
设定地址池HASH表对应2N(N=0,1,...)个IP地址,则地址池HASH表中
每个表项代表的计数器的位数为16+N(N=0,1,...),
例如:如果地址池HASH表对应1个IP地址,则N=0,地址池HASH表中每
个表项代表一个16位的计数器;如果地址池HASH表对应2个IP地址,则
N=1,地址池HASH表中每个表项代表一个17位的计数器。
其中,每个计数器对应了公有地址资源的逻辑分配指针。
在本发明中,需要建立一个公有IP地址索引表,该公有IP地址索引表的每
一项对应一个索引号和一个公有IP地址。下面介绍如何通过地址池HASH表中
每个表项所代表的计数器及所述公有IP地址索引表查找公有“IP地址+端口
号”对。
计数器的高16位代表了要转换的公有端口号,计数器的低N位表示要转换
的公有IP地址索引表的索引号,前面提到地址池HASH表对应的IP地址个数不
同,则地址池HASH表中每个表项的位数不同。如果地址池HASH表只对应1
个IP地址,则计数器为16位,减去高16位后剩余低位为0位(即N=0),即IP
地址索引号为0,对应公有IP地址索引表中的第1个公有IP地址;如果地址池
HASH表对应2个IP地址,则计数器为17位,减去高16位后剩余低位为1位(即
N=1),分别表示为0和1,即IP地址索引号分别为0和1,0对应公有IP地址索
引表中的第一个公有IP地址,1对应公有IP地址索引表中的第2个公有IP地址,
依此类推。
图5描述了本发明的优选实施例网络地址资源的利用方法中一个128K的地
址池HASH表的内容和结构,此地址池HASH表的内容和结构与图4所示的地
址池HASH表相同,只是此表的容量更大,有128K,也就是说有128K个表
项。
再参照图3本发明的优选实施例网络地址资源的利用方法的步骤的流程
图,其中步骤34取出地址池HASH表中的对应表项的步骤包括步骤:地址池
HASH表采用图4和图5所示的内容和结构时,取出地址池HASH表中的对应表
项后同时刷新上述地址池HASH表中每个表项代表的计数器,具体操作为将该
计数器值加1后回写,即表示指向下一个公有地址资源。如果计数器的值溢
出,则计数器的值复位,从0开始计数。这样,如果一个地址池HASH表对应
多个IP地址时,公有地址的分配是使IP地址域先进行轮转。
在图3所示的本发明的优选实施例中,在有大量内部用户同时通过NAT访
问同一个外部网络地址时,会有一定概率的冲突。
假定多个用户同时对同一目的地址发出5K个连接请求,在地址池仅有一
个IP地址时,该目的地址上可能引起冲突的概率为5K/64K=0.08,也即有8%的
连接建立时,要重新分配一次地址资源。
为了减少地址分配时的冲突概率,可以限定在一个目标HASH空间的地址
池资源分配不得超过一个数值(比如30%),以使NAT始终以较快速度响应
用户的请求,可以采用图6所示的地址池HASH表的内容和结构方式。
参照图6,图6描述了本发明的优选实施例网络地址资源的利用方法中一
种优选地址池HASH表的内容和结构:地址池HASH表由64K个表项组成,每
个表项的内容分别为两个计数器,Counter1、Counter1′,Counter2、
Counter2′,...,Counter64K、Counter64K′。
其中计数器Counter1,Counter2,...,Counter64K和图4所示的本发明的
优选实施例网络地址资源的利用方法中一个64K的地址池HASH表的内容和结
构中所述的计数器Counter1,Counter2,...,Counter64K相同,用于公有地址
资源的分配。
这些计数器的位数相同,并且由地址池HASH表对应IP地址个数的不同而
不同:
设定地址池HASH表对应2N(N=0,1,...)个IP地址,则地址池HASH表中
每个表项代表的计数器的位数为16+N(N=0,1,...),
例如:如果地址池HASH表对应1个IP地址,则N=0,地址池HASH表中每
个表项代表一个16位的计数器;如果地址池HASH表对应2个IP地址,则
N=1,地址池HASH表中每个表项代表一个17位的计数器。
其中,每个计数器对应了公有地址资源的逻辑分配指针。
计数器的高16位代表了要转换的公有端口号,计数器的低N位表示要转换
的公有IP地址索引表的索引号,前面提到地址池HASH表对应的IP地址个数不
同,则地址池HASH表中每个表项的位数不同。如果地址池HASH表只对应1
个IP地址,则计数器为16位,减去高16位后剩余低位为0位(即N=0),即IP
地址索引号为0,对应公有IP地址索引表中的第1个公有IP地址;如果地址池
HASH表对应2个IP地址,则计数器为17位,减去高16位后剩余低位为1位(即
N=1),分别表示为0和1,即IP地址索引号分别为0和1,0对应公有IP地址索
引表中的第一个公有IP地址,1对应公有IP地址索引表中的第2个公有IP地址,
依此类推。
其中计数器Counter1′,Counter2′,...,Counter64K′用于对在同一表
项中计数器对应的地址资源分配计数,其位数取决于允许同时有多少个地址
被分配使用。如果最多允许在一个目标HASH空间的地址池资源同时分配出去
一半地址,则Counter1′比Counter1少1位,其它用于地址资源分配计数的计
数器Counter2′,...,Counter64K′依此类推;如果最多允许在一个目标
HASH空间的地址池资源同时分配出去1/4地址,则Counter1′比Counter1少2
位,其它用于地址资源分配计数的计数器Counter2′,...,Counter64K′依此
类推。
再参照图3本发明的优选实施例网络地址资源的利用方法的步骤的流程
图,其中步骤34取出地址池HASH表中的对应表项的步骤包括步骤:地址池
HASH表采用图6所示的内容和结构时,与前面所述采用图4和图5所示的内容
和结构时有所不同,取出地址池HASH表中的对应表项后同时刷新上述地址池
HASH中每个表项代表的计数器,具体操作为将该表项的两个计数器值都加1
后回写,即表项中第一个计数器(例如:Counter1)指向下一个公有地址资
源,第二个计数器(例如:Counter1′)表示此表项对应的目标HASH空间的
地址池资源又被分配出去一个。
第二个计数器达到最大值时,表示此表项对应的目标HASH空间的地址池
资源不能再用,则本次地址分配失败,不予分配。
当此表项对应的目标HASH空间的地址池资源使用完毕,连接拆除时,则
将表项中第二个计数器(例如:Counter1′)减1后回写,表示此表项对应的
目标HASH空间的地址池资源中有一个被释放,第一个计数器(例如:
Counter1)值不变,表示再有新的用户连接时,如果分配对应此表项对应的目
标HASH空间的地址池资源,则从此表项对应的第一个计数器(例如:
Counter1)当前对应的地址向下分配。
需要说明的是,TCP/UDP的前1024个端口号通常保留,不用于公有地址
分配,上面的描述中为了简化,假定了一个IP地址上的64K个端口均可以分
配。在实际应用中,可以保留TCP/UDP的前1024个端口号,对本发明网络地
址资源利用方法的实施并无影响。
虽然通过实施例描绘了本发明,本领域普通技术人员知道,本发明有许
多变形和变化而不脱离本发明的精神,希望所附的权利要求包括这些变形和
变化而不脱离本发明的精神。