NAT与NAT穿透(一)

1. NAT简介

前面的文章说到了针对IP不足的许多技术,但这些技术基本都不会增加可用的IP地址数.NAT(Network Address Translation)又称"网络地址转换",它是一种把内部私有网络地址翻译成合法网络IP地址的技术,个人认为该技术是解决IP地址不足最有效的方法.它是一个IETF(Internet Engineering Task Force,Internet工程任务组)标准.

简单地说,NAT就是在局域网内部使用私有地址(前面文章说到过每类IP地址都有私有地址),而当内部节点要与外部网络进行通讯时,就在网关(可以理解为出口)处将内部地址替换成公用地址,从而在公网(internet)上正常使用.通过这种方法,您可以只申请一个合法IP地址,就把整个局域网中的计算机接入Internet中.

2. NAT类型

NAT有三种类型:静态NAT(Static NAT),动态地址NAT(Pooled NAT),网络地址端口转换NAPT.

其中静态NAT设置起来最为简单和最容易实现的一种,内部网络中的每个主机都被永久映射成外部网络中的某个合法的地址.而动态地址NAT则是在外部网络中定 义了一系列的合法地址,采用动态分配的方法映射到内部网络.NAPT则是把内部地址映射到外部网络的一个IP地址的不同端口上.

网络地址端口转换NAPT(Network Address Port Translation)是人们比较熟悉的一种转换方式,NAPT普遍应用于接入设备中,它可以将中小型的网络隐藏在一个合法的IP地址后面.这个优点在小型办公室内非常实用,通过从ISP处申请的一个IP地址,将多个连接通过NAPT接入Internet.

2.1 NAPT类型:

NAPT主要分两大类:锥形NAT和对称NAT.

2.1.1 锥形NAT(Cone NAT):

Cone NAT的特点或者它区别与Symmetric NAT的特性是,通过地址转换可以确保Client使用端口的"同一性",即这个Client只使用这个端口.

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:62000 v

|

Cone 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通过一个锥形NAT同时发起两个外出的连接,它使用同一个内部端口(10.0.0.1:1234)给公网的两台不同的服务器S1和S2.锥形NAT只分配一个公网IP和端口(155.99.25.11:62000)给这个两个会话.

2.1.2 对称NAT(Symmetric NAT):

对称NAT,与Cone 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会分配公共地址155.99.25.11:62000给Session1,然后分配另一个不同的公共地址155.99.25.11:62001给Session2.对称NAT能够区别两个不同的会话并进行地址转换,应用程序每发出一个会话都会使用一个新的端口.

2.2 锥形NAT类型:

锥形NAT在根据如何能创建端到端有效连接上有更多的分类.这个分类一般应用在Udp通信(而不是Tcp通信上),因为NATs和防火墙阻止了试图无条件传入的TCP连接,除非明确设置NAT不这样做.这些分类如下:

完全锥形(Full Cone):

在一个完全锥形NAT中,任务主机A都可以通过主机B映射在NAT上的外部地址发包给内部主机B.(A可在公网也可在内网,以下也是).

受限锥形(Restricted Cone):

在一个受限锥形NAT,只有内部主机B向其发送过包的主机A才可以对这个内部主机B发包(通过主机B映射在NAT上的外部地址).

端口受限锥形(Port Restricted Cone):

端口受限锥形NAT与受限锥形NAT类似,但是增加了对端口的限制,如内部主机B向一个端口为q的主机A发送过包,那么只有从这个主机A的端口q发出的包才能被发送到内部主机B上去。

3. NAPT具体类型介绍:

Full Cone NAT:

内网主机建立一个UDP socket(LocalIP:LocalPort),第一次使用这个socket给外部主机发送数据时NAT会给其分配一个公网(PublicIP:PublicPort),以后用这个socket向外面任何主机发送数据都将使用这对(PublicIP:PublicPort).此外,任何主机只要知道这个(PublicIP:PublicPort)就可以发送数据给(PublicIP:PublicPort),内网的主机就能收到这个数据包

Restricted Cone NAT:

内网主机建立一个UDP socket(LocalIP:LocalPort),第一次使用这个socket给外部主机发送数据时NAT会给其分配一个公网(PublicIP:PublicPort),以后用这个socket向外面任何主机发送数据都将使用这对(PublicIP:PublicPort).此外,如果任何外部主机想要发送数据给这个内网主机,只要知道这个(PublicIP:PublicPort)并且内网主机之前用这个socket曾向这个外部主机IP发送过数据.只要满足这两个条件,这个外部主机就可以用自己的(IP,任何端口)发送数据给(PublicIP:PublicPort),内网的主机就能收到这个数据包.

Port Restricted Cone NAT:

内网主机建立一个UDP socket(LocalIP:LocalPort),第一次使用这个socket给外部主机发送数据时NAT会给其分配一个公网(PublicIP:PublicPort),以后用这个socket向外面任何主机发送数据都将使用这对(PublicIP:PublicPort).此外,如果任何外部主机想要发送数据给这个内网主机,只要知道这个(PublicIP:PublicPort)并且内网主机之前用这个socket曾向这个外部主机(IP,Port)发送过数据.只要满足这两个条件,这个外部主机就可以用自己的(IP,Port)发送数据给(PublicIP:PublicPort),内网的主机就能收到这个数据包.

Symmetric NAT:

内网主机建立一个UDP socket(LocalIP,LocalPort),当用这个socket第一次发数据给外部主机1时,NAT为其映射一个(PublicIP-1,Port-1),以后内网主机发送给外部主机1的所有数据都是用这个(PublicIP-1,Port-1),如果内网主机同时用这个socket给外部主机2发送数据,第一次发送时,NAT会为其分配一个(PublicIP-2,Port-2),以后内网主机发送给外部主机2的所有数据都是用这个(PublicIP-2,Port-2).此外,如果任何外部主机A想要发送数据给这个内网主机B,只要知道B向A发送数据时NAT为其映射的(PublicIP:PublicPort),并且B之前用这个socket曾向这个外部主机A发送过数据.满足这两个条件,这个外部主机A就可以用自己的(IP,任何端口)发送数据给(PublicIP:PublicPort),内网的主机就能收到这个数据包.这种NAT无法实现UDP-P2P通信,这个以后会介绍到.

4. NAPT具体类型检测

前提条件:有一个公网的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是否是Symmetric NAT还是Cone 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通信(检测停止).否则是Cone NAT,具体Cone NAT类型有待进一步检测(继续).

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

客户端建立UDP socket然后用这个socket向服务器的(IP-1,Port-1)发送数据包要求服务器用另一对(IP-2,Port-2)响应客户端的请求往回发一个数据包,客户端发送请求后立即开始接受数据包,要设定socket Timeout(300ms),防止无限堵塞. 重复这个过程若干次.如果能够接受到服务器从(IP-2,Port-2)返回的应答UDP包,则说明客户端是一个Full Cone NAT.(检测停止).如果每次都超时,无法接受到服务器的回应,则说明客户端的NAT不是一个Full 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.

时间: 2024-11-06 03:11:59

NAT与NAT穿透(一)的相关文章

(转)NAT与NAT穿透 原理

原文:http://blog.csdn.net/ustcgy/article/details/5655050 5. NAT穿透5.1 转发     最可靠但又是最低效的点对点通信方法,莫过于将p2p网络通信看作一个C/S结构,通过服务器来转发信息.如下图,两个客户端A和B,均与服务器S初始化了一个TCP或UDP连接,服务器S具有公网固定IP地址,两个客户端分布在不同的私网中,这样,他们各自的NAT代理服务器将不允许他们进行直连.                                  

NAT与NAT穿透(二)

5. NAT穿透 5.1 转发 最可靠但又是最低效的点对点通信方法,莫过于将p2p网络通信看作一个C/S结构,通过服务器来转发信息.如下图,两个客户端A和B,均与服务器S初始化了一个TCP或UDP连接,服务器S具有公网固定IP地址,两个客户端分布在不同的私网中,这样,他们各自的NAT代理服务器将不允许他们进行直连. Server S | | +----------------------+----------------------+ |                             

TCP/UDP端口NAT映射---NAT转发实例(五)

这次我们要做的实验就是将本地的服务器地址映射到外网的端口地址 我们这次用网页显示来确定我们有没有配置成功 这里配置ip什么的就不说了 我们先来看看服务器的HTTP(也就是web服务)有没有开启 这样就是开启的,里面可以自己编写一两句测试的HTML代码. 我们就将里面代码全删了,然后写上hello!word! 然后测试下内网的能不能访问(只要配好了ip地址就能够通过网页访问的) 结果当然是能够显示的 然后我们配置路由器 以下是路由器配置: Router>enRouter#configConfigu

NAT的全然分析及其UDP穿透的全然解决方式

NAT的全然分析及其UDP穿透的全然解决方式 一:基本术语 防火墙 防火墙限制了私网与公网的通信,它主要是将(防火墙)觉得未经授权的的包丢弃,防火墙仅仅是检验包的数据,并不改动数据包中的IP地址和TCP/UDPport信息. 网络地址转换(NAT) 当有数据包通过时,网络地址转换器不仅检查包的信息,还要将包头中的IP地址和port信息进行改动.以使得处于NAT之后的机器共享几个仅有的公网IP地址(一般是一个).网络地址转换器主要有两种类型. P2P应用程序 P2P应用程序是指,在已有的一个公共s

NAT穿透技术

在现实Internet网络环境中,大多数计算机主机都位于防火墙或NAT之后,只有少部分主机能够直接接入Internet.很多时候,我们希望网络中的两台主机能够直接进行通信,即所谓的P2P通信,而不需要其他公共服务器的中转.由于主机可能位于防火墙或NAT之后,在进行P2P通信之前,我们需要进行检测以确认它们之间能否进行P2P通信以及如何通信.这种技术通常称为NAT穿透(NAT Traversal).最常见的NAT穿透是基于UDP的技术,如RFC3489中定义的STUN协议. STUN,首先在RFC

转发 通过NAT和防火墙特性和TCP穿透的测评(翻译)

转自 http://blog.csdn.net/sjin_1314/article/details/18178329 原文:Characterization and Measurement of TCP Traversal through NATs and Firewalls 原作者:Saikat Guha Paul Francis [摘要]     近些年,标准化社区已经开发出一些UDP穿透NAT/防火墙的技术(也就是,在NAT之后的主机之间建立UDP流).然而,由于TCP连接建立的不对称特点

WebRTC中NAT穿透浅析

说NAT穿透之前先说几个关于WebRTC的概念,可能之前有跟作者一样对WebRTC概念理解错误的同学.. WebRTC(网络实时通信)它是一个支持网页浏览器进行实时语音对话或视频对话的技术,它为我们提供了视频会议的核心技术,包括音视频的采集.编解码.网络传输.显示等功能,并且还支持跨平台:windows,linux,mac,android,iOS. 1.WebRTC的实现原理 webRTC是基于P2P的网络通信,可能有同学不太了解P2P是什么,在此简单解释一下 P2P就是点对点的通信. 下面就拿

NAT穿透(UDP打洞)

1.NAT(Network Address Translator)介绍 NAT有两大类,基本NAT和NAPT. 1.1.基本NAT 静态NAT:一个公网IP对应一个内部IP,一对一转换 动态NAT:N个公网IP对应M个内部IP,不固定的一对一转换关系  1.2.NAPT(Network Address/Port Translator) 现在基本使用这种,又分为对称和锥型NAT. 锥型NAT,有完全锥型.受限制锥型.端口受限制锥型三种: a)Full Cone NAT(完全圆锥型):从同一私网地址

网络 解决外网与内网或内网之间的通信,NAT穿透

在网络编码中会发现程序在局域网中是可以适用的,但是在外网与内网之间和内网与内网之间就不可行.问题就在于NAT.首先介绍下NAT. NAT的作用NAT(Network Address Translator),网络地址转换.顾名思义,它是一种把内部私有网络IP地址翻译成公有网络IP地址的技术,如图5-1所示.NAT是在IP地址日益缺乏的情况下产生的,它的主要目的是使地址能够重用[9].  图5-1 NAT模型  IP地址分为五类:A类,B类,C类,D类,E类(这里不考虑保留的IP地址).A.B.C类