CN101098284A - 实现网络无缝互连的方法 - Google Patents
实现网络无缝互连的方法 Download PDFInfo
- Publication number
- CN101098284A CN101098284A CNA200610093500XA CN200610093500A CN101098284A CN 101098284 A CN101098284 A CN 101098284A CN A200610093500X A CNA200610093500X A CN A200610093500XA CN 200610093500 A CN200610093500 A CN 200610093500A CN 101098284 A CN101098284 A CN 101098284A
- Authority
- CN
- China
- Prior art keywords
- address
- nat
- port
- main frame
- private network
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Landscapes
- Data Exchanges In Wide-Area Networks (AREA)
- Small-Scale Networks (AREA)
Abstract
一种实现网络无缝互连的方法,其实现机理为将私网主机在DNS上注册,建立一个域名,其地址是所属NAT的公网地址;别的主机访问该私网主机时,利用域名来访问;私网主机向NAT注册其域名;对DNS服务器进行功能扩展,将访问方的地址和端口等信息向后面的DNS传递,当私网主机的注册DNS服务器收到对私网主机的查询时,除了通常的应答操作外,还向该私网主机的所属NAT的特定控制端口发送访问方将要访问该私网主机的信息,NAT确定访问方地址跟被访私网主机的绑定,并准备相应的访客登记记录;访问方按DNS回复的地址访问私网主机所属的NAT;NAT按照访客登记记录的绑定对收到的数据包进行地址转换后转发给私网主机。
Description
所属技术领域
本发明涉及一种实现网络无缝互连的方法,属于计算机网络领域。
背景技术
互联网是目前世界上最大的网络,它连接了数百万台主机,可以说将整个世界都连接在一起。互联网是一个极其伟大的发明,它使得我们获取信息变得极其简便。互联网的连接基于一种称为TCP/IP的协议,IP是其中网络层的协议,目前IP协议的版本号是4,简称为IPv4,IPv4的核心是为每台主机分配一个唯一的32位的地址,这一地址就唯一地标识了这台主机,这样即便有数百万台主机,由于它们的地址都是唯一的,通过这一地址,就可以准确无误地找到它们。互联网上两台主机的通讯过程是这样的:主机将待传输的数据进行打包,每一个数据包都指明了发送方的地址,接收方的地址,就象交给邮局投寄的邮件一样。互联网上的路由器负责将这些数据包准确无误地送到接收方。由于两台主机之间可以同时进行不同类型的通讯应用,为了进行区分,所以每一个数据包还指明了发送方的端口,接收方的端口,接收方收到数据包后,再按照端口的不同,发送到相应的应用层。
IPv4中32位的地址长度最多能提供约40亿个地址,由于互联网用户的迅速膨胀,32位的地址长度所提供的地址空间很快将会被耗尽。为了解决这一问题,人们制订了IP协议的下一版本,即Ipv6,IPv6采用128位地址长度,约能提供的地址数为3的38次方,这是一个非常大的数字,在可以预见的未来,IPv6将不会有地址短缺的问题。但IPv6与IPv4不兼容,而目前的互联网是基于IPv4,人们已经在IPv4进行了庞大无比的投资,所以IPv6何时能取代IPv4仍然是遥遥无期。
为了解决IPv4中地址短缺的问题,人们引入了地址转换技术(Network AddressTranslation),简称NAT。NAT的工作原理是:在私网和公网之间,设立NAT网关;在私网内部,主机可以使用保留的私有地址,当该私网主机发送数据包给公网的主机时,NAT网关对该数据包进行地址转换,原来的发送方地址为该私网主机的私有地址,NAT网关将其转换成NAT网关的公网地址,然后发送给公网的主机,该公网的主机回复时,将回复到NAT网关,NAT对照其地址映射表,查找与该公网主机通讯过的私网主机,找到后,将收到的数据包的目的地址进行地址转换,原来的目的地址为NAT网关的公网地址,NAT网关将其转换成私网主机的私有地址,然后发送给该私网主机。端口转换技术(Port Address Translation),简称PAT,是NAT的一种,它除了地址转换外,还对端口进行转换。NAT较好地解决了私网主机呼叫公网主机的问题,但NAT也存在这样的问题:公网主机却没有办法呼叫NAT网关后面的私网主机。许多方案试图解决这个问题,其中比较可行的方案是在公网上架设中转服务器,目前流行的即时通讯软件,如QQ,MSN等就是采用了这一方案。但所有这些方案都没有能够很好地实现公私网无缝互连的问题,所以NAT只是局部解决了地址短缺的问题。
当前互联网的点对点应用正在飞速发展,点对点应用中,每一台主机都可以成为一个网站,一个FTP服务器,一个通讯终端,在这一形势下,IPv4中地址短缺的问题更显突出。可以说,IPv4中地址短缺的问题已经成为互联网继续发展的一个最大的瓶颈,需要尽快解决。
发明内容
本发明提出了解决IPv4中地址短缺问题的一个技术方案,它使得互联网的每一台主机都能够自由地与其它主机通讯。
我们首先分析主机进行互联网访问的过程,假定我们使用当前主流的微软公司的Windows操作系统上的浏览器(Internet Explorer)访问互联网上的网页服务,现在我们希望访问某企业的网页,我们在浏览器的地址栏中键入
http://www.somecompany.com,相比枯燥的机器地址,这就是我们能容易理解的域名,浏览器就向操作系统的地址定位器(Resolver)查询域名
www.somecompany.com所对应的机器地址,地址定位器先查询自己的缓存(Cache),如果缓存中存在
www.somecompany.com的有效的机器地址映射,则向浏览器返回这一机器地址,否则地址定位器需要向域名服务器(DomainName Service,简称DNS)查询,在操作系统中,至少设置了一个DNS的机器地址,地址定位器向该DNS发起查询,该DNS通常地还需要向其他若干个DNS进行查询,并将最终的查询结果返回给地址定位器,地址定位器将查询结果转换成特定格式返回给浏览器,如果返回的是有效地址,则浏览器连接到该地址,如上述例子我们就在浏览器上看到了某企业的网页,否则提示对该域名的访问出错。
本发明解决其技术问题所采用的技术方案是:将私网主机在DNS上注册,建立一个域名,其对应的地址是私网主机所在NAT给该私网主机分配的公网地址;别的主机(访问方)需要访问该私网主机时,利用域名来访问;私网主机向NAT注册其域名,NAT建立私网主机的域名和其私网地址的绑定;访问方向DNS查询被访域名的地址;对操作系统的地址定位器和DNS服务器进行功能扩展,将访问方的地址和端口等信息向后面的DNS传递(访问方所查询的DNS能够直接得到访问方的地址和端口),当向其它DNS进行查询时,在查询数据包的附加资源记录(Additional RRs)部分加上访问方的地址(和端口)等信息;当私网主机的注册DNS服务器收到对私网主机的地址查询时,向该私网主机的注册地址(NAT地址)的特定控制端口发送访问方将要访问该私网主机的连接申请(这是基于这样的判断:访问方访问DNS所用的地址与访问其所查询对象所用的地址是相同的,绝大部分情况下都是这样的,所以这一地址可以用来唯一标识访问方),并基于连接申请的许可情况向访问方进行相应的答复;NAT从连接申请得知该访问方需要访问的私网主机域名,NAT查询该私网主机域名在NAT上的注册信息,获知该域名对应的私网地址,NAT还从连接申请中得知访问方地址,NAT建立访问方地址和被访私网主机的私网地址的绑定,基于这些绑定,NAT准备相应的访客登记记录;访问方按DNS回复的地址访问私网主机,实际上是访问该私网主机所属的NAT;NAT查找该访问方地址所对应的访客登记记录,获知其要访问的对象的私网地址,然后对收到的数据包进行地址转换,将目的地址转为私网主机的私网地址并进行转发。
这样公网的访问方就可以象往常访问其他公网用户一样,自由地访问私网内部的主机,这主要归功于巧妙地利用了DNS。机器能够识别的数字对人类来说是非常枯燥的,如219.133.221.228,所以,域名就出现了,利用直观的域名来代替枯燥的数字,如www.somecompany.com就用来代替前面枯燥的数字,我们从字面都可以容易地得知,这代表某企业的网址,DNS是互联网上很重要的地址定位服务,我们要访问某企业的网址,只需要键入
www.somecompany.com,电脑会自动地查询指定的DNS服务器,以获取www.somecompany.com所代表的机器地址,DNS会返回219.133.221.228,然后电脑就按照这一地址进行访问。本发明正是利用了这一过程,假定用户A是某企业的员工,他的电脑位于该企业的NAT后面,用的是私网地址,假定是10.1.0.1,用户A在DNS上注册了一个域名,
userA.somecompany.com,指向该企业的NAT地址,假定该地址就是219.133.221.228,用户A在该企业的NAT上进行了可受访域名注册,即告诉NAT,如果有人访问userA.somecompany.com,则转接到10.1.0.1(用户A的私网地址)。公网的访客E,地址为169.254.240.25,要访问用户A,在电脑浏览器中键入
userA.somecompany.com,电脑会自动地查询指定的DNS服务器,以获取
userA.somecompany.com所代表的机器地址,DNS会返回219.133.221.228(该企业的NAT),同时DNS查到该域名注册为NAT后面类型,于是向219.133.221.228(该企业的NAT)的特定控制端口发送169.254.240.25(公网的访客E)将要访问
userA.somecompany.com(用户A的域名)的连接申请,该企业的NAT查找其可受访主机域名注册表,找到
userA.somecompany.com的对应私网地址为10.1.0.1,于是在访客登记表中增加一条记录,将169.254.240.25(公网的访客E)和10.1.0.1(用户A的私网地址)进行绑定,即如果收到公网地址169.254.240.25(公网的访客E)的发送数据,则进行地址转换后转发到私网地址10.1.0.1(用户A的私网地址);公网的访客E的电脑得到DNS返回的地址(该企业的NAT)后,即向该企业的NAT发起访问,NAT收到访问数据包后,截取出其发送方地址,即公网的访客E的地址169.254.240.25,同时查找其访客登记表中,找到169.254.240.25(公网的访客E)要访问的对象为10.1.0.1(用户A的私网地址),NAT于是将数据包的目的地址转换为10.1.0.1(用户A的私网地址),然后转发,这样公网的访客E就顺利地访问到了用户A。
应该要注意到,示范例子中所用到的地址等信息仅作为阐述本发明的目的之用,而不是对本发明的限制。
本发明的有益效果是:通过对现有的DNS系统和NAT设备进行巧妙的功能扩展,就实现了公网私网之间无缝的互连,这种无缝连接对用户而言是非常重要的,用户不需要做任何特殊动作,如上面的示范中,要访问某企业的用户A,只需要象访问其它网站一样,在电脑浏览器中键入
userA.somecompany.com即可,这就使得互联网上的每一台主机都能自由地联通,不再受有限的地址空间的困扰了,IPv4中地址短缺的问题也就比较完美地得到了解决。而以往所有其它的解决方案需要在公网上(甚至在私网内部)架设额外的服务器,而且不能提供这样的无缝连接。
下面结合附图和实施例对本发明进一步说明。
附图说明
图1是网络结构示意图。
图1中,DNS服务器位于公网上,其地址为59.40.4.112,主机E,F位于公网上,其地址分别为169.254.240.25和59.40.9.121,NAT1是私网1和公网之间的地址转换设备,其位于公网的地址为219.133.221.100-219.133.221.254之间的可分配连续地址段,其位于私网1的地址为10.1.0.3,主机A,B位于私网1上,其地址分别为10.1.0.1和10.1.0.2,NAT2是私网1和私网2之间的地址转换设备,其位于私网1的地址为10.1.0.100-10.1.0.200之间的可分配连续地址段,其位于私网2的地址为10.1.1.3,主机C,D位于私网2上,其地址分别为10.1.1.1和10.1.1.2。
图2是主机向DNS进行递归查询(Recursive Query)的流程示意图,主机表示发起DNS查询的访问方,向DNS查询某域名的地址,DNS1,DNS2,DNS3,DNS4表示DNS服务器。
图3是主机向DNS进行迭代查询(Iterative Query)的流程示意图,主机表示发起DNS查询的访问方,向DNS查询某域名的地址,DNS1,DNS2,DNS3,DNS4表示DNS服务器。
具体实施方式
现在结合上述附图详细介绍本发明的具体实施过程:
1.将NAT后面的私网主机在DNS服务器上注册。
表1<DNS服务器上的域名注册表>是本发明的DNS服务器上的域名注册表,应该特别
表1DNS服务器上的域名注册表
域名 | 主机地址 | 最新更新时间 | 状态 | 类型 | 是否需要访问许可 |
userA.somecompany.com | 219.133.221.228 | 6/18/2006 2:26:01 | 1 | 2 | 1 |
userC.somecompany.com | 219.133.221.229 | 6/18/2006 11:32:28 | 1 | 2 | 1 |
表2 NAT2上的主要映射表
表2.1在外网NAT的可外访地址注册表
地址 | 绑定外网地址 | 绑定外网端口 | 绑定公网端口 | 类型 | 状态 |
10.1.0.101 | 219.133.221.229 | 0 | 0 | 2 | 1 |
表2.2可外访主机注册表
主机地址 | 绑定外网地址 | 绑定外网端口 | 绑定公网端口 | 类型 | 状态 |
10.1.1.2 | 10.1.0.101 | 0 | 0 | 2 | 1 |
10.1.1.1 | 10.1.0.101 | 0 | 0 | 2 | 1 |
表2.3可受访域名注册表
域名唯一编号 | 域名 | 主机地址 | 绑定外网地址 | 已注册端口数量 | 状态 | 是否NAT |
100000 | userC.somecompany.com | 10.1.1.1 | 10.1.0.101 | 1 | 1 | 0 |
表2.4可受访域名端口注册表
域名唯一编号 | 协议 | 已注册端口 | 状态 | 端口限制类型 |
100000 | 6 | 21 | 1 | 1 |
表2.5访客登记表
访客登记表唯一编号 | 协议 | 远端地址 | 远端端口 | 本地端地址 | 本地端端口 | 主机地址 | 时间 | 状态 |
1 | 6 | 169.254.240.25 | 0 | 10.1.0.101 | 21 | 10.1.1.1 | 6/18/2006 6:22:50 | 0 |
表2.6出入记录表
登记表对应记录地址 | 访客登记表唯一编号 | 协议 | 远端地址 | 远端端口 | 本地端地址 | 本地端端口 | 主机地址 | 主机端口 | 时间 | 状态 | 是否为私网互连 |
0X470006 | 1 | 6 | 169.254.240.25 | 6001 | 10.1.0.101 | 21 | 10.1.1.1 | 21 | 6/18/2006 6:22:51 | 1 | 0 |
表3 NAT1上的主要映射表
表3.1可外访主机注册表
主机地址 | 绑定外网地址 | 绑定外网端口 | 绑定公网端口 | 类型 | 状态 |
10.1.0.101 | 219.133.221.229 | 0 | 0 | 2 | 1 |
10.1.0.1 | 219.133.221.228 | 0 | 0 | 2 | 1 |
表3.2可受访域名注册表
域名唯一编号 | 域名 | 主机地址 | 绑定外网地址 | 已注册端口数量 | 状态 | 是否NAT |
100000 | userA.somecompany.com | 10.1.0.1 | 219.133.221.228 | 1 | 1 | 0 |
100001 | userC.somecompany.com | 10.1.0.101 | 219.133.221.229 | 1 | 1 | 1 |
表3.3可受访域名端口注册表
域名唯一编号 | 协议 | 已注册端口 | 状态 | 端口限制类型 |
100000 | 6 | 80 | 1 | 1 |
100001 | 6 | 21 | 1 | 1 |
表3.4访客登记表
访客登记表唯一编号 | 协议 | 远端地址 | 远端端口 | 本地端地址 | 本地端端口 | 主机地址 | 时间 | 状态 |
1 | 6 | 169.254.240.25 | 0 | 219.133.221.228 | 80 | 10.1.0.1 | 6/18/2006 6:22:40 | 0 |
2 | 6 | 169.254.240.25 | 0 | 219.133.221.229 | 21 | 10.1.0.101 | 6/18/2006 6:22:50 | 0 |
表3.5出入记录表
登记表对应记录地址 | 访客登记表唯一编号 | 协议 | 远端地址 | 远端端口 | 本地端地址 | 本地端端口 | 主机地址 | 主机端口 | 时间 | 状态 | 是否为私网互连 |
0X4722D6 | 1 | 6 | 169.254.240.25 | 6000 | 219.133.221.228 | 80 | 10.1.0.1 | 80 | 6/18/2006 6:22:41 | 1 | 0 |
0X4722E0 | 2 | 6 | 169.254.240.25 | 6001 | 219.133.221.229 | 21 | 10.1.0.101 | 21 | 6/18/2006 6:22:51 | 1 | 0 |
指出的是,它只列出了对本发明而言比较关键的注册项目和对现有DNS进行功能扩展部分,表中[域名]表示注册主机的域名,[主机地址]表示所注册域名的地址,对私网主机,这是最外层NAT的公网地址,[状态]栏表示该域名当前的状态,如1表示有效,0表示无效等等,某些动态域名服务需要定期更新主机地址,超过一定时间不更新的记录被系统视为无效的,[最新更新时间]栏主要用于这一目的,每次注册方更新记录时,将此栏更新为当前时间,[类型]栏表示该注册主机的类型,如0表示静态独立地址主机,1表示动态独立地址主机,2表示私网主机,[是否需要访问许可]栏适用于[类型]为私网主机的情况,设置是否需要注册主机所在NAT的发回访问许可的答复,1表示是,0表示否,当为是时,DNS向NAT发送一个需要回复的访问申请,只有收到NAT的访问许可答复,并且为允许访问时,DNS才向地址查询者返回被访者有效地址,否则返回错误。
主机还可以对注册项进行更改,删除,如暂停对外开放,取消注册,当收到NAT地址绑定发生变化的信息时更新主机地址。图1中的主机A(私网地址为10.1.0.1)在DNS服务器上注册为userA.somecompany.com,[主机地址]注册为NAT分配给主机A的地址,即219.133.221.228,主机C(私网地址为10.1.1.1)在DNS服务器上注册为userC.somecompany.com,[主机地址]注册为NAT分配给主机C的地址,即219.133.221.229。应该注意到,这两个主机地址都是NAT1在公网上对应的地址。
2.将NAT后面的私网主机在NAT上注册。
图1是网络结构示意图,包含多层的NAT结构,NAT在内外网均开放特定协议的特定端口,称为控制端口,控制端口的协议是特定的,协议是IP数据包头的协议项,端口号也是特定的,用于接受并发送控制指令。私网内的主机向该网内的NAT注册,内层的NAT向外层的NAT注册,注册方法可以是系统管理员在NAT的控制台上直接注册,也可以用私网内的任一台主机向NAT的控制端口发送注册指令,注册指令中包含需要注册的主机地址,如果为空缺则表示为本机注册,还需要指定注册的服务。
表2为NAT2上的主要映射表,表3为NAT1上的主要映射表,两者的区别是表2多了一个<在外网NAT的可外访地址注册表>,这是由于NAT2处于NAT1内层,所以需要向NAT1注册。下面以表2为例,介绍各映射表的含义。
表2.1<在外网NAT的可外访地址注册表>,NAT 2的各个地址在NAT1上注册为可访问NAT1的外网,也就是公网,参见图1,[地址]栏即NAT2在私网1的地址,[绑定外网地址]是NAT2在私网1的地址在NAT1的外网的地址绑定,[绑定外网端口]为NAT2在私网1的地址在NAT1的外网的端口绑定,[绑定公网端口]为NAT2在私网1的地址在公网的端口绑定,在多层NAT中,内层的NAT需要向外层的NAT注册,直到NAT处于公网,[类型]为NAT2外发的数据包经过NAT1时的处理方式:a)NAT1必须按[绑定外网端口]中指定的端口对数据包进行端口转换,假定用0表示;b)只有端口发生冲突时才进行端口转换,按[绑定外网端口]中指定的端口对数据包进行地址转换,假定用1表示;c)只有端口发生冲突时才进行端口转换,按NAT1自动分配的端口对数据包进行端口转换,假定用2表示;d)端口发生冲突时不做任何端口转换,丢弃该数据包,做出错处理,假定用3表示。[状态]表示注册项是否有效,假定1表示有效,0表示无效。[绑定外网端口][绑定公网端口]与[类型]直接相关,当[类型]没有进行端口设置时,[绑定外网端口][绑定公网端口]为未定义状态,假定用0表示。
表2.2<可外访主机注册表>,私网2内的主机在NAT2上注册为可以访问外网,[主机地址]为主机于私网2内的地址,[绑定外网地址]是主机在NAT2的外网的地址绑定,[绑定外网端口]是主机在NAT2的外网的端口绑定,[绑定公网端口]是主机在公网的端口绑定,在多层NAT中,内层的NAT需要向外层的NAT注册,直到NAT处于公网,[类型]为外发的数据包经过NAT2时的处理方式:a)NAT2必须按[绑定外网端口]中指定的端口对数据包进行端口转换,假定用0表示;b)只有端口发生冲突时才进行端口转换,按[绑定外网端口]中指定的端口对数据包进行地址转换,假定用1表示;c)只有端口发生冲突时才进行端口转换,按NAT2自动分配的端口对数据包进行端口转换,假定用2表示;d)端口发生冲突时不做任何端口转换,丢弃该数据包,做出错处理,假定用3表示。[状态]表示注册项是否有效,假定1表示有效,0表示无效。[绑定外网端口][绑定公网端口]与[类型]直接相关,当[类型]没有进行端口设置时,[绑定外网端口][绑定公网端口]为未定义状态,假定用0表示。
表2.3<可受访域名注册表>,私网2内可以接受公网访问的主机与域名的绑定,[域名唯一编号]唯一地确定每一条注册域名项,[域名]即易于辨别的地址,[主机地址]即与该[域名]绑定的主机的私网2地址,[绑定外网地址]即在NAT2的外网的地址绑定,[已注册端口数量]表示已经注册的有效端口总数,[状态]表示注册项是否有效,假定1表示有效,0表示无效,[是否NAT]表示注册的主机是否为NAT,在多层NAT结构中,主机向所在私网的NAT注册,而较内层私网的NAT需要向更外层的NAT注册,假定1表示是,0表示否。
表2.4<可受访域名端口注册表>,私网2内可以接受公网访问的主机对外开放端口的注册表,[域名唯一编号]是表2.3的主键,唯一地确定每一条注册域名项,便于表示表2.3中的所占空间较多的域名,[协议]表示所开放的协议,对应于IP数据包头的协议项,如果不限定,则可以用通配符表示,假定用全为1来表示,[已注册端口]表示对外开放的端口,如果希望开放所有端口,则可以用通配符表示,假定用全为1来表示,端口是数据传输层(TCP和UDP)以上才有的,对一些协议,如网络层的ICMP,是没有端口的,对这种情况,则可以用未定义符表示,假定用0来表示,[状态]表示注册项是否有效,假定1表示有效,0表示无效。访问登记时的端口,不一定是即将进行的访问所用的端口,所以[端口限制类型]有以下选项,a)为“严格端口限制”,即一定要用该端口来进行访问,假定用0表示;b)为“放宽端口限制”,假定用1表示,即访问登记时端口是不确定的,只有真正访问时才能确定所用端口,这提供了一定的兼容性;c)为无限制,即可以用任何端口来访问,假定用2表示。
图1中的主机C(私网地址为10.1.1.1)向NAT 2注册为可以接收公网的访问,可以接收公网的访问则自动获得访问公网的权限,见表2.2<可外访主机注册表>和表2.3<可受访域名注册表>,主机D向NAT2注册为可以访问公网。收到注册申请后,NAT要检查现有的注册表的情况,看是否有冲突或者已经存在相关的注册记录,如<可受访域名注册表>中,域名是唯一的,同一台主机可以多次注册,但需要注册为不同的域名,实际应用中,为了提高查找速度,可以按域名大小顺序排列,做成索引。每一个NAT都要向后一级NAT递归申请,直到自己是最后一个NAT,即与公网连接。当收到回复时,每一个NAT向前一级NAT回复,直到自己是最低层的NAT。由于NAT2并没有直接与公网相连,NAT2需要先向后级的NAT1注册,如表2.1<在外网NAT的可外访地址注册表>。NAT1因为直接与公网相连,所以不需要再向后一级注册,可以直接处理注册申请,分配公网地址并进行绑定,即表3.1<可外访主机注册表>和表3.2<可受访域名注册表>,同时将注册结果返回给注册申请者,即NAT2,NAT2按返回的结果更新自己的相关注册记录,并将注册结果返回给注册申请者,即主机C和主机D,主机C和主机D按返回的结果更新自己的相关注册记录,需要注意的是,在多层NAT结构下,每一层NAT都有着自己的地址端口对应,但对主机而言,只需要关心最外层NAT的地址端口对应。主机C(私网地址为10.1.1.1)注册为可以接收公网的访问,所以下一步是注册<可受访域名端口注册表>,即主机C的哪些端口是对外开放的,假定主机C希望对外提供FTP服务,默认协议为6(TCP),默认的端口是21,则主机C需要注册协议为6,端口为21,如果希望开放所有协议,则协议注册为通配符,假定用全为1表示,如果希望开放所有端口,则端口注册为通配符,假定用全为1表示,还可以指定端口限制类型。按照类似的步骤,主机还可以动态地对注册内容进行增加,更改,删除,如暂停对外开放,新增/取消某个端口的开放,将可以访问公网的功能禁止。而NAT的地址绑定发生变化时,NAT需要一级一级地从后到前通知注册方,这样可以实现动态地址绑定。实际应用中,为了管理上的需要,可以进行安全方面的设置,即注册时需要用户和密码,而系统管理员可以设置哪些用户允许哪些权限。
3.别的主机(访问方)需要访问私网主机时,利用私网主机的域名来访问。
主机要进行互联网访问时,通常是采用域名,但域名并不是可以用来直接访问的机器地址,需要向DNS查询,以获取域名所对应的地址,图2,图3展示了主机向DNS进行查询的常见流程。DNS查询地址有递归查询和迭代查询两种,递归查询要求被查询的DNS需要返回完整答案,要么是有效的地址,要么是出错信息,迭代查询下被查询的DNS可以返同下一个参考地址,告诉查询方可以到该地址进行下一步查询。
图2中,主机向DNS1发出递归查询,DNS1上没有答案,于是DNS1向DNS2发出迭代查询,DNS2上也没有答案,但它返回一个参考地址,告诉DNS1可以到DNS3进行下一步查询,以此类推,DNS1直到查询DNS4才获得答案,于是DNS1将最终的查询结果回复给主机。
图3中,主机向DNS1发出迭代查询,DNS1上没有答案,但它返回一个参考地址,告诉主机可以到DNS2进行下一步查询,于是主机向DNS2发出迭代查询,DNS2上没有答案,但它返回一个参考地址,告诉主机可以到DNS3进行下一步查询,以此类推,主机直到查询DNS4才获得答案。
图2的流程是目前比较普及的。
3.1在图2模式下,主机第一个查询的DNS,即DNS1,将主机的地址和端口,被主机查询方的地址和协议、端口(当一私网主机访问位于同一NAT后面的私网主机时,被主机查询方的地址和协议、端口将被用来确定是哪一台私网主机发起访问),即DNS1与该主机通讯的地址和协议、端口的信息通知给后面的DNS,办法是利用DNS查询数据报文中保留的附加资源记录(Additional RRs),按特定格式,将主机的地址和端口,DNS1的地址和协议、端口的信息和一些标识(如是否是访问方,这样被查询DNS能够知道是不是主机在查询自己)打包到附加资源记录中,发送给后面的DNS。最后的DNS查询到地址时执行下面的步骤3.3。
3.2在图2,图3模式下,主机将自己将要用来访问被查询对象的地址和端口,被主机查询方的地址和协议、端口,即DNS与该主机通讯的地址和协议、端口的信息通知给被查询的DNS,如主机用169.254.240.25这一地址和端口5000查询DNS,并计划用169.254.240.25这一地址和端口6000访问被查询对象,假定DNS地址和端口为59.40.4.112:53,协议为17(UDP),于是主机利用DNS查询数据报文中保留的附加资源记录(Additional RRs),按特定格式,将主机的地址和端口169.254.240.25:5000,主机将要用来访问被查询对象的地址和端口169.254.240.25:6000,DNS地址和端口59.40.4.112:53和协议17及其它一些标识(如是否是访问方,这样被查询DNS能够知道是不是主机在查询自己,这里是主机在查询,所以应该为“是”标识;还可以加上访问方的标识,如访问方的域名)打包到附加资源记录中,发送给被查询的DNS,如果DNS还需要向后面的DNS查询,如图2中的DNS1,除了不知道主机将要用来访问被查询对象的地址和端口外,DNS1得知主机的地址和端口,被主机查询方的地址和协议、端口,则DNS可以在附加资源记录中更改相关的资料。最后的DNS查询到地址时进入下面的步骤3.3。
3.3查询到地址的DNS,如图2,图3中的DNS4,判断查询到的注册项(参见表1<DNS服务器上的域名注册表>)的状态,如果为无效,则转到3.7,然后判断其是否为私网主机,如果是则转到3.4,如果否则转到3.7;
3.4判断查询类型,即DNS查询数据报文中的Opcode项,如果为标准查询类型(Standard Query),即为0,则转到3.5,否则转到3.7;
3.5从附加资源记录中分离出访问方的地址,端口和访问方即将用来访问被查询对象的地址和端口(可选项,可以视需要采用,在下面的描述中,统一以访问方的地址,端口来代表访问方的信息),DNS的地址和协议、端口与被查询的域名和其对应的主机地址(可选项)按一定格式打包,同时还加入一些标识控制信息,如NAT需要密码确认则需要加入特定密码,如查询到的注册项的[是否需要访问许可]为是,则需要以特定的方式告诉接收方,基于安全和效率等不同方面的考虑,可以不理会注册设定,而要求全部都要许可或全部都不需要许可。将这些信息按一定格式打包,这是访问申请的数据报文,向查询到的注册项的主机地址的特定控制端口(特定协议的特定端口)发送,如果需要访问许可的回复,则等待回复,如在规定的时间内没有收到回复,则视为不同意访问;在不需要回复的情况下,为了让被访方有足够时间进行访问前准备,可以插入一定时间的延时。
3.6位于公网的NAT(在图1中是NAT1)收到访问申请者,在上述例子中是DNS,发来的访问申请的数据包后,从中分离出访问方的地址端口和访问方即将用来访问被查询对象的地址和端口(可选项),访问方所查询的DNS的地址和协议、端口,被查询的域名和其对应的主机地址(可选项),NAT查询其<可受访域名注册表>,参见表3,NAT按以下步骤确定是否可以接受访问:
3.6.1如果找不到被查询的域名,则该域名还没注册到NAT,不可以接受访问,
转到3.6.6
3.6.2找到被查询的域名,如果该记录已经无效,域名注册已经失效,不可以接受访问,转到3.6.6
3.6.3核对表中的[绑定外网地址]与上面收到的主机地址,这两者应该一致,否则为出错,地址绑定不一致,不可以接受访问,转到3.6.6
3.6.4核对表中的[已注册端口数量],如果为0,则表示该域名目前不存在有效的可受访端口,不可以接受访问,转到3.6.6
3.6.5取出表中被查询的域名的[域名唯一编号],在<可受访域名端口注册表>中,查找[域名唯一编号]与上述编号一致的记录,也就是被查询的域名所注册的端口。
表2,表3中的<访客登记表>和<出入记录表>均有相同的结构,下面介绍各映射表的含义。
<访客登记表>,访问申请的记录表,[访客登记表唯一编号]为每个记录项的唯一编号,[协议]表示所开放的协议,对应于IP数据包头的协议项,如果不限定,则可以用通配符表示,假定用全为1来表示,[远端地址]为访问方的地址,[远端端口]为访问方所用的端口,如果端口要待真正访问时才能确定,则用保留的全为0表示,如果不限端口,则用保留的全为1表示,应该注意到,这里的要点是对端口的不同选择项进行有效区分表示,具体的表示方法可以并不一定限于以上方式,[本地端地址]为访问方将要访问的NAT外网地址,[本地端端口]为访问方将要访问的端口,如果端口全部开放,则用保留的全为1表示,[主机地址]为被访主机的私网地址,[时间]为记录项的建立时间或者最新更新时间,[状态]表示注册项是否有效,假定1表示有效,0表示无效。对[远端端口][本地端端口],需要补充说明的是,它们是数据传输层(TCP和UDP)以上才有的,对一些协议,如网络层的ICMP,是没有端口的,对这种情况,则可以用未定义值表示,假定用0来表示。
<出入记录表>,记录实际的来访/外访,当来访是基于<访客登记表>的相关记录项时,[登记表对应记录地址]为该相关记录项的内存地址,便于更新<访客登记表>中的相关记录项,[访客登记表唯一编号]对应于<访客登记表>中有相应编号的记录项,在更新<访客登记表>前对该编号进行核对,确保更新正确,[协议]表示来访/外访的IP数据包表头所对应的协议,[远端地址]为访问方/被外访方的主机地址,[远端端口]为访问方/被外访方所用的端口,[本地端地址]为来访/外访所对应的NAT外网地址,[本地端端口]为来访/外访所对应的NAT的端口,[主机地址]为私网内主机的地址,[主机端口]为私网内主机的端口,[时间]为记录项的建立时间或者最新更新时间,[状态]表示注册项是否有效,假定1表示有效,0表示无效,[是否为私网互连]表示访问方和被访问方是否同在本NAT的私网内,假定1表示是,0表示否。对[远端端口][本地端端口][主机端口],需要补充说明的是,它们是数据传输层(TCP和UDP)以上才有的,对一些协议,如网络层的ICMP,是没有端口的,对这种情况,则可以用未定义值表示,假定用0来表示。
对互联网连接,[协议]-[远端地址]-[远端端口]-[本地端地址]-[本地端端口]就唯一地确定了一个连接。
按已经注册的端口,逐个分析待建立的连接,分析的过程如下:
如3.2中所述例子,userA.somecompany.com的域名,它在NAT上注册了一个端口,[协议]为6,端口号为80,[端口限制类型]为1,“放宽端口限制”,见表3,所以待建立的连接为[协议]为6,[远端地址],即访问方地址为169.254.240.25,[远端端口]为不确定,因为是“放宽端口限制”,访问申请时端口还没有确定,假定用0表示,[本地端地址]为219.133.221.228,也就是NAT的公网地址,[本地端端口]为80,也就是所述域名所申请的端口,NAT接着
a)查找<出入记录表>中是否存在与待建立的连接有冲突的连接,也就是查找[协议]为6,[远端地址]为169.254.240.25,[远端端口]为0,[本地端地址]为219.133.221.228,[本地端端口]为80的有效记录,如果存在,则表示待建立的连接与现有出入记录有冲突,所以不可以接受访问。
b)查找<访客登记表>中是否存在[协议]为6,[远端地址]为169.254.240.25,[远端端口]为0,[本地端地址]为219.133.221.228,[本地端端口]为80的有效记录,如果存在,则表示待建立的连接与现有访客登记记录有冲突,所以不可以接受访问。如果不存在完全一致的有效记录,则查找<访客登记表>中是否存在[协议]为6(或者为不限定协议,假定用全为1表示),[远端地址]为169.254.240.25,[远端端口]为0(或者为不确定,假定用0表示;或不限定端口,假定用全为1表示),[本地端地址]为219.133.221.228,[本地端端口]为80(或者为不确定,假定用0表示;或不限定端口,假定用全为1表示)的有效记录,如果存在,则表示待建立的连接与现有访客登记记录有冲突,所以不可以接受访问。
应该注意到,出入记录表中记录的是所有已经发生的连接或者所有因素均确定的预先绑定,所以没有不确定的端口(对于一些协议,如ICMP,是没有端口的,对这种情况,假定用0来统一表示,这样说来它们也都是同样的),访客登记表中是即将要发生的连接,存在不限协议(不限定来访协议),不确定的端口和不限端口的情况(所有端口都开放;不限定来访端口)。实际应用中,可以考虑进行一定的放宽处理,如将要建立的连接其协议和端口都为确定的,而且<出入记录表>和<访客登记表>中不存在与之完全一样的有效记录,只是<访客登记表>中存在有可能与其一致的有效记录,则可以放宽考虑为可以接受访问。对来访数据包的处理流程是这样的,首先看<出入记录表>中是否存在与之完全一样的有效记录,如果有,则转到该记录中对应的主机,如果没有则看<访客登记表>中是否存在与之完全一样的有效记录,如果有,则转到该记录中的主机,如果没有则考虑<访客登记表>中可能与其一致(不确定或不限定的协议和端口)的记录。如将要建立的连接存在不确定的协议和端口,在<出入记录表>和<访客登记表>中,所有可能与其一致的有效记录均为确定协议和端口,则可以放宽考虑为可以接受访问。上述问题的本质是要同时在相同的地址处理不同的连接,产生一些影响是必然的。还可以进行一些其它的放宽处理,最大限度地减少不能访问的机率。
NAT按照上述步骤确定是否可以接受访问,当所有的注册端口均可以接受访问时,NAT将为被访的域名所注册的每个有效端口在<访客登记表>中建立一条记录,如果一个协议的所有端口都开放,那么只建立一条记录,实际上,对这种情况,NAT只允许注册一个端口。
NAT检查访问方的地址是否属于NAT自己的地址范围,如果不是,NAT查找<可受访域名注册表>中被访域名所对应的[是否NAT]项,确定被访者是否为下一级NAT,如果是,则向该NAT的控制端口发出类似的连接申请。下一级NAT再重复这一循环,直到被访者不是NAT为止。
如果访问方的地址是否属于NAT自己的地址范围,则表示为NAT内网主机呼叫内网主机,从附加资源记录中分离出访问方的地址和端口和其所查询的DAN地址和协议、端口,查找<出入记录表>中这样的记录,其[协议]为DNS的协议,[本地端地址][本地端端口]为访问方的地址和端口,[远端地址][远端端口]为DNS的地址和端口,找到后,从[主机地址][主机端口]即可确定哪个私网主机是访问方,NAT将<访客登记表>中的[远端地址]更改为该访问方的私网地址。如果被访者为下一级NAT,则向其控制端口发送一个特别的连接申请,附加上访问方的地址端口和所查询的DNS地址和协议、端口,下一级NAT收到连接申请后,如果连接申请中包括上述特殊信息,则做以下特殊处理,检查该访问方的私网地址是否属于NAT自己的地址范围,如果是则表示访问方与被访者均属于该NAT,按前述方法在<出入记录表>查找出该访问方的私网地址,NAT将<访客登记表>中的[远端地址]更改为该访问方的私网地址。这一步骤将一直循环下去,直到被访者不是下一级NAT为止。
3.6.5.1当存在多层NAT时,上一层的NAT向下一层发出连接申请,每一层的NAT都需要确认是否可以接受访问,并向上一层回复,这将是非常耗时的。如果只在最上层的NAT进行确认,其他NAT不确认也确保不会发生冲突,只需进行访客登记,则可以节省很多时间。实现这一目标的方法为:将NAT的端口划分为两部分,一部分为接受外网访问专用,第一次访问由外网发起,另一部分为对外访问专用,第一次访问由内网发起。这两部分的范围可以是不对称的,如接受外网访问为10000以下的端口,对外访问为10000以上的端口。当进行这样的划分时,相关的流程,如<可受访域名端口注册表>注册,确认是否可以接受访问等需要增加一个相应判断,而<可受访域名端口注册表>中的设置也要在接受外网访问的端口范围内(除非是不限端口的情况,假定用全为1表示)。
3.6.6如果连接申请方要求需要访问许可的回复,则NAT按照上述结果向连接申请方答复,答复的内容包括是否允许访问,允许访问的生命期等。如果没有这一步,就算NAT不能接受访问,连接申请方也无法得知这一情况,这样访问方按得到的地址发起访问,就有可能产生混淆。当不可以接受访问时,而连接申请方并没有要求需要访问许可的回复,则NAT可以产生一条警告信息,提醒系统管理员进行相应处理,如要求相关主机在DNS服务器上注册为需要访问许可。
3.7 DNS向主机发送查询结果。发送查询结果也可以用类似的方法,利用DNS将一些信息返回给主机,这些信息即上述<DNS服务器上的域名注册表>中的[类型],[是否需要访问许可],还可以包括:DNS已经(或者没有)向被访者发出连接申请,且已经收到何种答复,访问许可的生命期等。应该要注意到,实际上是主机上的地址定位器进行DNS查询,而在一些版本的操作系统中,为了减少网络交通,地址定位器先查询自己的缓存(Cache),如果缓存中存在域名的有效机器地址映射,则地址定位器不再进行DNS查询,对静态独立地址的主机而言,这一方法是很好的,但对动态独立地址的主机,及本发明所述的私网主机,这将带来问题,所以如果地址定位器能够获取所查询主机的类型,并进行区别对待,如对动态独立地址主机和私网主机,如超过一定时间后再连接,则需要重新查询,而且可以在缓存中建立域名和域名所在DNS的绑定,在一定时间内重新查询时直接查询域名所在DNS;本发明的另一种实施方式是主机上的地址定位器收到DNS返回信息后,发现被访者为私网主机,并且DNS没有向被访者发出连接申请,则地址定位器可以直接向被访者发出连接申请,如果需要被访者的访问许可,则等待回复,如果在特定时间收不到回复,则视为不允许。如果不允许访问,地址定位器把结果向查询地址的应用程序回复,而可以访问的话,继续下一步。
3.8主机判断查询结果是否为有效地址,如果是则可以直接访问该地址。
4.NAT收到外网的数据包时的处理流程如下:
4.1判断是否为发送到NAT的控制端口(特定协议的特定端口)的控制信息,如果是,则转相应的程序进行处理。然后对一些特殊协议进行处理,如网络传输过程出错而返回的ICMP数据包,在<出入记录表>是不会找到相关记录的,NAT需要分析该数据包内附带的原发送数据包的表头,提取出原发送方和接收方的信息,然后查找<出入记录表>,找到匹配的记录后,将其转发给内网的原发送方,处理结束。
4.2NAT从数据包中提取出协议,发送方地址,接收方地址,NAT分析协议,提取出发送方端口和接收方端口(对于一些协议,如ICMP,是没有端口的,对这种情况,统一用未定义符表示,假定用0来表示),NAT检查其<出入记录表>,如果存在这样的有效记录,其[协议]与提取出的协议一致,[远端地址]和[远端端口]与发送方地址和端口一致,[本地端地址]和[本地端端口]与接收方地址和端口一致,则对数据包进行地址转换,接收方地址转为找到的记录中[主机地址]所对应值,接收方端口转为找到的记录中[主机端口]所对应值(对没有端口的协议,则不需要做端口转换),并转发到内网,同时将[时间]更新为当前时间。如果不存在这样的有效记录,则检查其<访客登记表>,查找这样的有效记录,其[协议]与提取出的协议一致,[远端地址]与发送方地址一致,[本地端地址]与接收方地址一致,[本地端端口]和接收方端口一致,[远端端口]和发送方端口一致,找到后转4.2.1,当不存在完全一致的记录时,[协议]可以为不限协议,假定用所有位均为1表示,[本地端端口]可以为不确定端口,假定为0,或者可以为不限端口,假定用所有位均为1表示,[远端端口]可以为不确定端口,假定为0,或者可以为不限端口,假定用所有位均为1表示,如果找到了有效记录,进行以下操作:
4.2.1记录中[协议]不属于不限定,即不是所有协议都开放的情况,并且[本地端端口]不属于不限定,即不是所有端口都开放的情况,只要一发生访问,其引导访问的目的也就完成了,该记录就可以丢弃了,于是将其[状态]改为无效,假定为0。转入4.2.3。
4.2.1记录中[协议]属于不限定,即所有协议都开放的情况,或者[本地端端口]属于不限定,即所有端口都开放的情况,由于还可能有后续的访问,所以还不能将该记录丢弃,将[时间]更新为当前时间,对有端口的协议,如果[远端端口]为不确定端口,假定为0,则填入发送方端口,这是“放宽端口限制”的情况,访问登记时,发送方端口还没能确定,只有真正访问时才能确定。进入4.2.3
4.2.3对数据包进行地址转换,接收方地址转为找到的记录中的[主机地址]所对应值,并转发到内网(应该注意到,对来访数据包不做端口转换)。
4.2.4在<出入记录表>中记录本次访问,[登记表对应记录地址]就是上述<访客登记表>记录所在的地址,对上述4.2.1中所有端口全部开放的情况,由于还可能有后续的访问,所以当<出入记录表>有更新时,还需要更新<访客登记表>中相应记录,[登记表对应记录地址]就是存放这一地址,可以减少查找时间,[访客登记表唯一编号]就是<访客登记表>中的[访客登记表唯一编号],由于<访客登记表>中的记录有可能失效而被覆盖,为了防止更新时出错,更新前比较这两个编号是否一致,如果一致则可以更新。[协议]为从IP数据包头提取出的协议,[远端地址][远端端口]为发送方地址和端口,[本地端地址][本地端端口]为接收方地址和端口,[主机地址]为找到的记录中[主机地址]所对应值,[主机端口]为转发到内网时所用的端口,由于我们没有对此进行转换,所以即为接收方端口,时间为当前时间,状态为有效,假定为1(对于没有端口的协议,端口统一用未定义符表示,假定用0来表示)。
5.私网内主机在收到外网访问后进行回复,或者自己主动访问外网时,都会通过NAT进行转发,NAT收到这些内网的数据包时的处理流程如下:
5.1判断是否为发送到NAT的控制端口(特定协议的特定端口)的控制信息,如果是,则转相应的程序进行处理。
5.2当NAT收到内网端发来的数据包时,从IP数据包中提取出协议,发送方地址,接收方地址,NAT分析协议,提取出发送方端口和接收方端口(对于一些协议,如ICMP,是没有端口的,对这种情况,统一用未定义符表示,假定用0来表示),在<可外访主机注册表>中查找[主机地址]为发送方地址的有效记录,如果找不到,则表示发送方不能访问外网(如果NAT设置为所有主机均可访问外网,则可以忽略这一步骤),NAT丢弃该数据包,处理结束。如发送方可以访问外网,NAT检查<可外访主机注册表>中查找到记录的设置值,按其不同进行相应处理:
5.3假使[类型]为NAT必须按[绑定外网端口]中指定的端口对数据包进行端口转换,假定用0表示,则找出[绑定外网地址]、[绑定外网端口]和[绑定公网端口],并将其确定为本地端地址、可能的本地端端口和可能的公网端口(对于一些协议,如ICMP,是没有端口的,对这种情况,统一用未定义符表示,假定用0来表示),在<出入记录表>查找这样的有效记录,其协议]与提取出的协议一致,[远端地址]和[远端端口]与接收方地址和端口一致,[主机地址]和[主机端口]与发送方地址和端口一致,如果找到这样的记录,则到5.3.1,否则转5.3.2。
5.3.1判断[是否为私网互连]的值,如果为1,即发送方和接收方均在本NAT内,在<出入记录表>查找[访客登记表唯一编号]与上述查找到的记录一致的一个记录(两个为孪生记录),找到后,则将两个记录的[时间]更新为当前时间,对数据包进行地址转换,将发送方地址和端口转换为第一条记录的[本地端地址]和[本地端端口],接收方地址和端口转换为新找到记录的[主机地址]和[主机端口],在内网转发(对没有端口的协议,则不需要做端口转换),处理结束。
如果[是否为私网互连]的值为0,即发送方和接收方不同在本NAT内,将记录的[时间]更新为当前时间,对数据包进行地址转换,将发送方地址和端口转换为记录的[本地端地址]和[本地端端口](对没有端口的协议,则不需要做端口转换),转发到外网,处理结束。
5.3.2检查其<访客登记表>,查找这样的有效记录,其协议]与提取出的协议一致,[本地端地址][本地端端口]与接收方地址和端口一致,[远端地址]与发送方地址一致,[远端端口]和可能的公网端口一致,找到后表示被访者也属于本NAT,转5.3.3,如找不到,则查找这样的有效记录,其[协议]与提取出的协议一致(当[协议]为不限定,假定用所有位均为1表示,不需要一致),[本地端地址][本地端端口]与接收方地址和端口一致(当[本地端端口]为未确定端口,假定为0,或者为不限端口,假定用所有位均为1表示,不需要一致),[远端地址]与发送方地址一致,[远端端口]和可能的公网端口一致(当[远端端口]为未确定端口,假定为0,或者为不限端口,假定用所有位均为1表示,不需要一致),如找不到则执行5.3.6,否则表示被访者也属于本NAT,找到的记录中[主机地址]所对应值即为接收方主机地址,接着
5.3.3在<出入记录表>查找这样的有效记录,其[协议]与提取出的协议一致,[远端地址]和[远端端口]与本地端地址和可能的本地端端口一致,[本地端地址][本地端端口]与接收方地址和接收方端口一致,如果找不到,转5.3.4,如果NAT须按指定端口转换,则做出错处理(对没有端口的协议,做出错处理),否则NAT自动分配新的可能的本地端端口,重复上述检查,直到没有冲突,然后进入5.3.4。
5.3.4在<出入记录表>查找这样的有效记录,其[协议]与提取出的协议一致,[远端地址]和[远端端口]与接收方地址和端口一致,[本地端地址][本地端端口]与本地端地址和可能的本地端端口一致,如果找不到,转5.3.5,如果NAT须按指定端口转换,则做出错处理(对没有端口的协议,做出错处理),否则NAT自动分配新的可能的本地端端口,转5.3.3。
5.3.5对数据包进行地址转换,接收方地址转为找到的记录中[主机地址]所对应值,这是接收方主机地址,发送方地址和端口转为本地端地址和可能的本地端端口(对没有端口的协议,不需要端口转换),并在内网内转发,同时在<出入记录表>增加两条记录,第一条记录的[远端地址][远端端口]为接收方地址和端口,[本地端地址][本地端端口]为本地端地址和可能的本地端端口,[主机地址][主机端口]为发送方地址和端口,第二条记录的[远端地址][远端端口]为本地端地址和可能的本地端端口,[本地端地址][本地端端口]为接收方地址和端口,[主机地址][主机端口]为接收方主机地址和端口,对没有端口的协议,端口统一为未设定值,假定为0,将<访客登记表>记录的内存地址和编号填入两条孪生记录的[登记表对应记录地址][访客登记表唯一编号],[协议]填入提取出的协议,同时将[是否为私网互连]设置为是,其默认设置值为否。处理结束。这样低层NAT内部的主机的连通可以在本层内完成,不需要通过高层的NAT转发,减少了网络交通,提高了效率。如果发送方支持,NAT可以向其发送控制信息,这样同一层的主机甚至可以不需要NAT的转发而直接连通。当内部转发的频率不高时,可以不做上述的特别步骤,只在最外层的NAT进行判断,如发送方和接收方均在本NAT内,则进行相应的内部转发。
5.3.6这里还可以检查外访的记录是否与<访客登记表>中的来访登记是否有冲突,但参照3.6.5.1,如果对端口进行了划分,可以省略这一步骤。
在<出入记录表>查找这样的有效记录,其[协议]与提取出的协议一致,[远端地址]和[远端端口]与接收方地址和端口一致,[本地端地址][本地端端口]与本地端地址和可能的本地端端口一致,如果找不到,转5.3.7,否则表示存在冲突,在不是NAT自动分配端口的情况下,做出错处理(对没有端口的协议,做出错处理),否则NAT自动分配新的可能的本地端端口,重复上述检查,直到没有冲突,然后进入5.3.7。
5.3.7对数据包进行地址转换,将发送方地址和端口转换为上述本地端地址和可能的本地端端口(对没有端口的协议,不需要端口转换),并转发到外网;同时在<出入记录表>中增加一条记录,处理结束。
5.4假使[类型]为只有端口发生冲突时才进行端口转换,按[绑定外网端口]中指定的端口对数据包进行地址转换,假定用1表示,则执行上述5.3,只是将可能的本地端端口用发送方端口代替,如果5.3执行中没有出错,则处理结束,否则将可能的本地端端口用[绑定外网端口]代替,重新执行上述5.3。
5.5假使[类型]为只有端口发生冲突时才进行端口转换,按NAT 2自动分配的端口对数据包进行端口转换,假定用2表示,则执行上述5.3,只是将可能的本地端端口用NAT分配的端口代替。
5.6假使[类型]为端口发生冲突时不做任何端口转换,丢弃该数据包,做出错处理,假定用3表示,则执行上述5.3,只是将可能的本地端端口用发送方端口代替。不管5.3执行中出错与否,处理均结束。
需要注意的是,参照3.6.5.1,如果对端口进行了划分,以上NAT分配的端口需要在NAT对外访问的端口范围内。
实际中会碰到需要动态分配端口的情况,如两台主机在进行多媒体通讯,期间需要增加一个随机的端口以传输视频数据,这种情况尽管可以通过将<可受访域名端口注册表>中的[已注册端口]设置为所有端口都开放,但这是一种静态的映射,基于安全考虑,许多时候只希望有需要时才打开相应的端口,即在<访客登记表>或者<出入记录表>中建立一条绑定,两者的区别是:
a)<出入记录表>中所有的协议、端口均为确定的(对没有端口的协议,端口总是为未定义状态,假定为0)
b)<访客登记表>中的协议、端口可以为不确定的。
在<访客登记表>或者<出入记录表>中建立绑定的方法为向NAT的控制端口(特定协议的特定端口)发送开放临时端口的申请,NAT收到申请后,参照上述步骤进行处理,如果没有存在冲突,则在<访客登记表>或者<出入记录表>中建立一条记录。
在实际应用中,NAT对所有的注册等操作可以进行必要的权限控制。而且这样的操作可以是在NAT的外网,如在NAT的外网向NAT的控制端口发送开放临时端口的申请,而不应理解为仅限于内网。外网为公网的NAT可以设置为只能接收特定地址的DNS的连接申请,而且连接申请中需要提供密码,NAT中维持一个可信的DNS清单和连接密码,只有连接申请的发送方的地址属于该可信的DNS清单,并且提供的密码正确,NAT才会处理其连接申请,该可信的DNS清单和连接密码可以是动态更新的,动态更新的方法可以是位于公网的管理服务器向NAT的特定控制端口发送相应的更新指令。
<出入记录表>是NAT中数据量最大,查找最频繁的数据表,为了提高查找效率,可以将其按不同的[本地端地址]和[本地端端口]等分区存储,如不同的端口在不同的内存区域存储,各个区域的大小可以按其使用数据量进行调整,这样可以减少查找的数据项,提高速度。
<访客登记表>和<出入记录表>都是不断循环使用的动态数据表,其中的数据项都有相应的生命期,NAT可以依据其流量大小等动态调整生命期,用户申请建立的每项记录项,可以要求特定生命期,NAT通过对[时间]提前或延后,实现不同的生命期。一个后台线程负责定期对动态数据表进行清理,将当前时间与动态数据表中的[时间]相减,即可知道数据项的寿命,如当前时间为6/18/2006 5:18:02 PM,数据表中的某项记录的[时间]为6/18/2006 5:16:00 PM,两者相减得出该项记录的寿命为2:02分钟,假定一项记录的生命期为2分钟,则该记录已经超出生命期,需要将其[状态]改为无效,这样有新记录需要加入时,查找数据表中的无效项并将其覆盖,实现数据表的循环使用。
上面结合附图和实施例描述了发明的方法以及具体实施例,熟悉本技术领域的人员可以理解,本发明可以有许多不同的实施方式。因此,应该理解,本发明并不局限于所描述的优选实施例,正如随附权利要求书所给出的本发明的精神实质,本发明包括其专利保护范围内所进行的各种更换、变动和修改。
Claims (8)
1.一种实现网络无缝互连的方法,其实现机理为将私网主机在DNS上注册,建立一个域名,其对应的地址是私网主机所在NAT给该私网主机分配的公网地址;别的主机(访问方)需要访问该私网主机时,利用域名来访问;私网主机向NAT注册其域名,NAT建立私网主机的域名和其私网地址的绑定;访问方向DNS查询被访域名的地址;对操作系统的地址定位器和DNS服务器进行功能扩展,将访问方的地址和端口等信息向后面的DNS传递;当私网主机的注册DNS服务器收到对私网主机的查询时,除了通常的应答操作外,还向该私网主机的注册地址(NAT地址)的特定控制端口发送访问方将要访问该私网主机的连接申请;NAT从连接申请得知该访问方需要访问的私网主机域名,NAT查询该私网主机域名在NAT上的注册信息,获知该域名对应的私网地址,NAT还从连接申请中得知访问方地址,NAT建立访问方地址、被访NAT公网地址和被访私网主机的私网地址的绑定,基于这些绑定,NAT准备相应的访客登记记录;访问方按DNS回复的地址访问私网主机,实际上是访问该私网主机所属的NAT地址;NAT查找该访问方地址所对应的访客登记记录,获知其要访问的对象的私网地址,然后对收到的数据包进行地址转换,将目的地址转为私网主机的私网地址并进行转发。
2.根据权利要求1所述的方法,其私网主机所在的私网可以为多层NAT结构。
3.根据权利要求1所述的方法,其连接申请的发起方可以为私网主机的注册DNS服务器,也可以是发起访问的主机。
4.根据权利要求1所述的方法,其作为访问方的主机和该主机所查询的DNS将访问方的地址和端口等信息按特定格式向后面的DNS传递,也将所查询的主机域名的相关信息按特定格式向前面的查询方传递。
5.根据权利要求1所述的方法,当私网主机的注册DNS服务器收到访问方对私网主机地址的查询时,除了通常的应答操作外,还向该私网主机的注册地址,也就是该私网主机所属的NAT地址的特定控制端口发送特定格式的连接申请,该连接申请包含被查询的私网主机的域名,访问方的地址和端口等信息,在连接申请中,DNS指定是否需要许可回复,如果需要回复,则只有收到NAT允许访问的回复,才会向地址查询方发送NAT的地址。
6.根据权利要求1所述的方法,访问方主机可以是连接申请的发起方,当访问方主机通过查询私网主机的注册DNS服务器获得该私网主机的地址后,访问方主机向该地址(也就是该私网主机所属的NAT地址)的特定控制端口发送特定格式的连接申请,该连接申请包含被查询的私网主机的域名,访问方的地址和端口等信息。在连接申请中,访问方主机指定是否需要许可回复,如果需要回复,则只有收到NAT允许访问的回复,才会向NAT发起访问。
7.根据权利要求1所述的方法,其NAT包含私网主机的域名注册表,将私网主机的域名和其私网地址进行绑定。
8.根据权利要求1所述的方法,其NAT接收连接申请,依据连接申请中的被访问域名,查找该私网主机域名在NAT上的注册信息,获知该域名对应的私网地址,将此私网地址、此私网地址对应的NAT公网地址和连接申请中的访问方地址和端口建立绑定,当访问方访问NAT时,NAT依据这一绑定,确定访问方所要访问的私网地址,并对来访数据包进行地址转换,将目的地址转换为被访私网主机的私网地址,并在内网转发。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CNA200610093500XA CN101098284A (zh) | 2006-07-02 | 2006-07-02 | 实现网络无缝互连的方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CNA200610093500XA CN101098284A (zh) | 2006-07-02 | 2006-07-02 | 实现网络无缝互连的方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN101098284A true CN101098284A (zh) | 2008-01-02 |
Family
ID=39011813
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CNA200610093500XA Pending CN101098284A (zh) | 2006-07-02 | 2006-07-02 | 实现网络无缝互连的方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN101098284A (zh) |
Cited By (18)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2009114995A1 (zh) * | 2008-03-19 | 2009-09-24 | 中国科学院计算技术研究所 | 多层nat环境下面向应用的名字注册系统及其服务方法 |
US8159975B2 (en) | 2008-06-25 | 2012-04-17 | Alpha Networks Inc. | Self-configured network system and self-configuration method of same |
CN101242413B (zh) * | 2008-01-30 | 2012-12-12 | 中国科学院计算技术研究所 | 同根多层nat网络中服务资源地址获取系统及方法 |
CN103166967A (zh) * | 2013-03-07 | 2013-06-19 | 李想 | 无中心交换通信系统及其通信方法 |
CN103338151A (zh) * | 2013-07-09 | 2013-10-02 | 杭州华三通信技术有限公司 | 公网客户端访问私网服务器的方法及路由器 |
CN103369065A (zh) * | 2013-07-05 | 2013-10-23 | 杭州华三通信技术有限公司 | 一种报文转发方法及设备 |
CN103581350A (zh) * | 2012-07-25 | 2014-02-12 | 中国电信股份有限公司 | 跨越nat发布互联网服务的方法、终端、设备和系统 |
CN103684909A (zh) * | 2013-11-30 | 2014-03-26 | 广州西维尔计算机系统有限公司 | 基于事件源的信息处理方法 |
CN103888734A (zh) * | 2014-03-26 | 2014-06-25 | 浙江宇视科技有限公司 | 两层私网下媒体流控制方法及装置 |
CN103929739A (zh) * | 2013-01-14 | 2014-07-16 | 中国科学院微电子研究所 | 一种无线局域网中安全信息查找方法及通信设备 |
CN104144410A (zh) * | 2013-05-10 | 2014-11-12 | 中国电信股份有限公司 | 移动数据网络点对点数据通信方法、终端、服务器和系统 |
CN106941527A (zh) * | 2017-03-15 | 2017-07-11 | 网宿科技股份有限公司 | 一种数据传输中转方法及其系统 |
CN107783728A (zh) * | 2016-08-31 | 2018-03-09 | 百度在线网络技术(北京)有限公司 | 数据存储方法、装置和设备 |
CN108810188A (zh) * | 2018-06-16 | 2018-11-13 | 武汉商启网络信息有限公司 | 一种云主机自助绑定和解绑域名的管理系统 |
CN109560947A (zh) * | 2017-09-25 | 2019-04-02 | 北京国双科技有限公司 | 一种转换连接的控制方法及装置 |
CN109688100A (zh) * | 2018-09-07 | 2019-04-26 | 平安科技(深圳)有限公司 | Nat穿透方法、装置、设备及存储介质 |
CN110351373A (zh) * | 2019-07-15 | 2019-10-18 | 阳光电源股份有限公司 | 一种电站的远程监控方法及装置 |
CN111800806A (zh) * | 2020-07-06 | 2020-10-20 | 浪潮卓数大数据产业发展有限公司 | 一种单机多网同联的实现方法 |
-
2006
- 2006-07-02 CN CNA200610093500XA patent/CN101098284A/zh active Pending
Cited By (27)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101242413B (zh) * | 2008-01-30 | 2012-12-12 | 中国科学院计算技术研究所 | 同根多层nat网络中服务资源地址获取系统及方法 |
WO2009114995A1 (zh) * | 2008-03-19 | 2009-09-24 | 中国科学院计算技术研究所 | 多层nat环境下面向应用的名字注册系统及其服务方法 |
US8159975B2 (en) | 2008-06-25 | 2012-04-17 | Alpha Networks Inc. | Self-configured network system and self-configuration method of same |
CN103581350B (zh) * | 2012-07-25 | 2017-03-01 | 中国电信股份有限公司 | 跨越nat发布互联网服务的方法、终端、设备和系统 |
CN103581350A (zh) * | 2012-07-25 | 2014-02-12 | 中国电信股份有限公司 | 跨越nat发布互联网服务的方法、终端、设备和系统 |
CN103929739B (zh) * | 2013-01-14 | 2018-11-30 | 中国科学院微电子研究所 | 一种无线局域网中安全信息查找方法及通信设备 |
CN103929739A (zh) * | 2013-01-14 | 2014-07-16 | 中国科学院微电子研究所 | 一种无线局域网中安全信息查找方法及通信设备 |
CN103166967B (zh) * | 2013-03-07 | 2015-11-18 | 李想 | 无中心交换通信系统及其通信方法 |
CN103166967A (zh) * | 2013-03-07 | 2013-06-19 | 李想 | 无中心交换通信系统及其通信方法 |
CN104144410A (zh) * | 2013-05-10 | 2014-11-12 | 中国电信股份有限公司 | 移动数据网络点对点数据通信方法、终端、服务器和系统 |
CN103369065B (zh) * | 2013-07-05 | 2017-08-22 | 新华三技术有限公司 | 一种报文转发方法及设备 |
CN103369065A (zh) * | 2013-07-05 | 2013-10-23 | 杭州华三通信技术有限公司 | 一种报文转发方法及设备 |
CN103338151B (zh) * | 2013-07-09 | 2017-07-14 | 新华三技术有限公司 | 公网客户端访问私网服务器的方法及路由器 |
CN103338151A (zh) * | 2013-07-09 | 2013-10-02 | 杭州华三通信技术有限公司 | 公网客户端访问私网服务器的方法及路由器 |
CN103684909A (zh) * | 2013-11-30 | 2014-03-26 | 广州西维尔计算机系统有限公司 | 基于事件源的信息处理方法 |
CN103888734A (zh) * | 2014-03-26 | 2014-06-25 | 浙江宇视科技有限公司 | 两层私网下媒体流控制方法及装置 |
CN103888734B (zh) * | 2014-03-26 | 2017-08-15 | 浙江宇视科技有限公司 | 两层私网下媒体流控制方法及装置 |
CN107783728A (zh) * | 2016-08-31 | 2018-03-09 | 百度在线网络技术(北京)有限公司 | 数据存储方法、装置和设备 |
CN107783728B (zh) * | 2016-08-31 | 2021-07-23 | 百度在线网络技术(北京)有限公司 | 数据存储方法、装置和设备 |
CN106941527A (zh) * | 2017-03-15 | 2017-07-11 | 网宿科技股份有限公司 | 一种数据传输中转方法及其系统 |
CN109560947A (zh) * | 2017-09-25 | 2019-04-02 | 北京国双科技有限公司 | 一种转换连接的控制方法及装置 |
CN108810188A (zh) * | 2018-06-16 | 2018-11-13 | 武汉商启网络信息有限公司 | 一种云主机自助绑定和解绑域名的管理系统 |
CN109688100B (zh) * | 2018-09-07 | 2022-06-17 | 平安科技(深圳)有限公司 | Nat穿透方法、装置、设备及存储介质 |
CN109688100A (zh) * | 2018-09-07 | 2019-04-26 | 平安科技(深圳)有限公司 | Nat穿透方法、装置、设备及存储介质 |
CN110351373A (zh) * | 2019-07-15 | 2019-10-18 | 阳光电源股份有限公司 | 一种电站的远程监控方法及装置 |
CN110351373B (zh) * | 2019-07-15 | 2022-04-08 | 阳光电源股份有限公司 | 一种电站的远程监控方法及装置 |
CN111800806A (zh) * | 2020-07-06 | 2020-10-20 | 浪潮卓数大数据产业发展有限公司 | 一种单机多网同联的实现方法 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN101098284A (zh) | 实现网络无缝互连的方法 | |
CN101242413B (zh) | 同根多层nat网络中服务资源地址获取系统及方法 | |
JP3688547B2 (ja) | 位置識別子管理装置及び移動計算機並びに位置識別子管理方法及び位置識別子処理方法 | |
CN100573496C (zh) | 用于处理跨IPv4和IPv6网络的IPv4 DNS PTR查询的方法和装置 | |
CN102132544B (zh) | 用于在因特网协议版本6域中接收数据分组的方法、以及相关联的装置和住宅网关 | |
CN100484125C (zh) | 对地址询问的回答方法和回答装置 | |
CN103141073B (zh) | 名称数据库服务器、名称解析系统、条目搜索方法以及条目搜索装置 | |
CN1756259B (zh) | 因特网协议网络中使用网络地址翻译的方法和系统 | |
US6535511B1 (en) | Method and system for identifying embedded addressing information in a packet for translation between disparate addressing systems | |
EP1583323B1 (en) | Communications apparatus, name resolution method and program | |
US8249081B2 (en) | Dynamic virtual private network (VPN) resource provisioning using a dynamic host configuration protocol (DHCP) server, a domain name system (DNS) and/or static IP assignment | |
US7991854B2 (en) | Dynamic session maintenance for mobile computing devices | |
CN103141074A (zh) | 名称数据库服务器、名称解析系统、条目搜索方法以及条目搜索程序 | |
JP2008283670A (ja) | 機器およびサービスのアクセス、接続性および相互運用性 | |
EP3002684A1 (en) | Configuring communications between virtual machines | |
CN101795303A (zh) | 能够连接到具有本地地址域的网络的方法及系统 | |
CN102907073B (zh) | Dns服务器、网关和在数据传输中管理端口范围标识符的方法 | |
CN1998218A (zh) | 初始化从第一计算机网络到第二计算机网络的通信会话 | |
CN106888145A (zh) | 一种vpn资源访问方法及装置 | |
US8301738B1 (en) | Systems and methods for private network addressing in IP protocols | |
CN102098355B (zh) | 基于云服务的由IPv6方发起通信的IPv4/IPv6翻译方法 | |
JP2003258838A (ja) | 通信装置およびネットワークシステム | |
CN100518147C (zh) | 一种基于双向隧道的实现跨异构网络移动通信的方法 | |
CN102025604B (zh) | 一种承载网络及数据传输方法 | |
CN100334858C (zh) | 一种利用双重隧道机制穿透nat的方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C02 | Deemed withdrawal of patent application after publication (patent law 2001) | ||
WD01 | Invention patent application deemed withdrawn after publication |