`
Blackbaby
  • 浏览: 184885 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

四种不同的NAT类型及检测方法

阅读更多

四种不同的NAT类型及检测方法

 
    考虑到UDP的无状态特性,目前针对其的NAT实现大致可分为Full Cone、Restricted Cone、Port Restricted Cone和Symmetric NAT四种。值得指出的是,对于TCP协议而言,一般来说,目前NAT中针对TCP的实现基本上是一致的,其间并不存在太大差异,这是因为TCP协议本身 便是面向连接的,因此无需考虑网络连接无状态所带来复杂性。

用语定义

1.内部Tuple
:指内部主机的私有地址和端口号所构成的二元组,即内部主机所发送报文的源地址、端口所构成的二元组
2.外部Tuple :指内部Tuple经过NAT的源地址/端口转换之后,所获得的外部地址、端口所构成的二元组,即外部主机收到经NAT转换之后的报文时,它所看到的该报文的源地址(通常是NAT设备的地址)和源端口
3.目标Tuple :指外部主机的地址、端口所构成的二元组,即内部主机所发送报文的目标地址、端口所构成的二元组

详细释义

1. Full Cone NAT
: 所有来自同一 个内部Tuple X的请求均被NAT转换至同一个外部Tuple Y,而不管这些请求是不是属于同一个应用或者是多个应用的。除此之外,当X-Y的转换关系建立之后,任意外部主机均可随时将Y中的地址和端口作为目标地址 和目标端口,向内部主机发送UDP报文,由于对外部请求的来源无任何限制,因此这种方式虽然足够简单,但却不那么安全

2. Restricted Cone NAT
: 它是Full Cone的受限版本:所有来自同一个内部Tuple X的请求均被NAT转换至同一个外部Tuple Y,这与Full Cone相同,但不同的是,只有当内部主机曾经发送过报文给外部主机(假设其IP地址为Z)后,外部主机才能以Y中的信息作为目标地址和目标端口,向内部 主机发送UDP请求报文,这意味着,NAT设备只向内转发(目标地址/端口转换)那些来自于当前已知的外部主机的UDP报文,从而保障了外部请求来源的安 全性

3. Port Restricted Cone NAT
:它是Restricted Cone NAT的进一步受限版。只有当内部主机曾经发送过报文给外部主机(假设其IP地址为Z且端口为P)之后,外部主机才能以Y中的信息作为目标地址和目标端 口,向内部主机发送UDP报文,同时,其请求报文的源端口必须为P,这一要求进一步强化了对外部报文请求来源的限制,从而较Restrictd Cone更具安全性

4. Symmetric NAT
:这是一种比所有Cone NAT都要更为灵活的转换方式:在Cone NAT中,内部主机的内部Tuple与外部Tuple的转换映射关系是独立于内部主机所发出的UDP报文中的目标地址及端口的,即与目标Tuple无关; 在Symmetric NAT中,目标Tuple则成为了NAT设备建立转换关系的一个重要考量:只有来自于同一个内部Tuple 、且针对同一目标Tuple的请求才被NAT转换至同一个外部Tuple,否则的话,NAT将为之分配一个新的外部Tuple;打个比方,当内部主机以相 同的内部Tuple对2个不同的目标Tuple发送UDP报文时,此时NAT将会为内部主机分配两个不同的外部Tuple,并且建立起两个不同的内、外部 Tuple转换关系。与此同时,只有接收到了内部主机所发送的数据包的外部主机才能向内部主机返回UDP报文,这里对外部返回报文来源的限制是与Port Restricted Cone一致的。不难看出,如果说Full Cone是要求最宽松NAT UDP转换方式,那么,Symmetric NAT则是要求最严格的NAT方式,其不仅体现在转换关系的建立上,而且还体现在对外部报文来源的限制方面。

第二部:NAT类型 检测

 

前提条件:有一个公网的Server并且绑定了两个公网IP(IP-1,IP-2)。这个Server做UDP监听(IP-1,Port-1),(IP-2,Port-2)并根据客户端的要求进行应答。

第一步:检测客户端是否有能力进行UDP通信以及客户端是否位于NAT后?

客 户端建立UDP socket然后用这个socket向服务器的(IP-1,Port-1)发送数据包要求服务器返回客户端的IP和Port, 客户端发送请求后立即开始接受数据包,要设定socket Timeout(300ms),防止无限堵塞. 重复这个过程若干次。如果每次都超时,无法接受到服务器的回应,则说明客户端无法进行UDP通信,可能是防火墙或NAT阻止UDP通信,这样的客户端也就 不能P2P了(检测停止)。
当客户端能够接收到服务器的回应时,需要把服务器返回的客户端(IP,Port)和这个客户端socket的 (LocalIP,LocalPort)比较。如果完全相同则客户端不在NAT后,这样的客户端具有公网IP可以直接监听UDP端口接收数据进行通信(检 测停止)。否则客户端在NAT后要做进一步的NAT类型 检测(继续)。

第二步:检测客户端NAT是否是Full Cone NAT?

客 户端建立UDP socket然后用这个socket向服务器的(IP-1,Port-1)发送数据包要求服务器用另一对(IP-2,Port-2)响应客户端的请求往回 发一个数据包,客户端发送请求后立即开始接受数据包,要设定socket Timeout(300ms),防止无限堵塞. 重复这个过程若干次。如果每次都超时,无法接受到服务器的回应,则说明客户端的NAT不是一个Full Cone NAT,具体类型有待下一步检测(继续)。如果能够接受到服务器从(IP-2,Port-2)返回的应答UDP包,则说明客户端是一个Full Cone NAT,这样的客户端能够进行UDP-P2P通信(检测停止)。

第三步:检测客户端NAT是否是Symmetric NAT?

客 户端建立UDP socket然后用这个socket向服务器的(IP-1,Port-1)发送数据包要求服务器返回客户端的IP和Port, 客户端发送请求后立即开始接受数据包,要设定socket Timeout(300ms),防止无限堵塞. 重复这个过程直到收到回应(一定能够收到,因为第一步保证了这个客户端可以进行UDP通信)。
用同样的方法用一个socket向服务器的(IP-2,Port-2)发送数据包要求服务器返回客户端的IP和Port。
比 较上面两个过程从服务器返回的客户端(IP,Port),如果两个过程返回的(IP,Port)有一对不同则说明客户端为Symmetric NAT,这样的客户端无法进行UDP-P2P通信(检测停止)。否则是Restricted Cone NAT,是否为Port Restricted Cone NAT有待检测(继续)。

第四步:检测客户端NAT是否是Restricted Cone NAT还是Port Restricted Cone NAT?

客 户端建立UDP socket然后用这个socket向服务器的(IP-1,Port-1)发送数据包要求服务器用IP-1和一个不同于Port-1的端口发送一个UDP 数据包响应客户端, 客户端发送请求后立即开始接受数据包,要设定socket Timeout(300ms),防止无限堵塞. 重复这个过程若干次。如果每次都超时,无法接受到服务器的回应,则说明客户端是一个Port Restricted Cone NAT,如果能够收到服务器的响应则说明客户端是一个Restricted Cone NAT。以上两种NAT都可以进行UDP-P2P通信。

 

:以上检测过程中只说明了可否进行UDP-P2P的打洞通信,具体怎么通信一般要借助于Rendezvous Server。另外对于Symmetric NAT不是说完全不能进行UDP-P2P达洞通信,可以进行端口预测打洞,不过不能保证成功。

 

原文链接:http://www.cppblog.com/fwxjj/archive/2008/08/14/58823.html

分享到:
评论

相关推荐

    介绍5种 socket P2P NAT类型检测方法.zip

    本篇文章将详细介绍5种常见的P2P socket NAT类型检测方法,并逐一解析每种NAT类型的特性。 1. **P2P之NAT类型检测方法** P2P网络中的NAT类型检测主要是为了识别设备在网络中的可达性,以便找到合适的穿透策略。...

    windows 系统NAT类型检测工具

    **NAT类型检测工具** `nat_test`这个工具,可能是用于检测Windows系统下的NAT类型的。这类工具的工作原理通常是通过模拟不同类型的NAT环境,尝试建立连接并分析返回的流量来判断系统当前的NAT类型。使用方法可能...

    网络IP地址NAT类型检测工具

    网络IP地址NAT类型检测工具 检测NAT类型

    NAT类型检测

    NAT类型检测工具如“nattypetester.exe”和“WinStun.exe”就是用来识别用户的NAT类型。它们工作原理通常是通过发送STUN(简单Traversal of UDP through NATs)请求到公共服务器,然后分析返回的信息来确定NAT的类型...

    NAT类型检测工具

    NAT类型检测工具 直接运行,相当好用,但要有.NET 2.0以上的环境支持,也就是说,要安装VC++ 6.0或VS,如果不想用这个工具的话,还有个在线网址,大家可以看一下,不过还是要下载JAVA虚拟机: ...

    NAT类型检测工具 windows版

    一个用户检测本地网络NAT类型的windows工具; 原程序使用python编写,之后打包为.exe ,命令行执行。 下载后解压,命令行进入解压后目录,执行pystun.exe即可看到帮助与参数示例。 执行结果为 NAT类型,外部显示的IP...

    NAT穿透之NAT类型检测.pdf

    ### NAT穿透之NAT类型检测 #### 概述 随着互联网的发展,IP地址资源变得越来越紧张,为了缓解这一问题,NAT(Network Address Translation)技术应运而生。NAT技术能够有效地解决IP地址耗尽的问题,使得多个内部...

    一个NAT类型检测方案

    在NAT类型检测中,主要涉及四种基本类型:Full Cone NAT、Restricted Cone NAT、Port Restricted Cone NAT以及Symmetric NAT。这些类型的不同之处在于它们如何处理内部主机向外部网络发送报文后的源地址和端口转换,...

    NAT类型检测+免费的STUN服务器.rar

    P2P技术的NAT穿越方案,需要针对上述的4种NAT类型使用不同的方案,才有可能打洞(穿墙)成功,而最在要紧的是,我该怎么知道目前某台客户端所处的路由属于哪种NAT类型呢?

    NAT路由类型检测工具(NatTypeTester)

    NAT类型一般分为以下4种: 1. Full Cone NAT (完全圆锥型) 2. Restricted Cone NAT (地址限制圆锥型) 3. Port Restricted Cone NAT (端口限制圆锥型) 4. Symmetric NAT (对称型) NAT 类型测试工具 一般来说...

    NAT类型测试工具

    最近在开发UDP通讯程序,需要检测到 路由器设备的 类型,找了个工具给大家共享。 公开的免费STUN服务器 当SIP终端在使用私有IP地址时,可能需要配置stun服务器 公开的免费STUN服务器有: stunserver.org 测试是OK的 ...

    NAT类型检测相关协议

    本篇文章将详细介绍NAT类型检测的相关协议,特别是STUN协议及其发展历程。 首先,RFC3489(Basic STUN Message Format)是STUN协议的初始定义,发布于2003年,它规定了STUN消息的基本格式和工作原理。该协议的核心...

    nat类型检测工具

    NAT类型检测,亲测可用。NAT 检测最实用的工具。p2p必备软件

    自动NAT检测STUN源代码.rar_nat stun_nat 类型_nat在线检测_nat检测_网络类型

    “nat_stun Nat类型”指的是上述的NAT分类,“nat在线检测”是指通过网络进行实时的NAT类型检测。这种检测对于开发者来说很重要,因为它可以帮助他们理解用户在网络中的位置,以便优化其应用程序,如多人在线游戏或...

    NatTypeTest工具,NAT类型测试小工具

    NatTypeTest工具是一款专门用于检测网络NAT类型的实用软件,它可以帮助用户快速确定自己网络的NAT类型,以便更好地理解网络连接的质量和可能遇到的问题。该工具基于.NET Framework 2.0或更高版本运行,这意味着你...

    p2p网络穿越中nat类型检测的原理与实现.pdf

    在P2P网络穿越中,NAT类型检测是关键的一环。NAT主要分为四种类型: 1. 完全圆锥型NAT(FullCone NAT):允许任何外部设备通过NAT映射后的地址和端口访问内部设备,无论之前是否有过通信。 2. 地址限制圆锥型NAT...

    NAT的四种类型及类型检测

    NAT的四种类型及类型检测 在计算机网络中,NAT(Network Address Translation,网络地址转换)是一种...NAT的四种类型和NAT类型检测都是网络地址转换技术中的重要概念,了解它们可以帮助我们更好地理解和应用NAT技术。

    NAT类型测试的小工具

    NAT类型测试工具,检查判断自己或对方的nat类型。公开的免费STUN服务器 当SIP终端在使用私有IP地址时,可能需要配置stun服务器 公开的免费STUN服务器有: stunserver.org 测试是OK的

    nat测试工具

    不同类型的NAT会影响网络设备之间的通信方式,尤其是对于需要P2P(点对点)通信的游戏、VoIP服务或远程桌面等应用,NAT类型的不同可能会导致连接问题。 "nattypetester.exe"是一个执行文件,很可能是一款NAT测试...

Global site tag (gtag.js) - Google Analytics