通过NAT进行双向访问的方法 【技术领域】
本发明涉及通信领域,特别涉及通过NAT(Network AddressTranslation网络地址翻译)进行双向访问的方法。
背景技术
在传统的网络管理中,网络中可能会存在很多个不同终端,比如计算机的局域网中可能存在多台电脑,网络打印机等网络设备。一般来讲,同一个局域网中的不同终端都各自拥有不同的IP地址才能在网络中进行通信。因为网络地址(IP)资源正在迅速被耗尽,大多数的家庭网络都使用网络地址翻译(NAT)技术建立了一个网关。NAT是网络工程任务组(IETF)制订的一种标准,它允许私有网络中的多台电脑或设备共享一个全球唯一的公共地址(所使用私有地址的范围为10.0.x.x、192.168.x.x和172.x.x.x),通过同一路由器来对外网进行访问。比如说,同一路由器端口下,可能有10台计算机,它们在内部网络中分别具有不同的内部IP地址,但是在对外部网络进行访问时都是使用相同的IP地址。在这种情况下,NAT机制允许同一路由器端口下的一个计算机族通过NAT地址翻译后,使用同一IP地址来对外部的网络进行访问。但是由于NAT地址翻译存在单通地问题,即位于NAT内部的IP设备经NAT地址翻译之后,可以访问NAT外部的IP设备,而位于NAT之外的IP设备,却无法通过NAT内部设备的内部IP地址访问该内部设备。
现有的SOAP(简单对象协议)协议的实现是基于基本的RPC(远程过程调用)方法调用,也即一个标准的C-S(用户-服务器)结构,通过HTTP的传输承载了请求—回应方式,这不是一个对等的双向通讯实体,如果需要建立反向连接,则必须再次发起HTTP连接请求,这对于NAT的单通是不适用的。这样,就出现了位于NAT外部的设备不能主动发起与位于NAT内部设备之间的对话的问题。例如,位于NAT外部的代理,无法主动发起请求对位于NAT内部的网络终端进行管理,这样就大大限制了网络管理的有效性。
美国专利第6487605号及第6195705号揭示了一种通信方法,该方法中通信双方建立连接后,一方间隔一定的时间来向另一方发送消息,以报告它的情况(比如是否正常工作,或者是否有告警信息等等)。这是在双方的连接已建立的情况下实现的。在使用NAT的情况下,NAT内部终端经过NAT建立与外部终端的联系后,若经过一定的时间后双方无应答,NAT将会在访问地址表中删除该外部终端的IP地址,从而使外部终端无法访问内部终端。如果内部终端需要访问外部终端,需要重新通过NAT建立连接。
现有的解决方法,如美国专利公开第20030002496号公开了一种采用建立与本地IP地址对应的主机名关联表,在外部IP发起呼叫的情况下,在与本地IP地址对应的主机名关联表内进行查找,找到发起呼叫的主机名称对应的内部IP地址,然后在两者之间建立连接。采用这种方法虽然可以解决通过NAT的双向访问问题,但是每次在外部发起与内部终端进行通信时,都要首先查找主机名与地址关联表,然后才能建立双方的连接,这样在双方通信频繁的情况下会显著增加消息发送的时延,有可能造成网络的拥塞。同样,美国专利公开第20030055978号也公开了一种通过对内网IP地址的映射来寻找目的主机地址的方法,也不适用于双方通信频繁的情况。再者,由于终端设备的数量巨大以及布局的不可控性,使得用户很难确切得知每一个终端所对应的NAT类型和数量,同时对于每一个NAT建立地址映射表也同样大大增加了运营维护成本。这也使得此两种方式很难应用于对NAT内部终端的网络管理。
【发明内容】
本发明的目的在于提供一种通过NAT进行双向访问的方法,使位于NAT外部和内部的终端都可作为呼叫发起者进行通信,又能避免双方频繁通信的情况下每次都浪费时间建立对内部IP地址的映射或是建立其他的对应地址表进行查找,从而有效地减小通信的时延并降低运行维护成本,可以通过外部终端对位于NAT内部的终端进行管理。
本发明的目的是通过以下技术方法来实现的:一种通过NAT进行双向访问的方法,该方法基于长连接(长连接即双方先建立通讯连接,连接建立后不断开,然后再进行报文发送和接收)的应用而实现。因为位于NAT内部的终端可以自由访问位于NAT外部的终端,所以首先由位于NAT内部的终端向位于NAT外部的终端发起呼叫,请求建立连接。在上述的连接建立后,会话双方中的一方终端以一定的周期向另一方终端发送数据包以保持双方的长连接,该周期为一个小于本地NAT失效周期的时间间隔。例如建立连接后,内部终端根据上述周期向外部终端发送数据包。
本发明所公开的方法实现了通过NAT进行双向访问,使NAT外部的终端可以访问NAT内部的终端。从而可使运行商管理大规模位于防火墙或NAT的内部终端,高效地管理数量众多的终端设备。而且可以对位于用户端的设备进行自动配置、远程监控、及时排错、远程操作(测试,升级等),避免和减缓了到众多的用户端进行上门维护的不便和工作量。
【附图说明】
图1是一个简单的通过NAT进行双向访问的网络架构图。
图2是NAT内部终端和外部终端建立连接的时序图。
【具体实施方式】
本发明优选实施方式为NAT内部终端为被管对象,NAT外部终端为代理。根据NAT单通的特性,内部终端可以访问外部终端,首先在NAT内部终端即被管对象中保存代理设备的域名(出厂时预设),当内部终端打开电源并连接到网络后,它通过上述设置的域名主动寻找外部代理设备并向其发出HTTP鉴权请求,从而建立TCP(传输控制协议)会话。代理设备收到终端发起的请求,对内部终端用户进行管理鉴权,鉴权通过后建立连接,承载该HTTP传输的TCP会话被确认建立。并且,同时NAT将外部终端的IP地址加入其访问地址表中。在会话建立后,外部代理终端与位于NAT内部的终端只需查找本地的访问地址表,即可进行双方的通信。在NAT中,该TCP会话建立后,若在一定时间间隔内双方无应答,NAT将会在访问地址表中删除该会话的外部终端的IP地址。所以上述鉴权后的HTTP连接必须保持长连接,即当终端向代理设备发起一个HTTP请求并建立了一个TCP会话后,这个会话一直保持存在,并将内部终端到外部代理终端及外部代理终端到内部终端的双向请求数据包承载于其上,通过这种方式使该外部终端的IP地址一直处于NAT的访问地址表中。这样可以解决经由NAT地址转换之后,NAT外部设备无法访问内部设备IP的问题。
本发明的通过NAT进行双向访问的方法是通过如下的方法来保持长连接的。根据网络终端内部的时钟,使通信双方中的一方终端周期性地发送数据包给另一方终端,该数据包可以是内容为空的数据包或是其它有内容的数据包,发送该数据包的目的是使外部代理终端可以知道内部终端的连接状态。数据包的发送可以是内部终端发送给外部终端,也可以是外部终端发送给内部终端。位于NAT外部的终端接收到该数据包后确认上述连接的存在。所述的数据包的发送周期必须小于NAT的失效周期(agetime),每个NAT的失效周期可能不同,在进行网络配置时,可根据与外部代理终端相连接的NAT的失效周期设定数据包的发送间隔。
这样在这条HTTP长连接上,NAT外部代理终端和NAT内部终端之间可以实现双向通信,NAT外部代理终端可以接受内部终端的请求同时可以主动向内部终端发起会话请求。这样,所有的包括(自动)配置,告警事件以及远程控制等网管功能都可通过此会话实现。通过长连接、单个TCP会话承载和周期性的数据包,使NAT的内部终端和外部代理终端顺利地建立双向连接,很好的解决了NAT的单通问题。
为进一步阐述本发明,请参阅图1所示,标号11、12代表两个位于NAT3内部的终端,标号2代表内部局域网,标号4代表位于NAT3外部的终端,即代理设备(所述的代理设备即网络管理中具有代理功能的设备)。内部终端11,12通过局域网2相连接。首先在内部终端11、12中设定外部代理终端4的域名,当内部终端11、12接入网络时,时序图请参阅2所示,首先内部终端11、12向外部终端发出登录域的请求消息数据包,NAT3将请求消息数据包中对应的目的IP地址加入其访问地址列表,外部终端4接收到由内部终端11、12发送来的请求消息数据包后与内部终端11、12建立TCP会话,这样内部终端11、12与外部终端4之间的连接就建立了。当内部终端11、12通过域登录鉴权后,根据系统内部的时钟,它们以小于本地NAT的失效时限(例如3秒),周期性地向外部终端4发送数据包。外部终端4接收到数据包后,确认发送数据包终端正常工作。否则,认定在一定的时间内未收到数据包的内部终端11或12的工作状态为不正常。
该发明可用于运行商管理大规模并位于防火墙或NAT的内部终端的问题,使得运行商能高效地管理数量众多的终端设备,并能穿透防火墙或NAT管理终端设备。使运行商能对位于用户端的设备进行自动配置,远程监控,及时排错,远程操作(测试,升级等),避免和减缓了到众多的用户端进行上门维护的不便和工作量。