1、NAT穿越方式
1.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)。
1.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转发,增大了包的延迟和丢包的可能性。
1.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流量手动打开防火墙,所以也不会产生潜在的安全隐患。
1.4 UPnP
UPnP是若干网络协议的组合,主要用于设备的互联,但是一种叫做Internet Gateway Device (IGD) Protocol的防火墙穿越技术是基于UPnP的,其允许网络设备或者点对点应用程序通过动态开启和闭合与外部服务之间的通信端口穿过NAT网关与外界通信。
2、参考资料
[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