NAT穿越下的STUN,TURN和ICE

前言

最近由于在研究WebRTC,由于对音频视频模块基本都已经了解,就对其中的网络模块针对性的了解一下。算法

clipboard.png
这里面Transport层主要涉及3个层次SRTP、Multiplexing、P2P(STUN+TURN+ICE),如今就主要针对P2P这部分STUN、TURN和ICE的来源和设计初衷作个简单的介绍,不涉及具体的算法和技术实现,主要内容主要是翻译自外网的这篇文章。里面有一些公司介绍广告就不说了。安全

IP地址和视频链接的一个棘手问题是NAT的限制和防火墙对创建可靠呼叫的影响(A setback to IP and Video connectivity has been the restriction NATs and firewalls pose to reliable call completion.这句原话的语法拆解了很久= =)。NAT和防火墙在安全和增强因特网的可用性上扮演了很重要的角色,可是同时也形成了在创建IP终端上严重的问题。IETF(国际互联网工程任务组 The Internet Engineering Task Force,简称 IETF)建立里STUN, TURN和ICE标准来解决NAT穿越的问题。服务器

STUN能帮助链接IP终端:网络

  • 发现他们是否在NAT或者防火墙后面
  • 肯定公网IP地址和防火墙的类型。STUN而后使用这些信息去协助创建点对点的IP链接

虽然STUN在解决大部分用户设备(路由器之类的)的NAT问题上颇有效,可是它在不少公司网络上问题上不是颇有效。TURN,全称Traversal Using Relay NAT,经过提供使用一个流媒体预备服务来实现终端之间的流媒体传输的降级NAT穿越技术。框架

ICE是一个权衡STUN、TURN来提供能够来的IP创建和媒体传输的框架,经过一个SIP提供一个终端交换候选IP地址和端口的模型(好比一个私有地址和TURN服务地址)。ide

什么是NAT

NAT是指Network Address Translation。归纳来讲就是路由器把本地私有子网IP地址转换称公网(一般是一个由因特尔服务供应商ISP分配的IP地址)IP地址的修改IP信息的过程。现有的一个主要挑战就是在网络中的客户端之间创建直接链接。编码

如今有4中NAT在现在的路由器中,根据最少限制性到最多限制性来排序能够分为:spa

Full cone(全锥型)

一旦一个内网地址(iAddr:iPort)被映射到一个外部网络地址(eAddr:ePort),任何iAddr:iPort的包都会经过eAddr:ePort来发送。任何外部主机均可以经过给eAddr:ePort发送网络包来给iAddr:iPort传送信息。翻译

Address-restricted cone(限制型锥形)

一旦一个内网地址(iAddr:iPort)被映射到一个外部网络地址(eAddr:ePort),任何iAddr:iPort的包都会经过eAddr:ePort来发送。可是一个外部的主机(hAddr:any)只有在iAddr:iPort以前给hAddr:any发送过网络包的状况下才能够经过eAddr:ePort给iAddr:iPort发送网络包,any这里指任意端口。(总结下来就是只有内部给外部主机发送过信息,才能经过外部地址端口往内部发送)。设计

Port-restricted cone(端口限制型锥型)

一旦一个内网地址(iAddr:iPort)被映射到一个外部网络地址(eAddr:ePort),任何iAddr:iPort的包都会经过eAddr:ePort来发送。可是一个外部的主机(hAddr:hPort)只有在iAddr:iPort以前给hAddr:hPort发送过网络包的状况下才能够经过eAddr:ePort给iAddr:iPort发送网络包,any这里指任意端口。和地址限制锥型差很少,只是还多了外部主机的端口的限制。

Symmetric(对称型)

每一个从相同内部IP地址和端口到特定目标IP地址和端口的请求都会被映射到一个特殊的外部源IP地址和都端口上,若是相同的内部主机发送了包给相同的源地址和端口,可是是不一样的目标,也会使用不一样的映射。只有一个外部的主机从内部主机接收到过包,才能发送回去。

什么是STUN

STUN是指Session Traversal Utilities for NAT。是一个被NAT穿越算法用来协助发现网络环境信息的网络协议/包格式(IETF RFC 5389) 。发送方在发送服务器和发送客户端之间传输使用STUN包。
若是端之间的路由器使用了全锥型,限制型锥形、端口限制型锥型,那么就会发现一个单独STUN的直接链接。若是有有路由器使用了对称型NAT,那么只有在其余路由不用对称型或者端口限制型NAT的状况下才能发现一个STUN包的链接。可是不用担忧!发送方会自动的发现一个替换TURN的路径。

什么是TURN

TURN是指Traversal Using Relays around NAT。就像STUN,它是一个被NAT穿越算法用来协助发现网络内终端直接链接路径的网络协议/包格式(IETF RFC 5766)。和STUN不一样的是它用了一个公网的替换中介提换终端之间的包。当没有其余选择可用的时候,发送方使用TURN来交换流媒体包。由于它定制了服务资源因此也会由于这多的一步产生必定的延迟。

TURN只有在一个端使用了对称型NAT,而且其余的端使用了对称型NAT或者端口限制型NAT的时候才须要。

什么是ICE

ICE是指Interactive Connectivity Establishment。它定义了一个技术来使用SDP,STUN和TURN来发现网络里端之间的路径。发送方实现符合标准的ICE specification(IETF RFC 5245) ,就能兼容其余的端来实现一样的spec。

每一个RTP包都有一个7位的payload类型(0-127)和一个二进制payload。payload类型用于区分payload的格式,而且在建立发送方链接的时候须要定义好。IANA留出了一些payload type用于特定的格式。若是你在用一个不被IANA识别的编码格式,那么根据他们的建议,最好用96-127中的数字。

发送方惟一的限制是payload类型72-76是留给RTCP的。这些payload类型不能被使用由于可能影响内部RTCP的处理流程。

相关文章
相关标签/搜索