WebRTC技术研究三基于ICE的VoIP穿越NAT改进方案

一 引言

    随着计算机网络技术的不断发展,互联网规模飞速膨胀,大量企业和驻地网采用了私有网络通过NAT/防火墙出口来接入公共网络。而由于SIP包头中含有很多对于路由、接续SIP信令和建立呼叫连接必不可少的地址信息,这样引发了业界对于SIP2穿越NAT/防火墙问题的研究。

    目前,IETF已经对该问题提出了多种解决方案。例如:ALCes(Application Layer Gateways)、MiddleboxControl Protocol、STUN Simple Traversal of UDPthrough NAT)、TURN(Traversal Using Relay NAT)、RSIP(Realm Specific IP)、Symmetric RTP等。然而,当这些技术应用于不同的网络拓扑时都有着显著的利弊,以至于只能根据不同的接入方式来应用不同的方案,所以,未能很好地解决A11-NATⅢ的问题,同时还会给系统引入许多复杂性和脆弱性因素。此外,由于NAT/防火墙已经大量应用,SIP设备也已经比较成熟,对它们进行升级来支持多媒体通信穿越NAT/防火墙的代价将相当的大。因此,一种不需要升级任何现有网络设备,能够穿越各种NAT/防火墙并且方便在现有网络中实施的解决方案成为迫切的需要。

    本文试图寻找一种能够穿越各种类型的NAT/防火墙,无需对现有NAT/防火墙没备做任何改动的解决方案——ICE解决方案,这种方式比以前的解决方案更加灵活,具有广阔的应用前景。

二   现有NAT解决方案的比较分析

主流的NAT穿越解决方案包括STUN、TURN、Proxy及隧道穿越等,这几种方式各具优缺点,比较如下:

    (1)STUNml(simple traversal of UDP over NAT)的原理是通过某种机制预先得到内部私有IP地址对应在出口NAT上的对外公网IP地址,然后在报文负载中所描述的地址信息就直接填写出口NAT上的对外IP地址。其最大的优点是无需对现有NAT/防火墙设备做任何改动。局限性在于需要应用程序支持STUN CLIENT的功能,同时STUN并不适合支持TCP连接的穿越。

    (2)TURN即通过Relay方式穿越NAT,也是私网中的SIP终端通过某种机制预先得剑TURN SeI-ver上的公网地址,私网终端发出的报文都要经过TURN Serve:进行Relay转发。这种方式除了具有STUN方式的优点外,还解决了STUN应用无法穿透对称NAT(SymmetricNAT)以及类似的Firewall设备的缺陷,局限性在于需要SIP终端支持TURN Client,并增大了包的延迟和丢包的可能性。

    (3)Proxy方式是指通过对私网内用户呼叫的信令和媒体||d时做Relay来实现对NAT/防火墙的穿越。由于不用对运营商和客户端的现有网络设备进行任何改造,具有很强的适应性,组网灵活,可满是NGN初期多样化的组网和用户接入。

    (4)隧道穿越技术的基本思想是通过把需要穿越的数据流封装征某种隧道中,从而绕过NAT/防火墙。它在很大程度上解决了对于不问应用协议需要开发不同穿越策略的办法,但是必须多媒体终端和服务器能够支持隧道,这是一个比较大的限制条件。

3 穿越NAT/防火墙方案的实现

    3.1 ICE方式

    交互式连通建立方式ICE(Interactive ConnectivityEstablishment)并非一种新的协议,它不需要对STUN,TURN或RSIP进行扩展就可适用于各种NAT。ICE是通过综合运用上面某几种协议,使之征最适合的情况下工作,以弥补单独使用其中任何一种所带来的固有缺陷。对于SIP来说,ICE只需要定义一些SDP(Sessionescription Protoc01)附加属性即可,对于别的多媒体信令协议也需要制定一些相应的机制来实现。本文是针对SIP呼叫流程实现ICE的功能。

    这种方式的优点是可以根据通讯双方所处的网络环境,选取适合穿越NAT/防火墙的方式。首先,获取用户所征网络中NAT的类型,如果用户没有设置使用何种方式连接,那么默队首先使用UDP连接,如果一定时间内没有连接成功,接着使用TCP连接,同样如果没有在一定时间内连接成功,那么将采用其他方式如Upnp、Httptunnel。如果所有穿越方案都失败后,将结果返回给用户,由用户决定是否重试。

    3.2 ICE作用

将NAT TURN打包在一起,做一个最优选择
首先尝试p2p,如有两台服务通过,也会选择一个最优服务
不通则选择TURN,如有多个节点,上海TURN不通,则选择北京的TURN
总之,将所有可能性罗列好,在其中找到一条最优路径,将数据发送,ICE就是让两个终端去得到所有能够连接到对方终端的通路,并找出最优的可通通路

  • 第一种通路,本机IP,如果两个终端在一个服务下,直接通过本机IP连通
  • 第二种通路,穿越NAT,双方终端访问STUN服务,都拿到外网IP,尝试P2P穿越,成功既可以连接
  • 第三条通路,P2P不成功,通过中继服务器Relay server

3.3 ICE 具体工作

  1. 收集 Candidate
  2. 对 Candidate Pair 排序 (对候选者对 进行排序,认为优先级高的 先做测试)
  3. 连通性检查(尝试连通)

3.4 ICE Candidate

每个 candidate(候选者)是一个地址
例如:a = candidate: ...UDP/TCP ...192.169.1.2 1816 type host
每个候选者包括:协议、IP、端口、类型

3.5 Candidate 类型

  • 主机候选者(网卡自己的IP地址和端口)
  • 反射候选者(通过NAT之后的IP地址和端口)
  • 中继候选者(通过TURN服务开通的IP地址和端口)

3.6 形成 Candidate Pair

  1. 一方收集到所有候选者后,通过信令传给对方
  2. 同样,另一方收到候选者后,也做收集工作
  3. 当双方拿到全部列表后,将候选者形成配对儿

3.7 连通性检查

  1. 对候选对进行优先级排序
  2. 对每个候选对进行发送检查
  3. 对每个候选对进行接收检查(和发送同时进行)

四.webrtc官方samples自带ICE servers

五.总结

    ICE方式的优势是显而易见的,它消除了现有的机制的许多脆弱性。例如,传统的STUN有几个脆弱点,其中一个就是发现过程需要客户端自己去判断所在NAT类型,这实际上不是一个可取的做法。而应用ICE之后,这个发现过程己经不需要了。另一点脆弱性在于STUN,TURN等机制都完全依赖于一个附加的服务器,而ICE利用服务器分配单边地址的同时,还允许客户端直接相连,因此即使STUN或TRUN服务器中有任何一个失败了,ICE方式仍可让呼叫过程继续下去。此外,传统的STUN最大的缺陷在于,它不能保证在所有网络拓扑结构中都正常工作,对于TURN或类似转发方式工作的协议来说,由于服务器的负担过重,很容易出现丢包或者延迟情况。而ICE方式正好提供了一种负载均衡的解决方案,它将转发服务作为优先级最低的服务,从而在最大程度上保证了服务的可靠性和灵活性。此外,ICE的优势还在于对IPv6的支持。由于广泛的适应能力以及对未来网络的支持,ICE作为一种综合的解决方案将有着非常广阔的应用前景。

参考文章:

http://blog.csdn.net/lionzl/article/details/7215978

https://webrtc.github.io/samples/src/content/peerconnection/trickle-ice/

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章