竭诚为您提供优质文档/双击可除
ice协议看明白
篇一:基于stun,turn,ice协议的nat穿越
基于stun,turn,ice协议的nat穿越
分类:Voiptech20xx-10-0820:23115人阅读评论(0)收藏举报
stun,turn,ice协议概述
stun,turn,ice是ietf提出的处理voip网络中nat穿越问题的协议族。
stun可以处理大部分nat问题,turn是stun协议的一个增强版,专用于处理对称形nat问题,而ice则是综合stun 及turn的产物,是一个框架,综合运用stun和tuRn的结构,它提供可靠的Voip或视频通话配置以及媒体传输,通过一个sip供给/应答模型供端点交换多个候选ip地址和端口(比如私有地址和tuRn服务器地址)。
采用此框架可以完美解决voip中媒体传输中遇到的nat 及防火墙问题,而信令穿越则需要另一套机制,过去人们提
出了多种处理nat问题的方案,但都有局限性,采用ice则完全解决了这些问题,ice的另一个特点时能够通过一定机制检测nat类型,从而决定采用何种方案处理,比如对于大多数呼叫,媒体可能直接用p2p方式即可,而有些方案可能不论什么nat类型都用media-relay方式,这种方式增加了端到端延时及丢包概率。
stun和turn都是client/server协议,说白了就是客户端向服务器要自己的公网地址及端口,然后放在自己invite请求的sdp消息体及对invite的200oksdp消息体中。
大多数sip客户端和服务器支持stun协议,所以都有一定缺陷。
/perfectpdl/article/details/763 6067
tuRn协议深入剖析
概括一下:
若一个主机位于nat后面,那么在特定的环境下,它不可能跟其他主机通信。这种情况下,这台主机有必要通过一个转发的主机来实现通信。有种协议叫tuRn,允许主机通过转发来和其他主机通信。tuRn协议与其他转发协议不同的地方在于它允许客户端用一个转发地址同多个主机交流。
1简介
一个位于nat后面的主机可能相同其他位于nat后面的主机交流。为了达到目的,可以用打洞的方法来找到一条路径,但是不通过转发。
当两台主机都位于对称nat之后时,打洞技术可能会失败。
tuRn协议允许一个位于nat之后的主机请求另一台主机转发。客户端可以通过服务端转发包到另一端。并且可以控制转发如何结束。这个客户端通过在服务端获取一个ip端
口对,也被称作转发端口地址来进行上述操作。
当对方发送一个包到转发端口地址时,服务器就将这个包转发到客户端。当一个客户端发送一个数据包到服务器时,服务器转发这个包到转发端口地址所对应的客户端。
一个采用tuRn协议的客户端一定有一些方法把自己的
转发地址告诉对方,并且知道每个通信伙伴的ip端口地址对。
若tuRn协议被用作ice协议中,那么它的转发ip端口对和其他伙伴的ip端口对都包含在ice候选者信息中。例如,如果tuRn和ice被sip用于媒体传输时,sip以会话协议的方式,将ice候选者的信息放进sip消息体中。若tuRn 和ice协议被用在其他会话协议中,那么【music-ice-nonsip】将提供一些会话协议必须实现的功能。
虽然tuRn服务器的应用能使两个位于nat之后的主机
交流成为可能,但是这对tuRn服务器来说开销太大。因而,最后是在直接交流没法执行的时候,才用tuRn服务器。当
客户端与伙伴通过ice协议来确定通信路径的时候,ice协
议将首先通过打洞的方法来寻找一条直接的路径来让两方
通信,仅仅当这条路径找不到的时候才会用tuRn服务器。
tuRn原来被设计用来支持基于sip的多媒体会话信号传输。
tuRn被设计成ice中的用于nat穿越的一部分。
tuRn是一个stun的扩展版本。大多数情况下,tuRn消息是stun格式的消息。该文档的读者应该熟悉stun协议。
2大体看一下操作
这一节给出了tuRn操作的一个预览。
在一个传统的配置中,tuRn客户端被连接到私有网络中,并且通过这个一个或多个nats连到共有网络中。在这个没
有共有网络中,是tuRn服务器。其他的就是这个tuRn客户端想连接的同伴客户端。这些同伴可能处在nat的后面也可能没有处在nat的后面。客户端用这个服务器作为一个转发来发送数据包到其他的伙伴,并且通过转发接收来自同伴机的数据包。
图1显示了一个经典的过程。这个图中,tuRn客户端和tuRn服务端被nat分割。客户端在私有网络中,服务端在公网中。nat是地址端口对称。
客户端通过一个叫做客户端主机传输地址得到ip地址
端口对同server通话。
客户端从它的主机传输地址中传输tuRn消息到一个tuRnserver的一个端口地址中。
由于这个客户端位于nat的后面,这个服务器根据客户端在nat的传输地址看到了从客户端中传回的包。这个nat
的传输地址叫做seRVeR-ReFlexiVetransportaddress。
这个客户端用tuRn命令在服务端进行了一个
allocation操作。allocation是一个位于server的数据结构体。这个数据结构体包含了分配的RelayedtRanspoRtaddRess。伙伴们可以通过这个RelayedtRanspoRtaddRess让服务器转发消息到客户端。只
要这个allocation被创建,客户端就能发送应用程序数据
到服务器,并且指明这个数据将送给那个伙伴。这样,服务器将转发数据岛相关的伙伴。客户端发送的应用程序数据包含在tuRn消息中。
在服务端,应用程序将数据从tuRn消息中取出。并将
数据发送以udp的形式发给伙伴。相反的,伙伴同样可以以udp的方式发送应用程序数据到服务端分配的转发传输地址。服务端将从tuRn消息解析出数据,并且将这个数据发送到
伙伴指定的客户端。由于tuRn消息总是包含着客户端将发
给的同伴的地址。客户端可以用唯一的一个allocation和