1、引言
网络地址转换(Network Address Translation,简称NAT)是一种在IP分组通过路由器或防火墙时重写源IP地址或/和目的IP地址的技术。这种技术被普遍使用在有多台主机但只通过一个公有IP地址访问因特网的私有网络中。20世纪90年代中期,NAT是作为一种解决IPv4地址短缺以避免保留IP地址困难的方案而流行起来的。家庭和小型办公室的路由器一般都集成了防火墙,DHCP服务器和NAT功能。
NAT穿越是广泛用于P2P领域的通信方式。在视频会议过程中,NAT穿越也在内外网消息通信中起到了至关重要的作用,平台服务器之间、与会终端之间、以及平台服务器和与会终端之间都可能存在信令或多媒体流等的NAT穿越。
本文总结学习NAT的4种类型,以及NAT穿越的协议或框架。
2、NAT的类型
NAT有4种不同的类型:Full Cone、Address Restricted Cone、Port Restricted Cone和Symmetric(对称形),其中Full Cone、Address Restricted Cone、Port Restricted Cone等3种类型又统称为Cone NAT(圆锥形NAT)。
2.1 Full Cone
这种NAT内部的机器A连接过外网机器C后,NAT会打开一个端口。然后外网的任何发到这个打开的端口的UDP数据报都可以到达A,不管是不是C发过来的。
例如 A:192.168.8.100 NAT:202.100.100.100 C:292.88.88.88 A(192.168.8.100:5000) -> NAT(202.100.100.100:8000) -> C(292.88.88.88:2000) 任何发送到 NAT(202.100.100.100:8000)的数据都可以到达A(192.168.8.100:5000)
2.2 Full Cone
这种NAT内部的机器A连接过外网的机器C后,NAT打开一个端口。然后C可以用任何端口和A通信,其它的外网机器则不行。
例如 A:192.168.8.100 NAT:202.100.100.100 C:292.88.88.88 A(192.168.8.100:5000) -> NAT(202.100.100.100 : 8000) -> C(292.88.88.88:2000) 任何从C发送到 NAT(202.100.100.100:8000)的数据都可以到达A(192.168.8.100:5000)
2.3 Full Cone
这种NAT内部的机器A连接过外网的机器C后,NAT打开一个端口。然后C可以用原来的端口和A通信,C的其它端口或其它的外网机器则不行。
例如 A:192.168.8.100 NAT:202.100.100.100 C:292.88.88.88 A(192.168.8.100:5000) -> NAT(202.100.100.100 : 8000) -> C(292.88.88.88:2000) 只有从C(202.88.88.88:2000)发送到NAT(202.100.100.100:8000)的数据,才可以到达A(192.168.8.100:5000)
2.4 Full Cone
对于这种NAT,连接不同的外部Server,NAT打开的端口会变化。也就是内部机器A连接外网机器B时,NAT会打开一个端口;连接外网机器C时,NAT又会打开另外一个端口。
对于双方都是Port Restricted Cone NAT的时候,则需要利用UDP打洞原理进行“先打洞,然后才能直接通信”。
对于Cone NAT要采用UDP打洞,需要一个公网机器Server C来充当“介绍人”。处于NAT之后的内网的A、B先分别和C通信,打开各自的NAT端口,C这个时候知道A、B的公网IP和端口。现在A和B想直接连接,比如A给B直接发包,除非B是Full Cone,否则不能通信。反之亦然。
为什么会这样?因为对于处于NAT之后的A、B。如果想A要与外界的D通信,则首先必须要A发包到D,然后A经过NAT设备NA,NA把A的内网地址和端口转换为NA的外网地址和端口。和D通信之后,D才能经过NA和A通信。也就是说,只能A和外界主动通信,外界不能主动和处于NA之后的A通信,这种包会被NA直接丢弃的。这也就是前面所说的Port Restricted Cone 的情形!
A(192.168.8.100:5000) -> NA(202.100.100.100:8000) -> D(292.88.88.88:2000)
但是我们可以这样:
A --- NA --- Server C --- NB --- B 其中: A、B 为主机; NA、NB 为NAT设备; Server C为外网的机器;
如果A想与B通信,那么其过程如下:
(1)A首先连接 C,C得到A的外网NA的地址和端口;
(2)B也要连接C,C得到B的外网NB的地址和端口;
(3)A告诉C说我要和B通讯;
(4)C通过NB发信息给B,让B知道A的外网NA的地址和端口;
(5)B向NA发数据包(肯定会被NA丢弃,因为NA上并没有 A->NB 的合法session),但是NB上就建立了有B->NA的合法session了;
(6)B发数据包给C,让 C 通知 A,我已经把洞打好了;
(7)A接收到通知后,向 B 的外网NB发数据包,这样就不会被NB丢弃掉了。因为对于NB来说,它看到的是A的外网NA的地址,而通过第5步,B已经让NA成为NB的合法通信对象了。所以,当NA发数据包给NB时,NB就会接收并转发给B。
注意: 路由器和防火墙的UDP打洞的端口有个时间限制的,在一定时间内如果没有数据通讯会自动关闭。
3、NAT穿越
3.1 STUN
1、简介
STUN是一种NAT穿越协议,其全称是Simple Traversal of UDP Through NAT,即UDP对NAT的简单穿越方式。
2、应用模型
如上图所示,如果STUN ClientA想与STUN ClientB通信,那么其过程如下:
(1)STUN ClientA通过NA向STUN Server发送UDP请求STUN 消息询问并注册自身的转换后地址;
(2)STUN Server收到请求消息,产生响应消息,响应消息中携带请求消息的源端口,即STUN ClientA在NA上对应的外部端口,然后响应消息通过NA发送给STUN ClientA;
(3)STUN ClientB通过NB向STUN Server发送UDP请求STUN 消息询问并注册自身的转换后地址;
(4)STUN Server收到请求消息,产生响应消息,响应消息中携带请求消息的源端口,即STUN ClientB在NB上对应的外部端口,然后响应消息通过NB发送给STUN ClientB;
(5)STUN ClientA将其在NA上对应的外部地址和端口信息包含在消息中,发送给STUN Server请求要和STUN ClientB通讯;
(6)STUN Server收到请求信息后,查询STUN ClientB的注册地址,并通过NB将请求转发给STUN ClientB;
(7)STUN ClientB通过消息体中的内容得知STUN ClientA在的外部地址和端口,并将其在NB上对应的外部地址和端口信息包含在响应消息中,然后将响应信息发送给STUN ClientA,STUN ClientA收到响应信息后也知道了STUN ClientB的外部地址和端口,这样就在STUN ClientA和STUN ClientB之间建立了连接,解决了穿越NAT的通信建立问题以及作为被叫时的问题。
本端的接收地址和端口号为NAT外的地址和端口号。由于通过STUN协议已在NAT上预先建立媒体流的NAT映射表项,因此,媒体流可顺利穿越NAT。
需要注意的是,NAT/PAT对于地址转换关系是有一定生命期的,某个地址转换后在一段时间内没有被使用将会被清除,当这个业务流再次出现时,将会建立一个新的地址转换关系,这就意味着STUN的询问过程以及终端的注册过程都需要再执行一遍才能保证通信的正确。解决这个问题一个比较通行的方案是采用某种方式保持NAT/PAT的转换关系,例如在NAT/PAT生命期内重复注册一次,比如NAT/PAT的生命期是3分钟,那么就将注册重复周期设置为2分钟。
另外,STUN Server并非指一个专用的服务器,而是指一种功能、一个协议,我们可以在软交换服务或者任何一个需要此功能的服务器上内置此协议。
3、优点和局限性
在NAT采用对称模式(Symmetric NAT)工作时,STUN的方案就会出现问题。假如我们在软交换服务上提供STUN Server功能,终端A通过STUN可以获得NAT为终端A与软交换服务之间通信分配的地址A',并将这个地址注册在软交换服务上,当一个公网上的终端B呼叫终端A时,A'和B通过软交换服务完成呼叫建立过程。当B试图向A'发送媒体流时,问题就出现了。因为对称NAT只允许从软交换服务发送数据给地址A',从B发送的媒体流将被丢弃。所以,STUN无法应用于工作在对称模式的NAT。
STUN协议最大的优点是无需现有NAT/FW设备做任何改动,同时STUN方式可在多个NAT串联的网络环境中使用。STUN的局限性在于STUN并不适合支持TCP连接的穿越,同时STUN方式不支持NAT的对称模式(Symmetric NAT)。
3.2 TURN
1、简介
TURN的全称为Traversal Using Relay NAT,即通过Relay方式穿越NAT。另外,这种方式又称SPAN(Simple Protocol for Augmenting NATs)方式。
2、应用模型
TURN方式解决NAT问题的思路与STUN相似,也是基于私网接入用户通过某种机制预先得到其私有地址对应在公网的地址(STUN方式得到的地址为出口NAT上的地址,TURN方式得到地址为TURN Server上的地址),然后在报文负载中所描述的地址信息直接填写该公网地址的方式,实际应用原理也是一样的。
3、优点和局限性
TURN应用模型通过分配TURN Server的地址和端口作为客户端对外的接受地址和端口,即私网用户发出的报文都要经过TURN Server进行Relay转发,这种方式除了具有STUN方式的优点外,还解决了STUN应用无法穿透对称NAT(Symmetric NAT)以及类似的Firewall设备的缺陷,即无论企业网/驻地网出口为哪种类型的NAT/FW,都可以实现NAT的穿透,同时TURN支持基于TCP的应用,如H323协议。TURN的局限性在于所有报文都必须经过TURN Server转发,增大了包的延迟和丢包的可能性。
3.3 ICE
1、简介
ICE的全称Interactive Connectivity Establishment(互动式连接建立),由IETF的MMUSIC工作组开发出来的,它所提供的是一种框架,使各种NAT穿透技术可以实现统一。ICE跟STUN和TURN不一样,ICE不是一种协议,而是一个框架(Framework),它整合了STUN和TURN。
2、应用模型
如上图所示,如果A想与B通信,那么其过程如下:
(1)A收集所有的IP地址,并找出其中可以从STUN服务器和TURN服务器收到流量的地址;
(2)A向STUN服务器发送一份地址列表,然后按照排序的地址列表向B发送启动信息,目的是实现节点间的通信;
(3)B向启动信息中的每一个地址发送一条STUN请求;
(4)A将第一条接收到的STUN请求的回复信息发送给B;
(5)B接到STUN回复后,从中找出那些可在A和B之间实现通信的地址;
(6)利用列表中的排序列最高的地址进一步的设备间通信;
由于该技术是建立在多种NAT穿透协议的基础之上,并且提供了一个统一的框架,所以ICE具备了所有这些技术的优点,同时还避免了任何单个协议可能存在的缺陷。因此,ICE可以实现在未知网络拓扑结构中实现的设备互连,而且不需要进行对手配置。另外,由于该技术不需要为VoIP流量手动打开防火墙,所以也不会产生潜在的安全隐患。
3.4 UPnP
UPnP是若干网络协议的组合,主要用于设备的互联,但是一种叫做Internet Gateway Device (IGD) Protocol的防火墙穿越技术是基于UPnP的,其允许网络设备或者点对点应用程序通过动态开启和闭合与外部服务之间的通信端口穿过NAT网关与外界通信。
4、参考资料
[1] NAT and Traversal NAT(TURN/STUN/ICE)
http://www.cnblogs.com/whyandinside/archive/2010/12/08/1900492.html
[2] ICE 原理学习
http://blog.csdn.net/voipmaker/article/details/8453702
相关推荐
常见的NAT穿越方法包括STUN(Simple Traversal of UDP through NAT)、ALG(Application-Level Gateway)和TURN(Traversal Using Relays around NAT)。 - STUN服务器:STUN服务器提供一个公网IP和端口,内网设备...
总结来说,"NAT穿越(UDP)"是一个涉及网络编程、P2P通信、NAT穿透技术和Java编程的复杂课题。通过理解上述关键概念,开发者可以构建出能在各种网络环境中有效通信的应用程序。TestP2P-UDP这个项目很可能是实现这些...
NAT穿越技术详细解析 NAT(Network Address Translation,网络地址转换)是一种常用的技术,用于将私网IP地址转换为公网IP地址,以便在互联网上进行通信。然而,在SIP(Session Initiation Protocol,会话初始协议...
NAT穿越,也称为NAT穿透或NAT Traversal,是指在NAT环境下,两个处于不同内网或者不同NAT后的设备能够建立直接的双向通信的方法。这个问题在P2P(点对点)通信、多人在线游戏、远程桌面等场景中尤为重要,因为常规的...
NAT(Network Address Translation,网络地址转换...通过学习相关RFC文档和理解NAT穿越的原理,我们可以更好地应对在分布式系统、VoIP、P2P网络等场景下的通信挑战。这份资料汇总将为你提供深入理解NAT穿越的宝贵资源。
### 穿越NAT建立TCP连接的研究 #### 摘要 随着互联网技术的不断发展,特别是P2P网络技术的广泛应用,越来越多的内网主机需要参与到P2P网络中来。然而,对于位于NAT(Network Address Translation,网络地址转换)...
2. "对称型NAT穿越技术的研究.pdf":可能深入研究了Symmetric NAT的工作原理以及现有的穿越技术,包括它们的优点、缺点和适用场景,可能还对比分析了不同技术的性能。 3. "基于端口准随机猜测的UDP穿越Symmetric_...
总结,基于UPnP的NAT穿越技术为内网服务提供了对外部的可达性,但同时也面临安全、兼容性和复杂网络环境的挑战。随着技术的进步,未来的NAT穿越技术将更加智能和高效,以适应不断变化的网络需求。
总结来说,这个主题涵盖了P2P网络通信的基础,UDP协议的特性和NAT穿越技术的应用。对于网络编程和分布式系统开发者来说,理解这些概念和技术至关重要,因为它们是构建高效、可靠的实时通信系统的关键组成部分。通过...
本文的目的在于描述和分析在实际中运用得最广泛、最可靠同时也是最简单的一种NAT穿越技术,该技术通常被称为“打洞”技术。目前,“打洞”技术已经在UDP通信领域中得到了广泛的理解和应用,在此,也将讨论如何利用它...
此外,本文还关注了NAT穿越中间件的设计与实现。中间件作为抽象层,简化了应用程序开发者对底层复杂性的处理,提供统一的开发环境,降低程序的复杂性和移植成本。NAT穿越中间件(MoNT)作为此类解决方案的实例,它在...
IPSec报文穿越NAT的报文。
详细的讲述了NAT穿越的相关知识。例子丰富,实用性强。
在提供的压缩包文件中,"P2P.doc"可能是关于TCP和UDP穿越NAT的理论文档,详细解释了这些概念和技术。而"P2P_TCP_Software.rar"和"P2P_by_shootingstars.rar"可能是包含C++实现的源代码库,其中"P2P_TCP_Software...
通过分析和运行这个代码,你可以深入理解如何在实际应用中实现UDP穿越NAT。代码可能包括了创建UDP套接字、与STUN服务器交互、处理数据包以及维护连接的逻辑。 通过学习这个代码,你可以了解到: - 如何设置和管理...
总结而言,通过以上配置步骤和注意事项,可以在H3C设备上成功实现IPsec+NAT穿越,确保即使在网络中存在NAT设备的情况下,也能保持稳定、安全的IPsec隧道连接。这对于现代企业网络环境尤为重要,尤其是在远程办公日益...
IPSec穿越NAT的原理.pdf
UDP穿越NAT(Network Address Translation)通信是一种在互联网上实现两个位于不同内网且被NAT设备隔离的设备之间直接通信的技术。NAT通常用于公网和私网之间的地址转换,使得内部网络的设备可以通过单一的公网IP...