NAT类型浅析

原创 2015年11月21日 11:32:24

下面是NAT的几种类型

NAT设备的类型对于TCP穿越NAT,有着十分重要的影响,根据端口映射方式,NAT可分为如下4类,前3种NAT类型可统称为cone类型。
(1)全克隆( Full Cone) : NAT把所有来自相同内部IP地址和端口的请求映射到相同的外部IP地址和端口。任何一个外部主机均可通过该映射发送IP包到该内部主机。
(2)限制性克隆(Restricted Cone) : NAT把所有来自相同内部IP地址和端口的请求映射到相同的外部IP地址和端口。但是,只有当内部主机先给IP地址为X的外部主机发送IP包,该外部主机才能向该内部主机发送IP包。
(3)端口限制性克隆( Port Restricted Cone) :端口限制性克隆与限制性克隆类似,只是多了端口号的限制,即只有内部主机先向IP地址为X,端口号为P的外部主机发送1个IP包,该外部主机才能够把源端口号为P的IP包发送给该内部主机。

(4)对称式NAT ( Symmetric NAT): 对称式NAT与端口限制性克隆类似,唯一不同的是当同一内部主机使用相同的端口与不同IP地址或端口的外部主机进行通信时, NAT对该内部主机的端口映射会有所不同,这种情况下NAT会针对不同IP地址或端口的外部主机为内部主机的相同端口分配新的外部端口号。对称式NAT不保证所有会话中的私有地址端口和公开地址端口之间绑定的一致性。相反,它为每个新的会话分配一个新的端口号。这种情况下内部主机的“内网IP地址和端口”与“NAT IP地址和端口”之间会形成一对多关系。


这是我在网上找到的另一份关于NAT四种类型的解释,我觉得这个叙述更加清楚明了,这里写下来作为补充,请按照顺序和上面叙述的四种NAT类型进行对照理解:

从内网主机发出报文访问外网目标时,可用四元组[源IP,源端口,目标IP,目标端口]来表示会话:
[私有源地址,私有源端口,全局目标地址,全局目标端口]
     ↓NAT
[全局源地址,全局源端口,全局目标地址,全局目标端口]
   NAT在对不同的私有源地址进行转换的时候,可能转换成同一全局源地址,也可能转换成不同的全局源地址(如果NAT地址池配置有多个全局地址)。
   而对于同一私有源地址和端口的转换情况则分为以下几种:
(1)完全Cone NAT 无论目标地址和端口怎样,每次都把该私有源IP地址/端口映射到同一个全局源地址/端口;外网的任何主机都可以发送报文到该映射的全局地址而访问到该内部主机。路由器的静态地址映射就是属于这种。
(2)限制Cone NAT 地址/端口映射的情况同完全Cone NAT的,但外网的主机要访问内网主机,该内网主机必须先发送过报文给该外网主机的地址。
(3)端口限制Cone NAT 地址/端口映射情况同完全Cone NAT的,但外网主机要访问内网主机,该内网主机必须先发送过报文给该外网主机的地址和端口。大多数路由器的NAPT就是属于这种情况。本文后面论及的Cone NAT也是指这种情况。

(4)Symmetric NAT 对不同的目标地址/端口,源私有地址映射到源全局地址不变,但是映射的全局端口会改变。外网主机必须先收到过内网主机的报文,才能访问到该内网主机。一些路由器和防火墙产品的NAT就是属于这种情况。

    Symmetric NAT并不对新会话进行端口绑定,而是分配一个全新的NAT端口给每一个新的会话.
     Server S1                                     Server S2
        18.181.0.31:1235                              138.76.29.7:1235
               |                                             |
               |                                             |
               +----------------------+----------------------+
                                      |
          ^  Session 1 (A-S1)  ^      |      ^  Session 2 (A-S2)  ^
          |  18.181.0.31:1235  |      |      |  138.76.29.7:1235  |
          v 155.99.25.11:62000 v      |      v 155.99.25.11:62001 v
                                      |
                                 Symmetric NAT
                                 155.99.25.11
                                      |
          ^  Session 1 (A-S1)  ^      |      ^  Session 2 (A-S2)  ^
          |  18.181.0.31:1235  |      |      |  138.76.29.7:1235  |
          v   10.0.0.1:1234    v      |      v   10.0.0.1:1234    v
                                      |
                                   Client A
                                10.0.0.1:1234
    如上图,如果Client A同时发起两个会话到S1和S2,对称NAT会分配NAT地址155.99.25.11:62000给Session1,然后分配另一个不同的NAT地址155.99.25.11:62001给Session2.对称NAT能够区别两个不同的会话并进行地址转换,应用程序每发出一个会话都会使用一个新的端口.

 

下面我们接着来看看对NAT进行打洞的流程与原理

先假设:有一个服务器S在公网上有一个IP,两个私网分别由NAT-A和NAT-B连接到公网,NAT-A后面有一台客户端A,NAT-B后面有一台客户端B,现在,我们需要借助S将A和B建立直接的TCP连接,即由B向A打一个洞,让A可以沿这个洞直接连接到B主机,就好像NAT-B不存在一样。

实现过程如下:
1、 S启动两个网络侦听,一个叫【主连接】侦听,一个叫【协助打洞】的侦听。
2、 A和B分别与S的【主连接】保持联系。
3、 当A需要和B建立直接的TCP连接时,首先连接S的【协助打洞】端口,并发送协助连接申请。同时在该端口号上启动侦听。注意由于要在相同的网络终端上绑定到不同的套接字上,所以必须为这些套接字设置 SO_REUSEADDR 属性(即允许重用),否则侦听会失败。
4、 S的【协助打洞】连接收到A的申请后通过【主连接】通知B,并将A经过NAT-A转换后的公网IP地址和端口等信息告诉B。
5、 B收到S的连接通知后首先与S的【协助打洞】端口连接,随便发送一些数据后立即断开,这样做的目的是让S能知道B经过NAT-B转换后的公网IP和端口号。
6、 B尝试与A的经过NAT-A转换后的公网IP地址和端口进行connect,根据不同的路由器会有不同的结果,有些路由器在这个操作就能建立连接,大多数路由器对于不请自到的SYN请求包直接丢弃而导致connect失败,但NAT-B会纪录此次连接的目标地址和端口号(即A经过NAT-A转换后的公网IP和端口号),为接下来真正的连接做好了准备,这就是所谓的打洞,即B向A打了一个洞,下次A就能直接连接到B刚才使用的端口号了。
7、 客户端B打洞的同时在相同的端口上启动侦听。B在一切准备就绪以后通过与S的【主连接】回复消息“我已经准备好”,S在收到以后将B经过NAT-B转换后的公网IP和端口号告诉给A。
8、 A收到S回复的B的公网IP和端口号等信息以后,开始连接到B公网IP和端口号(此时NAT-A也会纪录此次连接的目标地址和端口号(即B经过NAT-B转换后的公网IP和端口号),即A也向B打了一个洞,之后B也能直接连接到A的公网IP和端口号了),由于在步骤6中B曾经尝试连接过A的公网IP地址和端口,NAT-B纪录了此次连接的信息,所以当A主动连接B时,NAT-B会认为是合法的SYN数据,并允许通过,从而直接的TCP连接建立起来了。

 

有了一定的知识补充,接下来开始实现UDP和TCP打洞。因为没干过这个 可能要花一定的时间


来自:http://www.cnblogs.com/OpenCoder/diary/2011/06/29/2093895.html

版权声明:本文为博主原创文章,未经博主允许不得转载。

NAT类型与检测

NAT穿越(打洞)与SIP网的NAT 转自:http://blog.163.com/hlz_2599/blog/static/14237847420134219524579/ 一、FireWall&N...
  • iw1210
  • iw1210
  • 2016年04月29日 15:54
  • 1166

NAT的四种类型

简述 基于UDP的P2P应用需要考虑NAT的类型,因为不同的NAT组合的穿透的方式并不一致,有的能通, 有的不能通。 一般来讲, NAT可以分为四种类型,分别是:   1, 全锥型(Full Cone...
  • mycloudpeak
  • mycloudpeak
  • 2016年12月10日 01:00
  • 3298

四种不同的NAT类型

讨论前提考虑到UDP的无状态特性,目前针对其的NAT实现大致可分为Full Cone、Restricted Cone、Port Restricted Cone和Symmetric NAT四种。值得指出...
  • u012627972
  • u012627972
  • 2015年08月18日 11:35
  • 598

NAT的四种类型及类型检测

http://www.cnblogs.com/my_life/articles/1908552.html 考 虑到UDP的无状态特性,目前针对其的NAT实现大致可分为Full Cone、Rest...
  • liuhongxiangm
  • liuhongxiangm
  • 2014年12月15日 16:04
  • 3340

你不一定真正理解的NAT基本结构和分类

许多读者对于Cisco路由器中的NAT技术都是一知半解,甚至存在许多错误的理解,特别是对于其中的最基本四种IP地址和四种NAT分类的基本IP地址转换原理。不信,你看看。其实国内许多书中也对这方面的介绍...
  • lycb_gz
  • lycb_gz
  • 2013年09月25日 08:51
  • 10229

NAT穿透,打洞,NAT类型

看完就懂了,详细易懂 一、什么是NAT?为什么要使用NAT? NAT是将私有地址转换为合法IP地址的技术,通俗的讲就是将内网与内网通信时怎么将内网私有IP地址转换为可在网络中传播的合法IP地址...
  • zhangxiong2532
  • zhangxiong2532
  • 2016年03月07日 14:33
  • 769

NAT的几种类型

最近在研究STUN,TURN,ICE相关内容。一些基础知识归集一下 NAT(Network Address Translation,网络地址转换)当在专用网内部的一些主机本来已经分配到了本地IP地址(...
  • phoenix06
  • phoenix06
  • 2017年04月12日 10:18
  • 817

NAT的原理与类型

1. NAT的原理与类型 NAT是IETF标准,它通过将局域网内的主机IP地址映射为Internet上有效的公网IP地址,从而实现了网络地址的复用。使用NAT技术,局域网内的多台PC可以共享单个、全局...
  • boywgw
  • boywgw
  • 2015年09月16日 18:02
  • 2439

UDP中四种不同的NAT类型及检测方法【转发与点评】

UDP中四种不同的NAT类型及检测方法 考虑到UDP的无状态特性,目前针对其的NAT实现大致可分为Full Cone、Restricted Cone、Port Restricted Cone和Sym...
  • u012966023
  • u012966023
  • 2013年12月16日 10:14
  • 1168

NAT的四种类型及类型检测

考虑到UDP的无状态特性,目前针对其的NAT实现大致可分为Full Cone、Restricted Cone、Port Restricted Cone和Symmetric NAT四种。值得指出的是,对...
  • yydcj
  • yydcj
  • 2013年01月10日 12:39
  • 412
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:NAT类型浅析
举报原因:
原因补充:

(最多只允许输入30个字)