一种确定nat类型的方法及装置的制作方法

文档序号:7745665阅读:120来源:国知局
专利名称:一种确定nat类型的方法及装置的制作方法
技术领域
本发明涉及网络地址转换(NAT)技术,尤指一种确定NAT类型的方法及装置。
背景技术
随着接入Internet的计算机数量的不断猛增,因特网协议(IP)地址资源也就愈加显得捉襟见肘,在这种情况下,网络地址转换(NAT)技术便应运而生了。一时间,NAT作为一种解决IPv4地址短缺以避免保留IP地址困难的方案而流行起来。不仅如此,通过使用NAT技术还能够有效地避免来自网络外部的攻击,隐藏并保护网络内部的计算机。虽然 NAT技术在解决IP地址资源短缺以及保护内部计算机方面起到了积极作用,但是,另一方面,NAT技术也无疑与互联网的开放特性背道而驰,使许多应用受到了极大的影响。为此, 人们开始研究如何穿越NAT,STUN协议在此起到了积极的作用,通过使用STUN协议,可以检测出位于NAT之后的客户端的NAT类型以及经过转换后所对应的公网IP地址和端口,为后期的打洞以及端到端(P2P)系统中的节点选择起到了至关重要的作用。常见的NAT类型可分为四种,分别是完全圆锥型NAT(Full Cone NAT)、受限圆锥型 NAT (Address Restricted Cone NAT)、端口受限圆锥型 NAT (Port-Restricted Cone NAT), 以及对称NAT (Symmetric NAT)。下面分别对这四种NAT类型进行简单介绍。1)完全圆锥型NAT,也就是一对一的NAT。一旦一个内部地址(iAddr :portl)映射到外部地址(eAddr :port2),所有发自 (iAddr :portl)的包都经由(eAddr :port2)向外发送。任意外部主机都能通过给(eAddr port2)发包到达(iAddr :portl)。2)受限圆锥型NAT。一旦一个内部地址(iAddr :portl)映射到外部地址(eAddr :port2),所有发自 (iAddr :portl)的包都经由(eAddr :port2)向外发送。在内部地址(iAddr :portl)之前发送过包到任意外部主机(hostAddr :any)的情况下,任意外部主机(hostAddr :any)都能通过给(eAddr :port2)发包到达(iAddr :portl),其中,“any”也就是说端口不受限制。3)端口受限圆锥型NAT。类似受限圆锥型NAT (Restricted cone NAT),还包括端口限制。一旦一个内部地址(iAddr :portl)映射到外部地址(eAddr :port2),所有发自 (iAddr :portl)的包都经由(eAddr :port2)向外发送。在内部地址(iAddr :portl)之前发送过包到外部主机(hostAddr :port3)的情况下,一个外部主机(hostAddr :port3)能够发包到达(iAddr :portl)。4)对称 NAT。每一个来自相同内部IP与port的请求到一个特定目的地的IP地址和端口,都被映射到一个独特的外部来源的IP地址和端口。同一个内部主机发出一个信息包到不同的目的端,将使用不同的映射。STUN 协议的全称是 Simple Traversal of User Datagram ProtocolThroughNetwork Address Translate-ors,主要功能是检测是否位于NAT后面,如果位于 NAT后面,经过NAT转换后的地址和端口是什么,另外可以检测NAT的类型。STUN协议的基本思想是在私网内部安装一个STUN客户端(STUNClient),在公网上安装两个STUN服务器(STUN Server), STUN协议定义了一些消息格式,大体上分成请求 / 响应 Request/Response, STUN Client 向 STUNServer 发送 Request, STUN Server 发送 Response 给 STUN Client。在 STUN Server 收到来自 STUN Client 的 UDP包后,STUN Server 将接收到该用户数据报协议(UDP)包的地址和端口,并利用UDP传回给STUN Client, STUN Client将收到的地址和端口与本机的IP地址和端口进行比较,如果不同,说明在NAT后面, 否则,说明就位于NAT之前(即没有经过地址转换的IP)。为了检测出不同类型的NAT,STUN协议定义了一些消息属性,要求STUNServer有不同的动作,比如发送响应时使用不同的IP地址和端口,或者改变端口等等。

图1为现有STUN测试方案的示意图,如图1所示,为了确定NAT后的STUN Client 所对应的公网IP和端口及其NAT类型,需要有两个STUN Server和STUN Client之间遵循一定的协议,进行相互配合才可完成。为了达到这一目的,在图1所示的技术方案中,需要有四个测试项,其中,虚箭头线表示测试项1,单点划箭头线表示测试项2、双点划箭头线表示测试项3,实箭头线表示测试项4。需要说明的是,在一次STUN测试中,并非所有的测试项都会进行,从第一项测试开始进行顺序测试,只要经过中间任一步骤能够最终确定NAT 类型及其公网地址时,测试即可终止。这四项测试的具体内容如表1所示。
权利要求
1.一种确定网络地址转换NAT类型的方法,其特征在于,包括STUN客户端同时向第一 STUN服务器的第一端口和第二端口分别发送第一测试项的请求包和第二测试项的请求包;第一 STUN服务器和第二 STUN服务器返回相应的应答包;STUN客户端根据收到的应答包判断客户端的NAT类型。
2.根据权利要求1所述的方法,其特征在于,所述第一测试项的请求包的目的地址为所述第一 STUN服务器的IP地址和所述第一 STUN服务器的第一端口号;所述第二测试项的请求包的目的地址为所述第一 STUN服务器的IP地址和所述第一 STUN服务器的第二端口号。
3.根据权利要求2所述的方法,其特征在于,所述第一STUN服务器和第二 STUN服务器返回相应的应答包为所述第一 STUN服务器从第一端口反馈第一应答包,在第一应答包中携带有第一端口反馈的客户端的公网IP和端口,所述第一 STUN服务器从第二端口反馈第二应答包,在第二应答包中携带有第二端口反馈的客户端的公网IP和端口 ;所述第一 STUN服务器从第三端口反馈第三应答包,从所述第二 STUN服务器向客户端返回第四应答包。
4.根据权利要求3所述的方法,其特征在于,所述第一STUN服务器和第二 STUN服务器为配置为双网卡设备的同一 STUN服务器;所述第一应答包,第二应答包和第三应答包由双网卡中的第一网卡绑定的IP返回;所述第四应答包由双网卡中的第二网卡绑定的IP返回。
5.根据权利要求3或4所述的方法,其特征在于,STUN客户端根据收到的应答包判断客户端的NAT类型包括如果所述STUN客户端收到第一应答包和第二应答包,并且所述第一应答包和第二应答包中分别携带的公网IP地址和端口不一致,则确定所述STUN客户端的NAT类型为对称型 NAT ;如果所述STUN客户端收到第一应答包和第二应答包,并且所述第一应答包中携带的公网IP地址和端口或第二应答包中携带的公网IP地址和端口,与所述STUN客户端的本地 IP地址和端口号相同,并且,所述STUN客户端收到第四应答包,则确定所述STUN客户端具有公网IP ;如果所述STUN客户端收到第一应答包和第二应答包,并且所述第一应答包中携带的公网IP地址和端口和第二应答包中携带的公网IP地址和端口,与所述STUN客户端的本地 IP地址和端口号相同,但是,所述STUN客户端未收到第四应答包,则确定所述STUN客户端在防火墙后;如果所述STUN客户端收到第一应答包和第二应答包,并且所述第一应答包和第二应答包中分别携带的公网IP地址和端口相同,但与所述STUN客户端的本地IP地址和端口号不相同,并且,所述STUN客户端收到第四应答包,则确定所述STUN客户端的NAT类型是完全圆锥型NAT ;如果所述STUN客户端收到第一应答包和第二应答包,并且所述第一应答包和第二应答包中分别携带的公网IP地址和端口相同,但与所述STUN客户端的本地IP地址和端口号不相同,并且,所述STUN客户端未收到第四应答包、收到第三应答包,则确定所述STUN客户端的NAT类型是限制圆锥型NAT ;如果所述STUN客户端收到第一应答包和第二应答包,并且所述第一应答包和第二应答包中分别携带的公网IP地址和端口相同,但与所述STUN客户端的本地IP地址和端口号不相同,但是,所述STUN客户端未收到第四应答包、未收到第三应答包,则确定所述STUN客户端的NAT类型是端口限制圆锥型NAT。
6.根据权利要求3或4所述的方法,其特征在于,如果所述STUN客户端没有收到任何应答包,则UDP不通,结束本流程。
7.一种确定网络地址转换NAT类型的装置,其特征在于,包括STUN客户端、第一 STUN 服务器和第二 STUN服务器,其中,STUN客户端,用于同时向第一 STUN服务器的第一端口和第二端口分别发送第一测试项的请求包和第二测试项的请求包;接收来自第一 STUN服务器和第二 STUN服务器的应答包,并根据收到的应答包判断客户端的NAT类型;第一 STUN服务器,用于接收请求包并返回相应应答包;第二 STUN服务器,用于返回相应的应答包。
8.根据权利要求7所述的装置,其特征在于,所述第一测试项的请求包的目的地址为所述第一 STUN服务器的IP地址和所述第一 STUN服务器的第一端口号;所述第二测试项的请求包的目的地址为所述第一 STUN服务器的IP地址和所述第一 STUN服务器的第二端口号;所述第一 STUN服务器,具体用于从第一端口反馈第一应答包,在第一应答包中携带有从第一端口反馈的客户端的公网IP和端口 ;从第二端口反馈第二应答包,在第二应答包中携带有从第二端口反馈的客户端的公网IP和端口 ;从所述第一 STUN服务器的第三端口反馈第三应答包;所述第二 STUN服务器,具体用于向客户端返回第四应答包。
9.根据权利要求8所述的装置,其特征在于,所述第一STUN服务器和第二 STUN服务器可为配置为双网卡设备的同一 STUN服务器;所述第一应答包,第二应答包和第三应答包由双网卡中的第一网卡绑定的IP返回;所述第四应答包由双网卡中的第二网卡绑定的IP返回。
10.根据权利要求8或9所述的装置,其特征在于,所述STUN客户端具体用于在所述STUN客户端收到第一应答包和第二应答包,并且所述第一应答包和第二应答包中分别携带的公网IP地址和端口不一致时,确定所述STUN客户端的NAT类型为对称型 NAT ;在所述STUN客户端收到第一应答包和第二应答包,并且所述第一应答包中携带的公网IP地址和端口或第二应答包中携带的公网IP地址和端口,与所述STUN客户端的本地IP 地址和端口号相同,并且,所述STUN客户端收到第四应答包时,确定所述STUN客户端具有公网IP ;在所述STUN客户端收到第一应答包和第二应答包,并且所述第一应答包中携带的公网IP地址和端口和第二应答包中携带的公网IP地址和端口,与所述STUN客户端的本地IP 地址和端口号相同,但是,所述STUN客户端未收到第四应答包时,确定所述STUN客户端在防火墙后;在所述STUN客户端收到 第一应答包和第二应答包,并且所述第一应答包和第二应答包中分别携带的公网IP地址和端口相同,但与所述STUN客户端的本地IP地址和端口号不相同,并且,所述STUN客户端收到第四应答包时,确定所述STUN客户端的NAT类型是完全圆锥型NAT ;在所述STUN客户端收到第一应答包和第二应答包,并且所述第一应答包和第二应答包中分别携带的公网IP地址和端口相同,但与所述STUN客户端的本地IP地址和端口号不相同,并且,所述STUN客户端未收到第四应答包、收到第三应答包时,确定所述STUN客户端的NAT类型是限制圆锥型NAT ;在所述STUN客户端收到第一应答包和第二应答包,并且所述第一应答包和第二应答包中分别携带的公网IP地址和端口相同,但与所述STUN客户端的本地IP地址和端口号不相同,但是,所述STUN客户端未收到第四应答包、未收到第三应答包时,确定所述STUN客户端的NAT类型是端口限制圆锥型NAT ;在所述STUN客户端没有收到任何应答包时,UDP不通。
全文摘要
本发明提供了一种确定NAT类型的方法及装置,包括STUN客户端同时向第一STUN服务器的第一端口和第二端口分别发送第一测试项的请求包和第二测试项的请求包;第一STUN服务器和第二STUN服务器返回相应的应答包;STUN客户端根据收到的应答包判断客户端的NAT类型。本发明的确定NAT类型的方法不依赖于测试包的先后顺序,而且通过并行测试,节省了的NAT类型检测的时间,不仅如此,本发明的NAT类型判断方法也更加简洁高效。
文档编号H04L29/12GK102196057SQ201010143479
公开日2011年9月21日 申请日期2010年3月3日 优先权日2010年3月3日
发明者王志华, 邵颖哲, 陈谦, 鲁小锁 申请人:腾讯科技(深圳)有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1