资讯专栏INFORMATION COLUMN

NAT穿越下的STUN,TURN和ICE

roland_reed / 642人阅读

摘要:国际互联网工程任务组,简称创建里和标准来解决穿越的问题。是一个被穿越算法用来协助发现网络环境信息的网络协议包格式。这些类型不能被使用因为可能影响内部的处理流程。

前言

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


这里面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服务地址)。

什么是NAT

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

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

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的处理流程。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/106403.html

相关文章

  • JavaScript 是如何工作的:WebRTC 对等网络的机制!

    摘要:为了使连接起作用,对等方必须获取元数据的本地媒体条件例如,分辨率和编解码器功能,并收集应用程序主机的可能网络地址,用于来回传递这些关键信息的信令机制并未内置到中。所有特定于多媒体的元数据都使用协议传递。 这是专门探索 JavaScript 及其所构建的组件的系列文章的第 18 篇。 想阅读更多优质文章请猛戳GitHub博客,一年百来篇优质文章等着你! 如果你错过了前面的章节,可以在这里...

    XBaron 评论0 收藏0
  • UDP NAT 穿透

    摘要:穿透的协议穿透协议系列介绍了协议协议版本变化属于的协议通过与之间发送数据包通信以获取一些信息。同样和交互其作用是穿透失败使用中继,确保通信成功的低优先级策略。 UDP NAT穿透俗称p2p打洞。讲到NAT, 追溯一下NAT产生原因:使用ipv4的时候,地址数量有限,NAT设备可以让接上它的其他设备在其上共享ip,缓解地址不够用。当然ipv6的概念早就来临了,国内推广的程度和推广慢原因这...

    alogy 评论0 收藏0
  • 使用WebRTC搭建前端视频聊天室——入门篇

    摘要:在处于使用了设备的私有网络中的主机之间需要建立连接时需要使用穿越技术。目前已经有很多穿越技术,但没有一项是完美的,因为的行为是非标准化的。 什么是WebRTC? 众所周知,浏览器本身不支持相互之间直接建立信道进行通信,都是通过服务器进行中转。比如现在有两个客户端,甲和乙,他们俩想要通信,首先需要甲和服务器、乙和服务器之间建立信道。甲给乙发送消息时,甲先将消息发送到服务器上,服务器对甲...

    Carl 评论0 收藏0
  • 深入理解WebRTC

    摘要:对于接收方来说,则必须实时解码音频和视频流,并适应网络抖动和时延。另外,由于主要是用来解决实时通信的问题,可靠性并不是很重要,因此,使用作为传输层协议低延迟和及时性才是关键。握手记录严格按照协议规定的顺序传输,顺序不对就报错。 Web Real-Time Communication(Web实时通信,WebRTC)由一组标准、协议和JavaScript API组成,用于实现浏览器之间(端...

    sumory 评论0 收藏0
  • WebRTC 及点对点网络通信机制

    摘要:本质上允许网页程序创建点对点通信,我们将会在随后的章节中进行介绍。信令涉及网络检索和穿透,会话创建及管理,通信安全,媒体功能元数据和调制及错误处理。这样就会完全建立及激活节点间的网络套接字会话。 原文请查阅这里,略有删减,本文采用知识共享署名 4.0 国际许可协议共享,BY Troland。 这是 JavaScript 工作原理第十八章。 概述 何为 WebRTC ?首先,字面上已经...

    Rango 评论0 收藏0

发表评论

0条评论

roland_reed

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<