专利名称:一种网络端口地址转换的实现方法
技术领域:
本发明涉及网络端口地址转换(NPAT)的实现方法,尤其涉及TCP(传输控制协议)和用户数据报协议(UDP)连接网络端口地址转换的实现方法。
背景技术:
目前,随着互联网的迅速发展,IP地址资源渐趋紧张,地址复用技术——网络端口地址转换技术得到了广泛应用。但是,网络端口地址转换技术由于需要进行私有IP地址、私有TCP/UDP端口(以下简称TUport)到公有IP地址、公有TUport的转换,对包的转发处理性能带来了很大影响。因此,如何简化这种转换的规则,加速转化处理速度成为网络端口地址转换技术中的一个关键问题。
先简要介绍目前网络端口地址转换的一般处理流程,分析其处理瓶颈现有技术进行网络端口地址转换时,N个用户共享一个或多个公有IP地址,每个用户的活动TCP/UDP会话(简称TU会话)占用公用TUport空间的一个端口号,用户的活动会话所对应的公用端口号在现有技术中是动态分配的,它们的对应关系须通过查表取得。同时,为了及时回收转换表资源,系统必须检测TU会话的状态,这会造成巨大的开销。
由上可知,在网络端口地址转换过程中,查表和自动检测TU会话状态造成了系统的巨大开销,影响了包转发处理速度。
发明内容
本发明要解决的技术问题是提供一种网络端口地址转换的实现方法,缩小网络端口地址转换表的大小,提高网络端口地址转换处理速度。
为了解决上述技术问题,本发明提供了一种网络端口地址转换的实现方法,包括以下步骤(a)在对网络设备上的公有端口进行配置时,为每个用户发起的存活时间短的连接类型,分配一段由若干公用端口组成的专用子空间;(b)所述网络设备收到用户发来的所述连接类型的包时,根据所述包中的源端口号及针对该连接类型的对该用户专用子空间的配置,计算出要转换成的其专用子空间中的一个公有端口号;(c)所述网络设备收到来自公网的所述连接类型的包时,根据所述包目的端口号及针对该连接类型的对该用户专用子空间的配置,根据步骤(b)所用算法的反向算法计算出其对应的源端口号。
进一步地,上述方法还可具有以下特点所述步骤(a)进行配置时,对每个用户发起的存活时间长的连接类型,是分配一段共享的公用端口空间,供所有用户的该类连接类型的包进行端口地址转换时使用,其端口地址转换是采用查共享网络端口地址转换表的方式进行。
进一步地,上述方法还可具有以下特点所述存活时间长的连接类型包括非WEB TCP连接,所述存活时间短的连接类型包括WEB TCP连接和UDP连接。
进一步地,上述方法还可具有以下特点所述步骤(a)中是将对应于TCP连接的公有端口分为共享TCP端口空间和多个专用的TCP端口子空间,或/及将对应于UCP连接的公有端口分为多个专用的UCP端口子空间。
进一步地,上述方法还可具有以下特点所述步骤(a)中,每个专用子空间由配置的起始端口号BASE和相同的端口数N确定,所述步骤(b)中,采用如下公式计算出要转换成的公有端口号port’=BASE+(port-1024+X)%N)其中,port为包中所带的源端口号,port’为要转换成的公有端口号,X可以为0或正整数。
进一步地,上述方法还可具有以下特点所述步骤(b)中,网络设备还记录每一个用户发起连接的最大源端口号M,且在计算出的公有端口号仍被某个连接所使用时释放掉原来的连接,让新的连接使用该公有端口号;且在所述步骤(c)中,采用如下公式计算出对应的源端口号port=(port’-(X%N)-BASE)+N*((M-1024)/N)+1024。
进一步地,上述方法还可具有以下特点当所述步骤(b)计算出的公有端口号仍被某个连接所使用时,所述网络设备释放掉原来的连接,让新的连接使用该公有端口号。
进一步地,上述方法还可具有以下特点所述网络设备有多个公有IP地址,对每个IP地址对应的公有端口采用步骤(a)的方法配置,步骤(b)和(c)中,网络设备收到包后,根据包中所带的目的IP地址来确定该用户当前连接所对应的专用子空间。
本发明提出了一种对基于WEB部分的TCP连接和UDP连接的,无须查表,无须进行TCP会话状态的检测,通过简单转换计算即可得到私有TCP端口到公有TCP端口的相互映射的方法,从而有效地压缩网络端口地址转换表的大小,提高了网络端口地址转换的处理效率。本发明所述方法特别适宜于宽带接入服务器上实现。
图1是本发明实施例中实现源端口号向公有端口号转换的流程图。
图2是本发明实施例中实现公有端口号向源端口号转换的流程图。
图3是本发明实施例中TCP空间的实际分配示意图。
具体实施例方式
下面结合附图对本发明实施例做进一步的详细描述目前基于IP的业务主要包括TCP和UDP业务。其中,UDP连接一般都是短暂的广播应用,如DNS(域名解析服务)等,其存活时间非常短;TCP连接一般可以分成两种,一种是存活时间也非常短的WEB网页浏览,另一种是存活时间较长的非WEB网页浏览。在实际的宽带应用中基于HTTP的WEB网页浏览所引起的TCP连接数量多,持续时间短,对网络设备的网络端口地址转换带来特别大的开销,其他TCP连接一般数量较少,持续时间也长,对网络设备进行网络端口地址转换的开销较少。
根据以上分析可以得出,UDP连接和基于WEB的TCP连接的持续时间短,一般认为不会超过1小时,并且其活动的源端口号集中在最大TU端口号附近。基于此,本发明提出了基于静态TUPort空间分配策略的网络端口地址转换实现方法。
本发明方法应用的系统包括多个具有私有IP的客户端,这些客户端在接入公网时,通过公网和私网边界上的网络设备实现私有IP、私有TUport和公有IP、公有TUport间的转换。在进行网络端口地址转换的设备上,具有一个或多个公有IP地址,TCP/UDP上的四层端口分成1024以内的知名端口和1024到65535的普通应用端口,知名端口一般不能进行网络端口地址转换;而1024到65535的普通应用端口可以进行网络端口地址转换以复用紧张的公有IP地址资源。
同时,客户端(Windows/NT/Linux/Unix)操作系统都是采用单调递增分配源TUPort分配策略,即当前TCP连接的源端口号为n的话,下一个TCP连接的端口号为n+1。UDP和TCP是分开独立编号,其源端口的分配策略和TCP是一样的。
下面介绍本发明实施例网络端口地址转换的实现方法。
首先需要对网络设备上的公有端口进行配置,方法如下把公有IP地址对应的TCP应用端口空间分成两段,一段是共享TCP端口空间,供所有用户建立非WEB TCP连接时使用;另一段是专用TCP端口空间,由为多个用户单独分配的多个专用子空间组成,每个专用子空间可由配置的起始端口号BASE和端口数N确定,供该用户在建立WEB TCP连接时单独使用;公有IP地址对应的UDP应用端口空间则全部用作专用UDP端口空间,每个用户分配有一段单独使用的专用子空间。
以下先介绍网络设备接收到用户的TCP或UDP包后,进行一次端口地址转换的流程,如图1所示,包括以下步骤步骤110,网络设备收到用户发来的TCP或UDP包,包括发起连接时的消息包和发起连接后传送的数据包;步骤120,根据收到的包判断其连接类型,如果是非WEB TCP连接,执行步骤130;如果是WEB TCP连接,执行步骤140;如果是UDP连接,执行步骤150;TCP和UDP是根据IP包头的协议字段来区分的.至于WEB TCP和非WEB TCP连接则根据TCP的端口是否为80来进行判断。
步骤130,从共享TCP端口空间中动态分配一个TCP端口,建立或更新共享NPAT转换表项并监控连接的状态,完成一次端口地址转换,结束;步骤140,根据源IP地址找到该用户专用子空间的起始端口号BASE,结合包中的源端口号port计算出要转换成的公有TCP端口号,并记录该用户已发起连接的最大TCP源端口号M’,完成一次端口地址转换,结束;由源端口号计算出要转换成的公有端口号的公式如下port’=BASE+(port-1024)%N) (1)其中,BASE是为该用户配置的起始端口号,port表示用户发起连接的源端口号,port’表示其对应的公有端口号,%为取余操作。
如果用户发起连接的源端口数超过了N,则计算出的TCP端口号可能已经分配给以前的一个连接,如果该连接还未释放,则本实施例需要释放原有的连接,再建立新发起的连接。
步骤150,按与步骤140相同的方法,根据协议包中的源端口号和该用户专用子空间的起始端口号BASE计算要转换成的公有UDP端口号,并记录该用户已发起连接的最大UDP源端口号M”,完成一次端口地址转换,结束。
现在用一个应用实例来进一步说明上述方法,假设网络设备有1个公有IP,有256个用户(或称客户端),每个用户有一个私有IP。请参照图3,用斜线填充的格子表示WEB TCP连接的端口,用交叉线填充的格子表示非WEB TCP连接的端口。从图中可以看出,分配给非WEB的TCP连接的共享TCP端口空间从1024到4095,分配给WEB TCP连接的端口空间从4096到65536,所述空间均匀分给256个私有IP地址,每个客户端的专用子空间共有240个TCP连接的应用端口。用户1的TCP端口空间为4096到4335,用户2的TCP端口空间为4336到4575。
UDP连接的端口空间则从1024到65536均匀分配给每个私有IP地址,每个私有IP地址的专用子空间有252个UDP连接的应用端口。
在该实例中,假设用户1和用户2按以下顺序发起TCP连接1)用户1发起ftp tcp源端口号为1026;2)用户1发起ftp tcp源端口号为1027;3)用户2发起ftp tcp源端口号为2002;4)用户2发起ftp tcp源端口号为2003;5)用户1发起web tcp源端口号为1028;6)用户2发起web tcp源端口号为2004;7)用户1发起web tcp源端口号为1029;8)用户2发起web tcp源端口号为2005;9)用户1终止web tcp源端口号为1028;10)用户2终止web tcp源端口号为2004;每次连接发起后NPAT转换表的变化如下表所示
网络设备收到基于WEB的TCP包或收到UDP包时,都按公式(1)计算,例如,在收到来自用户1的源端口号为1029的WEB连接的TCP包后,采用公式(1)计算出要转换成的公有端口4096+((1029-1024)%240)=4101按以上方法计算时有一个需要特别注意的地方,比如用户1的源端口为1029的WEB TCP连接一直存在,而源端口一直递增到1269,递增数超过240,此时新的WEB TCP连接上来,根据公式1计算得到的公有端口为4096+((1269-1024)%240)=4101这样显然两条连接共用了一个公有端口号,形成了冲突。形成上述冲突时,应该释放掉原来的连接,即对私有源端口号小于最大源端口号M减去专用子空间的端口数(本实施例为240)的WEB TCP连接不再进行端口地址转换,使其断开。以保证新的连接能够成功,如此才能确保本发明提供的转换方法的正常实行。对UDP连接的处理是相同的。
事实上,因为基于WEB的TCP连接的持续时间非常短,这种冲突的可能性非常小,故对正常业务不会造成很大影响。而UDP连接的持续时间一般来说比WEB TCP连接更短,一般都是一个包的来回,采用此种静态转换更加不容易形成冲突。
另外,发起非WEB TCP连接时会使用TCP源端口号,使得该源端口号对应的WEB TCP连接的公用端口号闲置,但实际应用中,非WEB TCP连接密度非常稀疏且持续时间较长,因此不会造成严重的端口浪费。
下面再介绍网络设备接收到公网的TCP或UDP包后,进行一次端口地址转换的流程,如图2所示,包括以下步骤步骤210,网络设备收到来自公网的TCP或UDP包,取出其目的IP地址和目的端口号;步骤220,根据收到的包判断其连接类型,如果是TCP连接,执行步骤230,如果是UDP连接,执行步骤240;步骤230,判断目的端口号是否在共享TCP端口空间,如果是,执行步骤240,否则,执行步骤250;步骤240,根据目的端口号找到其对应的用户,进而得到该用户专用子空间起始端口号BASE和当前发起连接的最大源端口号M,然后反向计算出其对应的源端口号,完成一次反向的端口地址转换,结束;计算公式如下port=(port’-BASE)+N*((M-1024)/N)+1024 (2)其中“*”表示相乘;“/”为整数除法运算符,具有取整功能;port’表示来自公网的目的端口号;port表示其对应的源端口号;M表示该用户已发起连接的最大源端口号M,可以是最大TCP源端口号M’或者是最大UDP源端口号M”。
由于为每个用户分配的专用子空间是有限的,大小为N,所以当用户的源端口号不断递增时,该子空间中的公有端口实际上是被循环使用的。按前述的源端口到公有端口的转换方法,当两个源端口争夺一个公有端口时,保留了较大的源端口号。所以在式(2),加上N*((M-1024)/N)项,以得到与该目的端口号对应的当前使用的源端口号。
步骤250,查共享NPAT转换表进行转换,如果查不到则丢弃,完成一次反向的端口地址转换,结束。
仍用上述应用实例来做进一步的说明,假设来自公网TCP连接的协议包的目的端口号在1024到4095间,则直接查共享NAT转发表进行转换,如果查不到则丢弃。
如果来自公网的TCP连接协议包的目的端口号在4096到65536间,则采用公式(2)计算。例如,当网络设备收到来自公网的目的端口号为4101的TCP包时,先判断出该端口属于用户1的专用空间,采用公式(2)计算出源端口port=4101-4096+240*((1029-1024)/240)+1024=1029本发明在上述实施例的基础上还可以做各种变换,例如在另一实施例中,上述公式(1)可以用公式port’=BASE+((port-1024+X)%N)替代,其中,X可以为0或正整数。这样的替代会引起用户的源端口号对应的专用空间端口号的变化,但并不影响技术效果。相应的反向算法,即公式(2)也要改变为port=(port’-(X%N)-BASE)+N*((M-1024)/N)+1024。
在另一实施例中,网络设备有多个公有IP地址,每个IP地址都对应于一段公有端口,对于其中端口地址转换的方法,与只有一个公有IP地址的情况是相同的,而网络设备收到包后,则根据包中所带的目的IP地址来确定该用户当前连接所对应的专用子空间。
权利要求
1.一种网络端口地址转换的实现方法,包括以下步骤(a)在对网络设备上的公有端口进行配置时,为每个用户发起的存活时间短的连接类型,分配一段由若干公用端口组成的专用子空间;(b)所述网络设备收到用户发来的所述连接类型的包时,根据所述包中的源端口号及针对该连接类型的对该用户专用子空间的配置,计算出要转换成的其专用子空间中的一个公有端口号;(c)所述网络设备收到来自公网的所述连接类型的包时,根据所述包目的端口号及针对该连接类型的对该用户专用子空间的配置,根据步骤(b)所用算法的反向算法计算出其对应的源端口号。
2.如权利要求1所述的方法,其特征在于,所述步骤(a)进行配置时,对每个用户发起的存活时间长的连接类型,是分配一段共享的公用端口空间,供所有用户的该类连接类型的包进行端口地址转换时使用,其端口地址转换是采用查共享网络端口地址转换表的方式进行。
3.如权利要求2所述的方法,其特征在于,所述存活时间长的连接类型包括非WEB TCP连接,所述存活时间短的连接类型包括WEB TCP连接和UDP连接。
4.如权利要求3所述的方法,其特征在于,所述步骤(a)中是将对应于TCP连接的公有端口分为共享TCP端口空间和多个专用的TCP端口子空间,或/及将对应于UCP连接的公有端口分为多个专用的UCP端口子空间。
5.如权利要求1所述的方法,其特征在于,所述步骤(a)中,每个专用子空间由配置的起始端口号BASE和相同的端口数N确定,所述步骤(b)中,采用如下公式计算出要转换成的公有端口号port’=BASE+(port-1024+X)%N)其中,port为包中所带的源端口号,port’为要转换成的公有端口号,X可以为0或正整数。
6.如权利要求5所述的方法,其特征在于,所述步骤(b)中,网络设备还记录每一个用户发起连接的最大源端口号M,且在计算出的公有端口号仍被某个连接所使用时释放掉原来的连接,让新的连接使用该公有端口号;且在所述步骤(c)中,采用如下公式计算出对应的源端口号port=(port’-(X%N)-BASE)+N*((M-1024)/N)+1024。
7.如权利要求1所述的方法,其特征在于,当所述步骤(b)计算出的公有端口号仍被某个连接所使用时,所述网络设备释放掉原来的连接,让新的连接使用该公有端口号。
8.如权利要求1所述的方法,其特征在于,所述网络设备有多个公有IP地址,对每个IP地址对应的公有端口采用步骤(a)的方法配置,步骤(b)和(c)中,网络设备收到包后,根据包中所带的目的IP地址来确定该用户当前连接所对应的专用子空间。
全文摘要
本发明公开了一种网络端口地址转换的实现方法,在对网络设备上的公有端口进行配置时,为每个用户发起的存活时间短的连接类型,分配一段由若干公用端口组成的专用子空间;网络设备收到用户发来的所述连接类型的包时,根据所述包中的源端口号及针对该连接类型的对该用户专用子空间的配置,计算出要转换成的其专用子空间中的一个公有端口号;网络设备收到来自公网的所述连接类型的包时,根据所述包目的端口号及针对该连接类型的对该用户专用子空间的配置,反向计算出其对应的源端口号。采用本发明方法,可以缩小网络端口地址转换表的大小,提高网络端口地址转换处理速度。
文档编号H04L29/06GK1925458SQ20051009855
公开日2007年3月7日 申请日期2005年9月2日 优先权日2005年9月2日
发明者田洪亮 申请人:中兴通讯股份有限公司