CN102196057A - 一种确定nat类型的方法及装置 - Google Patents

一种确定nat类型的方法及装置 Download PDF

Info

Publication number
CN102196057A
CN102196057A CN2010101434796A CN201010143479A CN102196057A CN 102196057 A CN102196057 A CN 102196057A CN 2010101434796 A CN2010101434796 A CN 2010101434796A CN 201010143479 A CN201010143479 A CN 201010143479A CN 102196057 A CN102196057 A CN 102196057A
Authority
CN
China
Prior art keywords
response packet
stun
client
port
address
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.)
Granted
Application number
CN2010101434796A
Other languages
English (en)
Other versions
CN102196057B (zh
Inventor
王志华
陈谦
鲁小锁
邵颖哲
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Shenzhen Tencent Computer Systems Co Ltd
Original Assignee
Tencent Technology Shenzhen Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Tencent Technology Shenzhen Co Ltd filed Critical Tencent Technology Shenzhen Co Ltd
Priority to CN201010143479.6A priority Critical patent/CN102196057B/zh
Publication of CN102196057A publication Critical patent/CN102196057A/zh
Application granted granted Critical
Publication of CN102196057B publication Critical patent/CN102196057B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Data Exchanges In Wide-Area Networks (AREA)

Abstract

本发明提供了一种确定NAT类型的方法及装置,包括STUN客户端同时向第一STUN服务器的第一端口和第二端口分别发送第一测试项的请求包和第二测试项的请求包;第一STUN服务器和第二STUN服务器返回相应的应答包;STUN客户端根据收到的应答包判断客户端的NAT类型。本发明的确定NAT类型的方法不依赖于测试包的先后顺序,而且通过并行测试,节省了的NAT类型检测的时间,不仅如此,本发明的NAT类型判断方法也更加简洁高效。

Description

一种确定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:port1)映射到外部地址(eAddr:port2),所有发自(iAddr:port1)的包都经由(eAddr:port2)向外发送。任意外部主机都能通过给(eAddr:port2)发包到达(iAddr:port1)。
2)受限圆锥型NAT。
一旦一个内部地址(iAddr:port1)映射到外部地址(eAddr:port2),所有发自(iAddr:port1)的包都经由(eAddr:port2)向外发送。在内部地址(iAddr:port1)之前发送过包到任意外部主机(hostAddr:any)的情况下,任意外部主机(hostAddr:any)都能通过给(eAddr:port2)发包到达(iAddr:port1),其中,“any”也就是说端口不受限制。
3)端口受限圆锥型NAT。类似受限圆锥型NAT(Restricted cone NAT),还包括端口限制。
一旦一个内部地址(iAddr:port1)映射到外部地址(eAddr:port2),所有发自(iAddr:port1)的包都经由(eAddr:port2)向外发送。在内部地址(iAddr:port1)之前发送过包到外部主机(hostAddr:port3)的情况下,一个外部主机(hostAddr:port3)能够发包到达(iAddr:port1)。
4)对称NAT。
每一个来自相同内部IP与port的请求到一个特定目的地的IP地址和端口,都被映射到一个独特的外部来源的IP地址和端口。同一个内部主机发出一个信息包到不同的目的端,将使用不同的映射。
STUN协议的全称是Simple Traversal of User Datagram Protocol ThroughNetwork 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所示。
  测试项编号   目的地址   是否改变IP   是否改变Port   返回地址   返回内容
1 (IP1,Port1) (IP1,Port1)   STUN Server1看到的STUN Client的公网地址(IP,Port)
  2   (IP1,Port1)   是   是   (IP2,Port2)   无
3   (IP2,Port1)   否   否   (IP2,Port1)   STUN Server2看到的STUN Client的公网地址(IP,Port)
  4   (IP2,Port1)   否   是   (Ip2,Port2)   无
表1
表1中,测试项1要求STUN Client向目的STUN Server1的地址(IP1,Port1)发送请求包,请求STUN Server1返回STUN Client的公网IP和端口;测试项2同样要求STUN Client向STUN Server1的同一地址发送请求包,请求STUN Server1转发请求给STUN Server2的地址(IP2,Port2),要求STUN Server2返回一个应答包;测试项3的目的地址则是(IP2,Port1),请求STUN Server2返回它所看到的STUN Client的公网IP和端口;测试项4同样是发给STUNServer2的,要求STUN Server2改变端口后返回一个应答包。
图2为现有图1所示STUN测试方案的STUN测试的流程示意图,描述了如何通过这四项测试最终完成对STUN Client的NAT类型的确定,如图2所示,
首先,进行测试项1(包括步骤200~步骤203):STUN Client向STUN Server1的Port1发送数据包,如果STUN Client没有收到应答包,那么表示STUN Client和STUN Server1之间UDP不通,测试结束;否则,STUN Client检查本地IP是否和STUN Server1返回的映射IP相同,这里,不论相同与否,都将进行测试项2的测试;
进行测试项2(包括步骤204~步骤210):STUN Client将向STUN Server1申请要STUN Server2的Port2返回数据包,如果STUN Client收到返回包并且映射IP和本地IP相同,那么STUN Client不在NAT之后,具有公网IP,如果此时STUN Client没有收到返回包,则STUN Client端有防火墙。当STUN Client的本地IP和STUN Server1返回的映射IP不同的情况下,如果STUN Client收到了从STUN Server2的Port2发回的数据包的话,那么说明STUN Client是完全圆锥型NAT,即完全透明的NAT;但是,若此时并没有收到从STUN Server2的Port2返回的数据包的话,就要开始测试项3的测试;
进行测试项3(包括步骤211~步骤213):STUN Client向STUN Server2的端口Port1发送数据包,要求其返回STUN Client的映射IP,如果STUN Client的本地IP和STUN Server2返回的映射IP不同,那么则可断定STUN Client所属的NAT是对称型的,否则,需要进行测试4的测试;
进行测试项4(包括步骤214~步骤217):STUN Client要求STUN Server2改变端口后再返回一个数据包,如果STUN Client收到了返回包,则认为STUNClient的NAT类型是IP限制型的,否则为端口限制型。
从图1和图2所示的测试方案和流程可以看出,现有STUN测试方法能够有效检测出STUN Client是否位于NAT之后,并且能够检测出NAT类型,以及所对应的公网IP和端口。但是,在现有方案中,如果排除UDP不通的情况,至少要发两个测试包才能检测出NAT的类型;而且,测试包有先后的顺序依赖,必须按部就班,一个测试结束后,方可进行下一个测试。显然,现有这种串行化的NAT类型测试方法,不能满足大规模的客户端的NAT检测请求,而且现有方案在流程上也显得相当的繁琐,缺乏高效性。
发明内容
有鉴于此,本发明的主要目的在于提供一种确定NAT类型的方法及装置,能够简洁、可行地并行化实现STUN测试方法,快速获得NAT类型。
为达到上述目的,本发明的技术方案是这样实现的:
一种确定网络地址转换NAT类型的方法,包括:
STUN客户端同时向第一STUN服务器的第一端口和第二端口分别发送第一测试项的请求包和第二测试项的请求包;
第一STUN服务器和第二STUN服务器返回相应的应答包;
STUN客户端根据收到的应答包判断客户端的NAT类型。
所述第一测试项的请求包的目的地址为所述第一STUN服务器的IP地址和所述第一STUN服务器的第一端口号;
所述第二测试项的请求包的目的地址为所述第一STUN服务器的IP地址和所述第一STUN服务器的第二端口号。
所述第一STUN服务器和第二STUN服务器返回相应的应答包为:
所述第一STUN服务器从第一端口反馈第一应答包,在第一应答包中携带有第一端口反馈的客户端的公网IP和端口,所述第一STUN服务器从第二端口反馈第二应答包,在第二应答包中携带有第二端口反馈的客户端的公网IP和端口;
所述第一STUN服务器从第三端口反馈第三应答包,从所述第二STUN服务器向客户端返回第四应答包。
所述第一STUN服务器和第二STUN服务器为配置为双网卡设备的同一STUN服务器;
所述第一应答包,第二应答包和第三应答包由双网卡中的第一网卡绑定的IP返回;所述第四应答包由双网卡中的第二网卡绑定的IP返回。
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。
如果所述STUN客户端没有收到任何应答包,则认为UDP不通,结束本流程。
一种确定网络地址转换NAT类型的装置,包括STUN客户端、第一STUN服务器和第二STUN服务器,其中,
STUN客户端,用于同时向第一STUN服务器的第一端口和第二端口分别发送第一测试项的请求包和第二测试项的请求包;接收来自第一STUN服务器和第二STUN服务器的应答包,并根据收到的应答包判断客户端的NAT类型;
第一STUN服务器,用于接收请求包并返回相应应答包;
第二STUN服务器,用于返回相应的应答包。
所述第一测试项的请求包的目的地址为所述第一STUN服务器的IP地址和所述第一STUN服务器的第一端口号;所述第二测试项的请求包的目的地址为所述第一STUN服务器的IP地址和所述第一STUN服务器的第二端口号;
所述第一STUN服务器,具体用于从第一端口反馈第一应答包,在第一应答包中携带有从第一端口反馈的客户端的公网IP和端口;从第二端口反馈第二应答包,在第二应答包中携带有从第二端口反馈的客户端的公网IP和端口;从所述第一STUN服务器的第三端口反馈第三应答包;
所述第二STUN服务器,具体用于向客户端返回第四应答包。
所述第一STUN服务器和第二STUN服务器可为配置为双网卡设备的同一STUN服务器;
所述第一应答包,第二应答包和第三应答包由双网卡中的第一网卡绑定的IP返回;所述第四应答包由双网卡中的第二网卡绑定的IP返回。
所述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类型的方法可以看出,本发明不依赖于测试包的先后顺序,而且通过并行测试,节省了的NAT类型检测的时间,不仅如此,本发明的NAT类型判断方法也更加简洁高效,实现了NAT类型的快速获取。
附图说明
图1为现有STUN测试方案的示意图;
图2为现有图1所示STUN测试方案的STUN测试的流程示意图;
图3为本发明STUN测试方案的示意图;
图4为本发明STUN测试的流程示意图。
具体实施方式
图3为本发明STUN测试方案的示意图,如图3所示,本发明STUN测试方案以标准STUN协议的核心思想为基础,包括两个STUN Server,两个STUNServer和STUN Client之间遵循双方约定好的协议,在图3所示的技术方案中,需要有两个测试项,其中,请求包a和请求包b分别代表这两项测试项的请求包,请求包a和请求包b同时从STUN Client发往同一个STUN Server(图3中所示以STUN ServerA为例)的不同端口(图3中所示以端口X和端口Y为例);STUN ServerA和STUN ServerB按照相应的协议返回应答包,图3中所示的四个应答包用点划箭头线表示,点划箭头线1,点划箭头线2,点划箭头线3和点划箭头线4分别表示从STUN ServerA的端口X、端口Y、端口Z和STUN SeverB的端口S返回应答包;而STUN Client根据收到的应答包来判断客户端的NAT类型。表2为本发明的两项测试项的具体内容。
表2
如表2所示,其中,IP1表示STUN ServerA的IP地址,IP2表示STUNServerB的IP地址;(IPa,Porta)表示STUN ServerA收到请求包a时看到的客户端的IP地址和端口;(IPb,Portb)为STUN ServerA收到请求包b时看到的客户端的IP地址和端口。
在测试项1中,STUN Client请求的目的地址是(IP1,PortX),测试项1要求STUN ServerA从端口X反馈客户端的公网IP和端口,即IPa和Porta,同时要求STUN ServerB向同样的地址返回一个应答包;对于测试项2,STUNClient将请求包发给目的地址(IP1,PortY),类似测试项1,测试项2要求STUNServerA从端口Y反馈客户端的公网IP和端口,即IPb和Portb;但不同的是,STUN ServerA还需要从端口Z向IPb和Portb返回一个应答包。
本发明测试项的部署与现有技术不同的是:在本发明所述的测试方案中,一开始测试时,STUN Client同时向STUN ServerA的不同端口X和端口Y分别发送请求包a和请求包b,如果STUN ServerA收到请求包,那么,STUNServerA将返回应答包,以对STUN Client的请求做出响应。由STUN ServerA和STUN ServerB返回的应答包共有4个,在图3中分别标识为1、2、3和4。其中,应答包1由STUN ServerA的端口X返回,并且携带有STUN Client的公网IP和端口(IPa,Porta);应答包2由STUN ServerA的端口Y返回,携带有STUN Client的公网IP和端口(IPb,Portb);应答包3是,当STUN ServerA收到STUN Client发往端口Y时的请求包b后,从其端口Z向STUN Client的IPb和Portb返回的应答包;应答包4是,STUN ServerA在收到STUN Client发往端口X时的请求包a后,申请让STUN ServerB返回给Client的IPa和Porta的应答包。
如图3所示,本发明确定网络地址转换NAT类型的装置包括STUN客户端、第一STUN服务器和第二STUN服务器,其中,
STUN客户端,用于同时向第一STUN服务器的第一端口和第二端口分别发送第一测试项的请求包和第二测试项的请求包;接收来自第一STUN服务器和第二STUN服务器的应答包,并根据收到的应答包判断客户端的NAT类型;
第一STUN服务器,用于接收请求包并返回相应应答包;
第二STUN服务器,用于返回相应的应答包。
其中,第一测试项的请求包的目的地址为所述第一STUN服务器的IP地址和所述第一STUN服务器的第一端口号;所述第二测试项的请求包的目的地址为所述第一STUN服务器的IP地址和所述第一STUN服务器的第二端口号;
第一STUN服务器,具体用于从第一端口反馈第一应答包,在第一应答包中携带有从第一端口反馈的客户端的公网IP和端口;从第二端口反馈第二应答包,在第二应答包中携带有从第二端口反馈的客户端的公网IP和端口;从所述第一STUN服务器的第三端口反馈第三应答包;
所述第二STUN服务器,具体用于向客户端返回第四应答包;
另外,第一STUN服务器和第二STUN服务器可以配置为双网卡设备的同一STUN服务器,此时,第一应答包,第二应答包和第三应答包由双网卡中的第一网卡绑定的IP返回,而第四应答包由双网卡中的第二网卡绑定的IP返回。
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;
在STUN客户端没有收到任何应答包时,则认为UDP不通。
STUN Client根据收到的应答包判断NAT类型,图4为本发明STUN测试的流程示意图,假设客户端的默认NAT类型为UDP不通,如图4所示,并结合图3为例进行描述,包括以下步骤:
步骤400~步骤402:STUN Client同时向STUN ServerA的不同端口分别发送请求包a和请求包b,如果STUN Client没有收到任何应答包,那么认为UDP不通,结束本流程;否则,进入步骤403。
步骤403~步骤406:如果STUN Client收到了应答包1和应答包2,并且应答包1和应答包2分别描述的STUN Client端的公网地址A(IPa,Porta)和公网地址B(IPb,Portb)不一致,那么,确定STUN Client的NAT类型为对称型NAT,退出本流程。图4中采用AddrA表示公网地址A,AddrB表示公网地址B。如果AddrA与AddrB相一致,则进入下一步。
步骤407~步骤410:如果STUN Client收到的应答包1和应答包2中所描述的STUN Client端的公网地址(IPa,Porta)和(IPb,Portb),与STUN Client的本地IP地址(图4中采用LocalAddr表示)以及端口号相同;此时,如果STUNClient收到应答包4,那么,确定STUN Client具有公网IP,结束本流程;如果没有收到应答包4,那么,确定STUN Client在防火墙后面,结束本流程。
步骤411~步骤412:如果STUN Client收到的应答包1和应答包2中所描述的STUN Client端的公网地址(IPa,Porta)和(IPb,Portb)相同,但是与STUN Client本地IP地址以及端口号不同,此时,如果STUN Client同时还收到应答包4,那么,确定Client的NAT类型为完全圆锥型NAT,结束本流程。
步骤413~步骤415:如果STUN Client收到的应答包1和应答包2中所描述的STUN Client端的公网地址(IPa,Porta)和(IPb,Portb)相同,但是与STUN Client本地IP地址以及端口号不同,此时,如果STUN Client同时未收到应答包4、但收到应答包3,那么,确定STUN Client的NAT类型是限制圆锥型NAT,结束本流程;如果STUN Client既没有收到应答包4,也没有收到应答包3,那么,确定STUN Client的NAT类型是端口限制圆锥型NAT。
从本发明的方法可以看出,与通过标准STUN协议进行客户端NAT类型检测方法相比,本发明的确定NAT类型的方法不依赖于测试包的先后顺序,而且通过并行测试,节省了的NAT类型检测的时间,不仅如此,本发明的NAT类型判断方法也更加简洁高效。
需要说明的是,图3和图4是以两个STUN Server为例进行描述的,另外,还可以是:STUN ServerA配置为双网卡设备,假设两块网卡分别为网卡1和网卡2。应答包1,应答包2和应答包3由STUN ServerA的网卡1绑定的IP返回;而应答包4由STUN ServerA的网卡2绑定的IP返回,同样可以实现本发明确定NAT类型的目的,具体实现属于本领域技术人员基于本发明方案容易替换实现的,这里不再赘述。
以上所述,仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。

Claims (10)

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不通。
CN201010143479.6A 2010-03-03 2010-03-03 一种确定nat类型的方法及装置 Active CN102196057B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201010143479.6A CN102196057B (zh) 2010-03-03 2010-03-03 一种确定nat类型的方法及装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201010143479.6A CN102196057B (zh) 2010-03-03 2010-03-03 一种确定nat类型的方法及装置

Publications (2)

Publication Number Publication Date
CN102196057A true CN102196057A (zh) 2011-09-21
CN102196057B CN102196057B (zh) 2015-11-25

Family

ID=44603421

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201010143479.6A Active CN102196057B (zh) 2010-03-03 2010-03-03 一种确定nat类型的方法及装置

Country Status (1)

Country Link
CN (1) CN102196057B (zh)

Cited By (16)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104104741A (zh) * 2013-04-10 2014-10-15 友讯科技股份有限公司 通过二网络装置的协助完成stun技术的网络系统及其方法
CN104754068A (zh) * 2013-12-30 2015-07-01 三亚中兴软件有限责任公司 Nat环境类型识别方法及装置
CN105049300A (zh) * 2015-08-28 2015-11-11 北京奇艺世纪科技有限公司 一种检测nat网络类型的方法及装置
TWI508495B (zh) * 2013-04-10 2015-11-11 D Link Corp Method of exchanging distributed network messages
CN105635346A (zh) * 2016-03-31 2016-06-01 北京奇艺世纪科技有限公司 一种nat网络类型检测方法及装置
CN105743739A (zh) * 2016-03-28 2016-07-06 Tcl集团股份有限公司 对称式nat的端口预测方法、探测服务器及受测端设备
CN105847343A (zh) * 2016-03-21 2016-08-10 福建星网锐捷通讯股份有限公司 用于点对点传输的公网信息探测方法、装置及系统
CN106302846A (zh) * 2015-06-12 2017-01-04 华为技术有限公司 一种通信连接建立方法及装置、系统
CN107317869A (zh) * 2017-07-06 2017-11-03 深圳市斑点猫信息技术有限公司 一种节点nat类型探测方法、装置以及系统
CN108063816A (zh) * 2017-04-24 2018-05-22 深圳至上移动科技有限公司 一种私有数据云存储穿透式访问方法
CN108092876A (zh) * 2017-11-23 2018-05-29 湖北大学 一种基于即时通讯应用的nat检测方法及系统
CN109831547A (zh) * 2019-03-14 2019-05-31 腾讯科技(深圳)有限公司 Nat穿透方法、装置、设备及存储介质
CN111193813A (zh) * 2019-10-24 2020-05-22 腾讯科技(深圳)有限公司 确定nat类型的测试请求处理方法、装置和计算机设备
CN111935333A (zh) * 2020-08-12 2020-11-13 杭州萤石软件有限公司 Nat类型的确定方法、设备、系统和存储介质
CN112152927A (zh) * 2019-06-26 2020-12-29 杭州海康威视数字技术股份有限公司 一种报文转发方法、系统及网卡和存储介质
CN113746954A (zh) * 2021-09-22 2021-12-03 烽火通信科技股份有限公司 一种nat地址块二次分配迅速回收的方法和装置

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101030865A (zh) * 2006-02-28 2007-09-05 西门子通信技术(北京)有限公司 一种网络地址转换和/或防火墙穿越平台、系统及其方法
CN101083565A (zh) * 2006-05-29 2007-12-05 腾讯科技(深圳)有限公司 一种检测网络类型的方法及系统
US20090094370A1 (en) * 2007-10-05 2009-04-09 Mark Lester Jacob Seamless Host Migration Based on NAT Type

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101030865A (zh) * 2006-02-28 2007-09-05 西门子通信技术(北京)有限公司 一种网络地址转换和/或防火墙穿越平台、系统及其方法
CN101083565A (zh) * 2006-05-29 2007-12-05 腾讯科技(深圳)有限公司 一种检测网络类型的方法及系统
US20090094370A1 (en) * 2007-10-05 2009-04-09 Mark Lester Jacob Seamless Host Migration Based on NAT Type

Cited By (30)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
TWI493924B (zh) * 2013-04-10 2015-07-21 D Link Corp Through the two network devices to help complete the STUN technology network system and its methods
CN104104741A (zh) * 2013-04-10 2014-10-15 友讯科技股份有限公司 通过二网络装置的协助完成stun技术的网络系统及其方法
TWI508495B (zh) * 2013-04-10 2015-11-11 D Link Corp Method of exchanging distributed network messages
CN104104741B (zh) * 2013-04-10 2017-08-29 友讯科技股份有限公司 通过二网络装置的协助完成stun技术的网络系统及其方法
CN104754068A (zh) * 2013-12-30 2015-07-01 三亚中兴软件有限责任公司 Nat环境类型识别方法及装置
CN104754068B (zh) * 2013-12-30 2019-02-05 三亚中兴软件有限责任公司 Nat环境类型识别方法及装置
CN106302846A (zh) * 2015-06-12 2017-01-04 华为技术有限公司 一种通信连接建立方法及装置、系统
CN106302846B (zh) * 2015-06-12 2019-05-28 华为技术有限公司 一种通信连接建立方法及装置、系统
CN105049300A (zh) * 2015-08-28 2015-11-11 北京奇艺世纪科技有限公司 一种检测nat网络类型的方法及装置
CN105049300B (zh) * 2015-08-28 2018-08-07 北京奇艺世纪科技有限公司 一种检测nat网络类型的方法及装置
CN105847343A (zh) * 2016-03-21 2016-08-10 福建星网锐捷通讯股份有限公司 用于点对点传输的公网信息探测方法、装置及系统
CN105847343B (zh) * 2016-03-21 2019-01-25 福建星网锐捷通讯股份有限公司 用于点对点传输的公网信息探测方法、装置及系统
CN105743739A (zh) * 2016-03-28 2016-07-06 Tcl集团股份有限公司 对称式nat的端口预测方法、探测服务器及受测端设备
CN105635346A (zh) * 2016-03-31 2016-06-01 北京奇艺世纪科技有限公司 一种nat网络类型检测方法及装置
CN105635346B (zh) * 2016-03-31 2018-12-14 北京奇艺世纪科技有限公司 一种nat网络类型检测方法及装置
WO2018196643A1 (zh) * 2017-04-24 2018-11-01 广州国储科技有限公司 一种私有数据云存储系统及私有数据云存储方法
CN108063816A (zh) * 2017-04-24 2018-05-22 深圳至上移动科技有限公司 一种私有数据云存储穿透式访问方法
CN108063816B (zh) * 2017-04-24 2021-05-18 赵海林 一种私有数据云存储穿透式访问方法
CN107317869A (zh) * 2017-07-06 2017-11-03 深圳市斑点猫信息技术有限公司 一种节点nat类型探测方法、装置以及系统
CN107317869B (zh) * 2017-07-06 2020-09-04 深圳市斑点猫信息技术有限公司 一种节点nat类型探测方法、装置以及系统
CN108092876A (zh) * 2017-11-23 2018-05-29 湖北大学 一种基于即时通讯应用的nat检测方法及系统
CN109831547B (zh) * 2019-03-14 2022-02-22 腾讯科技(深圳)有限公司 Nat穿透方法、装置、设备及存储介质
CN109831547A (zh) * 2019-03-14 2019-05-31 腾讯科技(深圳)有限公司 Nat穿透方法、装置、设备及存储介质
CN112152927A (zh) * 2019-06-26 2020-12-29 杭州海康威视数字技术股份有限公司 一种报文转发方法、系统及网卡和存储介质
CN112152927B (zh) * 2019-06-26 2022-09-02 杭州海康威视数字技术股份有限公司 一种报文转发方法、系统及网卡和存储介质
CN111193813A (zh) * 2019-10-24 2020-05-22 腾讯科技(深圳)有限公司 确定nat类型的测试请求处理方法、装置和计算机设备
CN111935333A (zh) * 2020-08-12 2020-11-13 杭州萤石软件有限公司 Nat类型的确定方法、设备、系统和存储介质
CN111935333B (zh) * 2020-08-12 2022-09-27 杭州萤石软件有限公司 Nat类型的确定方法、设备、系统和存储介质
CN113746954A (zh) * 2021-09-22 2021-12-03 烽火通信科技股份有限公司 一种nat地址块二次分配迅速回收的方法和装置
CN113746954B (zh) * 2021-09-22 2023-06-13 烽火通信科技股份有限公司 一种nat地址块二次分配迅速回收的方法和装置

Also Published As

Publication number Publication date
CN102196057B (zh) 2015-11-25

Similar Documents

Publication Publication Date Title
CN102196057A (zh) 一种确定nat类型的方法及装置
CN105554065B (zh) 处理报文的方法、转换单元和应用单元
CN101656677B (zh) 一种报文分流处理方法及装置
US8406232B2 (en) 4to6 network stack for IPv4 applications
CN103023797B (zh) 数据中心系统及装置和提供服务的方法
JP2013532438A5 (zh)
CN103201989B (zh) 控制数据传输的方法、装置和系统
CN101997768B (zh) 一种上送地址解析协议报文的方法和装置
US9160794B2 (en) Network address translators (NAT) type detection techniques
EP2681885A1 (en) Load balancing methods and devices
CN101800690B (zh) 一种使用地址池实现源地址转换的方法和装置
CN103119903B (zh) 用于网络服务器之间的负载平衡的设备和方法
CN103200281A (zh) 内网服务器访问方法、设备和系统
CN105208053A (zh) 一种实现负载均衡的方法、装置及负载均衡服务系统
CN106411742B (zh) 一种报文传输的方法和装置
CN103108057B (zh) 根据网络地址转译器的行为建立传输控制协议联机的方法
US20200213233A1 (en) Balancing load
CN102232288A (zh) 一种网络地址转换方法及装置
CN105991442B (zh) 报文转发方法及装置
CN109246024B (zh) 一种组网中负载分担方法、装置、终端设备及存储介质
CN103001942B (zh) 一种虚拟服务器和一种防御网络攻击的方法
CN104735073B (zh) IPv4-IPv6过渡协议调度方法和装置
CN102761608A (zh) Udp会话复用的方法和负载均衡设备
CN109413224A (zh) 报文转发方法和装置
US10341292B2 (en) Increased port address space

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant
C41 Transfer of patent application or patent right or utility model
TR01 Transfer of patent right

Effective date of registration: 20160115

Address after: The South Road in Guangdong province Shenzhen city Fiyta building 518057 floor 5-10 Nanshan District high tech Zone

Patentee after: Shenzhen Tencent Computer System Co., Ltd.

Address before: Shenzhen Futian District City, Guangdong province 518044 Zhenxing Road, SEG Science Park 2 East Room 403

Patentee before: Tencent Technology (Shenzhen) Co., Ltd.