`
chriszeng87
  • 浏览: 738474 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

NAT and Traversal NAT(TURN/STUN/ICE)

阅读更多

NAT

NAT有4种不同的类型

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) Address Restricted 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)

3) Port Restricted 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(202.88.88.88:2000)发送到 NAT(202.100.100.100:8000)的数据都可以到达A(192.168.8.100:5000)

以上三种NAT通称Cone NAT(圆锥形NAT).我们只能用这种NAT进行UDP打洞.

4) Symmetric(对称形)

对于这种NAT。连接不同的外部Server,NAT打开的端口会变化。也就是内部机器A连接外网机器B时,NAT会打开一个端口,连接外网机器C时又会打开另外一个端口。

对于双方都是Port Restricted Cone NAT的时候,则需要利用UDP打洞原理进行“先打洞,然后才能直接通信”。
对于Cone NAT.要采用UDP打洞.需要一个公网机器server C来充当”介绍人”.处于NAT之后的内网的A,B先分别和C通信,打开各自的NAT端口.C这个时候知道A,B的公网IP: Port. 现在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为外网的机器;
  1. 如果A想与B通信;
  2. A首先连接 C, C得到A的外网NA的地址和端口;
  3. B也要连接C,C得到B的外网NB的地址和端口;
  4. A告诉C说我要和B通讯;
  5. C通过NB发信息给B,告诉B A的外网NA的地址和端口;
  6. B向NA发数据包(肯定会被NA丢弃,因为NA上并没有 A->NB 的合法session),但是NB上就建立了有B->NA的合法session了;
  7. B发数据包给C,让 C 通知 A,我已经把洞打好了;
  8. A接受到通知后向 B 的外网发NB数据包,这样就不会被丢弃掉了。因为对于NB来说,它看到的是A的外网NA的地址,而通过第6步,B已经让NA成为NB的合法通信对象了。所以当NA发数据包给NB时,NB就会接收并转发给B;

注意: 路由器和防火墙的UDP打洞的端口有个时间限制的,在一定时间内如果没有数据通讯会自动关闭

STUN

STUN的全称是Simple Traversal of UDP Through NAT,即UDP对NAT的简单穿越方式。应用程序(即STUN CLIENT)向NAT外的STUN SERVER通过UDP发送请求STUN 消息询问自身的转换后地址,STUN SERVER收到请求消息,产生响应消息,响应消息中携带请求消息的源端口,即STUN CLIENT在NAT上对应的外部端口。然后响应消息通过NAT发送给STUN CLIENT,STUN CLIENT通过响应消息体中的内容得知其在NAT上对应的外部地址,并且将其填入以后呼叫协议的UDP负载中,告知对端,同时还可以在终端注册时直接注册这个转换后的公有IP地址,这样就解决了H.323/MGCP/SIP穿越NAT的通信建立问题以及作为被叫时的问题。本端的接收地址和端口号为NAT外的地址和端口号。由于通过STUN协议已在NAT上预先建立媒体流的NAT映射表项,故媒体流可顺利穿越NAT。
需要注意的是,NAT/PAT对于地址转换关系是有一定生命期的,某个地址转换后在一段时间内没有被使用将会被清除,当这个业务流再次出现时,将会建立一个新的地址转换关系,这就意味着STUN的询问过程以及终端的注册过程都需要再执行一遍才能保证通信的正确。解决这个问题一个比较通行的方案是采用某种方式保持NAT/PAT的转换关系,例如在NAT/PAT生命期内重复注册一次,比如NAT/PAT的生命期是3分钟,那么就将注册重复周期设置为2分钟。

另外STUN server并非指一个专用的服务器,而是指一种功能、一个协议,我们可以在softswitch或者任何一个需要此功能的服务器上内置此协议, 后面代码也包含一个简单的Server实现。

但是在NAT采用对称模式(symmetric NAT)工作时,STUN的方案就会出现问题。假如我们在softswitch上提供STUN server功能,终端A通过STUN可以获得NAT为终端A与softswitch之间通信分配的地址A',并将这个地址注册在softswitch上,当一个公网上的终端B呼叫终端A时,A'和B通过softswitch完成呼叫建立过程。当B试图向A'发送媒体流时,问题就出现了。因为对称NAT只允许从softswitch发送数据给地址A',从B发送的媒体流将被丢弃。所以STUN无法应用于工作在对称模式的NAT.

STUN协议最大的优点是无需现有NAT/FW设备做任何改动,同时STUN方式可在多个NAT串联的网络环境中使用. STUN的局限性在于STUN并不适合支持TCP连接的穿越,同时STUN方式不支持对对称NAT(Symmetric NAT).

TURN

这种方式又称SPAN(Simple Protocol for Augmenting NATs)方式. TURN方式解决NAT问题的思路与STUN相似,也是基于私网接入用户通过某种机制预先得到其私有地址对应在公网的地址(STUN方式得到的地址为出口NAT上的地址,TURN方式得到地址为TURNServer上的地址),然后在报文负载中所描述的地址信息直接填写该公网地址的方式,实际应用原理也是一样的。
TURN的全称为Traversal Using RelayNAT,即通过Relay方式穿越NAT,TURN应用模型通过分配TURNServer的地址和端口作为客户端对外的接受地址和端口,即私网用户发出的报文都要经过TURNServer进行Relay转发,这种方式除了具有STUN方式的优点外,还解决了STUN应用无法穿透对称NAT(Symmetric NAT)以及类似的Firewall设备的缺陷,即无论企业网/驻地网出口为哪种类型的NAT/FW,都可以实现NAT的穿透,同时TURN支持基于TCP的应用,如H323协议。TURN的局限性在于所有报文都必须经过TURNServer转发,增大了包的延迟和丢包的可能性.

 

ICE

ICE跟STUN和TURN不一样,ICE不是一种协议,而是一个framework,它整合了STUN和TURN。

 

UPnP

UPnP是若干网络协议的组合,主要用于设备的互联,但是一种叫做Internet Gateway Device (IGD) Protocol的防火墙穿越技术是基于UPnP的。

 

 

转自:http://www.cnblogs.com/whyandinside/archive/2010/12/08/1900492.html

 
 
 
分享到:
评论

相关推荐

    NAT Traversal for VoIP and Internet Communications using STUN, TURN and ICE

    ICE正逐渐成为事实的标准 本文介绍SIP中使用ICE穿越防火墙的技术 具体流程 图文并茂 一目了然

    NAT Traversal White Paper

    更多网络穿透(NAT Traversal)的技术,可以访问http://www.nattraversal.com.cn "NAT Traversal-STUN,TURN,ICE,SIP

    网络穿透 与 NAT类型 及 STUN TURN 协议

    TURN(Traversal Using Relays around NAT)协议则更进一步,当STUN无法成功时,TURN服务器作为中继,接收来自内网设备的数据并转发给目标,反之亦然。这种方式虽然效率较低,但几乎可以穿透任何类型的NAT,确保了...

    STUN和TURN简介

    TURN(Traversal Using Relays around NAT,NAT穿越使用中继)是在STUN基础上的扩展,当两个内网设备无法直接通信(例如,因为他们的NAT类型不兼容)时,TURN服务器作为中继,转发数据包以确保通信成功。 ICE...

    STUN Server.zip_C# STUN_nat 类型 判断_stun p2p_stun server

    对于更复杂的NAT环境,可以结合使用TURN(Traversal Using Relays around NAT,NAT穿越中继)或ICE(Interactive Connectivity Establishment,交互式连接建立)等更高级的穿透策略。 总的来说,STUN服务器在C#中...

    webrtc ice文档

    ICE 协议利用了 Session Traversal Utilities for NAT(STUN)协议和其扩展 Traversal Using Relay NAT(TURN)。 什么是 ICE? ICE(Interactive Connectivity Establishment)是一种用于 NAT 遍历的协议,旨在...

    穿透NAT的点对点通信

    5. ICE(Interactive Connectivity Establishment):ICE是一种综合方案,结合了STUN和TURN,用于在各种NAT环境下建立连接。 三、C#实现NAT穿透 在C#中,可以使用开源库如libuv、SharpP2P等来实现NAT穿透。以下是...

    基于STUN协议得到NAT转换后的IP和端口源代码

    STUN(Session Traversal Utilities ...同时,它也为深入研究ICE(Interactive Connectivity Establishment,交互式连接建立)、TURN(Traversal Using Relays around NAT,NAT穿越中继)和其他NAT穿透技术提供了基础。

    关于NAT的网络编程知识

    - TURN(Traversal Using Relays around NAT,NAT穿透):当STUN失败时,提供中继服务,允许内网客户端通过服务器转发数据包。 - ICE(Interactive Connectivity Establishment,交互式连接建立):结合STUN和TURN...

    nat穿透--ice--rfc5245

    Traversal Utilities for NAT (STUN) protocol and its extension, Traversal Using Relay NAT (TURN). ICE can be used by any protocol utilizing the offer/answer model, such as the Session Initiation ...

    Nat网络穿越资料汇总

    - RFC 5766 -Traversal Using Relays around NAT (TURN): Relay Extensions to Session Traversal Utilities for NAT (STUN) 这些文档详细阐述了NAT的工作原理、STUN和TURN协议的设计与实施,为理解NAT穿越提供了...

    NAT穿越方法及实例

    1. STUN(Session Traversal Utilities for NAT): STUN服务器提供了一种方式让内部设备发现其在NAT后面的公共IP和端口。通过向STUN服务器发送请求并接收响应,设备可以学习到NAT为其分配的外部属性,从而尝试建立...

    NAT.rar_NAT_NAT JAVA_java nat_nat

    ICE则是一种更复杂的机制,它结合了STUN和TURN(Traversal Using Relay NAT)服务器,用于在NAT环境下的多媒体通信。 在Java中,可以使用第三方库如JSTUN来实现STUN协议,通过获取NAT映射信息来建立穿越NAT的连接。...

    NAT类型检测相关协议

    同时,STUN也是ICE(Interactive Connectivity Establishment)框架的重要组成部分,ICE是一种综合NAT穿越技术,用于在不同NAT环境下的终端之间建立连接。 总之,NAT类型检测的相关协议,如STUN,对于现代互联网...

    stun 客户端和服务器

    ICE(交互式连接建立)是另一种网络协议,它结合了STUN和TURN(Traversal Using Relays around NAT,NAT穿越使用中继)协议,用于确保两个NAT后的终端能够建立连接。ICE在STUN的基础上增加了候选对的概念,包括本地...

    SIP协议的NAT穿越技术.pdf

    ICE是一种综合性的NAT穿越技术,它结合了STUN和TURN的功能,同时还引入了多种候选路径的自动检测和选择机制。ICE协议通过尝试所有可能的路径,包括直接连接、STUN反射以及TURN中继,来寻找最优的通信路径。 #### 五...

    stun协议抓包.rar

    Turn(Traversal Using Relays around NAT,NAT穿越中继)协议则是在STUN无法解决NAT穿透问题时的一种备用方案。当两台设备之间的直接通信因为NAT规则过于严格而无法建立时,TURN服务器可以作为中继,接收并转发两端...

    多媒体通信多种NAT技术

    这种技术包括ICE(Interactive Connectivity Establishment)、STUN(Session Traversal Utilities for NAT)和TURN(Traversal Using Relays around NAT)。 - **ICE**:综合了STUN和TURN,允许终端通过自我发现...

    NATchuanyue.zip_nat

    3. ICE(Interactive Connectivity Establishment):ICE是一种综合了STUN和TURN的协议,通过尝试各种可能的连接组合,找到最佳的穿越NAT的路径。 4. UPnP(Universal Plug and Play)/IGD(Internet Gateway ...

    Java NAT穿越

    STUN服务器可以用来帮助客户端发现其公网IP和端口,而ICE则是一种更为复杂的协议,它结合了STUN和TURN(Traversal Using Relays around NAT)服务器,旨在解决各种复杂的NAT穿透问题。 1. **STUN协议**:STUN服务器...

Global site tag (gtag.js) - Google Analytics