这个文件描述了以UDP为基础的请求/回答模式的多媒体会话的NAT穿越的协议。这个协议名叫ICE。ICE利用了STUN协议和它的扩展版本TURN。ICE可以被任何请求/问答模式的协议利用。例如sip。
1.简介
RFC 3264定义了一个双向会话描述协议(SDP),以建立多媒体回话。这种请求/回答模式被sip利用。
请求/回答的协议很难穿越NAT。因为它们想要建立一个媒体包的流。它们想要携带媒体源的IP地址和端口,并且将这些东西放入消息中。这些东西很难通过NAT。这个协议也想直接在两个伙伴之间创建会话。这样的话,就可以减少媒体数据的延迟,减少报的丢失,并且减少应用程序的消耗。然而很难克服nat穿越的问题。各种各样的情况很难解决,但这正是本协议的目的。
各种各样的方法已经被一些协议定义了用于nat的穿越。例如turn,stun。Sdp。但是每种协议都有优点和缺点。我们缺少的是一种试用于多种环境的方法来解决NAT穿越。
这个说明书定义了ICE作为NAT穿越的方法,他可以被扩展成其他的传输协议。ICE是一种请求问答模式的扩展版本,
2.预览ICE
在经典的ICE中,我们有两个端点想要交流。它们可以通过一些传输协议直接交流。客户端可能位于也可能没有位于NAT的后面,ICE让客户端来发现路径使他们之间交流。
图1显示了一个经典的环境。两个点是L和R。它们俩都在NAT的后面。NAT的类型并不知道。客户L和R想进行一个请求/问答模式的交流来交换SDP信息。交流将通过SIP服务器进行。
ICE主要关心的是网络中的STUN或者TURN服务器。每个客户端都有自己的STUN和TURN服务器,或者它们的一样。
ICE的基本观念如下:每个客户端有几个个传输地址端口对的组合。它们可以通过这些组合同其他客户端交流。
这些组合包括以下:
。在子网的传输地址
。在NAT上的传输地址
。在TURN Server上的转发地址
图中L的任何一个组合都可以被用来同R的组合中的任何一个组合交流。然而,有些组合可能用不到。例如,如果L和R都在NAT之后,它们的子网传输地址不能直接进行交流。ICE的目的是发现哪个地址对可以交流。ICE的目的就是尝试所有可能的对,来找到一个或多个可以用来通信。
2。.1获取候选者地址
为能用好客户端必须找到所有的地址候选者。候选者是一个ip端口对。这篇文章定了三种类型的候选者。在子网的传输地址叫做HOST
CANDIDATE。
若一个客户端是多路的。它包含来自每一个IP地址的候选者。对于peer来说,client可被peer到达通过各种各样的方式。若peer跟client一个子网,则用子网的候选者。若在外网则用外网候选者。为了找出哪个候选者最近,client包含了所有的候选者。
若使用TURN协议则候选者有Relayed
Address,Server Reflexive Address,Local Address。
当client从IP地址和端口X:x发送了一个TURN
Allocate request,nat将会映射一个Server Reflexive Address,数据包将由host地址候选者到Reflexive地址候选者。
当这里有多个NAT位于client和server之间时,turn
request将在任何一个nat上绑定,但是只有最靠近server的reflexisive候选者被client发现。
然后allocate request到大TURN server。Turn
server分配了端口y,地址y,然后产生了一个allocate回应。然后通知客户端这是relayed
candidate。Turn服务器也通过回应通知client它的server
reflexive候选者—X1:x1。
当仅仅STUN服务器被利用的时候,客户端发送一个STUN绑定请求道STUN
server。STUN server将通知客户端它的server reflexive候选者X1:x1。
2。.2连接检查
当L收集了所有的候选者信息,它将他们由高到低的优先级顺序组织起来,并将他们放到SDP请求的属性中发到R。当R接收到请求后,它进行相同的收集过程并将自己的候选者都进行了回复。最后,每一个client都有了他们对方的完整的候选者集合。它将他们组织好,放到CANDIDATE
PAIRS中,来看哪个pairs有效,每个代理进行了一些检查。每个检查都是一个STUNrequest/response传输。
连接检查的步骤很简单:
1将候选者进行优先级组织。
2发送检查每个优先级对
3回复从其他代理中收到的每个检查。
检查是一个四次握手的过程。
2.3整理候选者
依照上述的搜索规则找到了所有的候选者对,为了更快的得到记过,候选者被用一个特定的规则进行了整理。整理候选者的结果列表被叫做CHECK LIST.zhge规则在4.1.2
中被描述。它遵循两个基本规则。
。每个代理给候选者一个数字优先级。伴随着候选者发送到peer中。
。本地和远处的候选者的优先级被结合到一起。
当L和R的前面都有NAT时,第二条特性对于让ICE去工作很重要。大多数情况下,NAT将不允许包从主机发来。因此,ICE检查每个方向,直到两边都有了回应才能确定联通。
2。.4冻结候选者
先前介绍的情况仅仅符合代理想要用一个组件来建立媒体会话的情况。一个多媒体六可能要求各种各样的组件。每个组建必须为这个多媒体流工作。例如RTP组件和RTCP组建。Agent通常需要建立一个或多个流的连通性。
每个流的网络特性可能都非常相似。通常需要为另一个组建改变候选者。
每个候选者都与一个叫FOUNDATION的属性相关。当两个候选者相似时,他们由相同的foundation。相同的类型,从相同的主机候选者获得,并且STUN赢相同的协议。否则他们的foundation是不一样的。若一个候选者有
2.6 总结ICE
ICE 检查在特定的环境下执行,高优先级的候选者被率先检查,然后是低优先级。得出结论的一个方法是只要一个媒体流的每个组件都成功完成通信,我们就宣告成功。实际上,这是一个合理的方法。详细的介绍在下面进行提供。然而,如果这个高优先级的连接在建立过程中,若丢了一个包,则会失败,那我们会朝低优先级找。我们不如多花一些时间来继续检查,可能产生更好的后果。然而,更多的是,通过这种规则得出的优先级可能不会得到最好的效果。
所以,ICE指定了agents中得一个作为CONTROLLING AGENT,其他的是CONTROLLED AGENT。controlling agent从所有有效的候选者中找出适用于媒体的一个进行任命。它可以用一下两种方法。用REGULAR NOMINATION和AGGRESSIVE NOMINATION。
在regular nomination中,the controlling agent让检查继续,知道至少一个有效的候选者被找到。然后在这些有效的候选者中挑选,向它任命的候选者对中发送第二次STUN请求
分享到:
相关推荐
使用python脚本进行ICE协议服务测试时,需要用到回调函数等模块,本文档中提供了常用的ICE调用函数,包括:回调函数等使用方法,模拟客户端client调用服务;
该文档是ICE(Interactive Connectivity Establishment)协议资料。
教程包括: 第一部分 Ice综述 第二部分 核心概念 第三部分 高级Ice 第四部分 Ice服务 附录ice各种配置说明
该项目提供了ICE协议的Java实现,该协议可由SIP和XMPP应用程序使用。 该项目还提供了套接字共享等功能,并支持Pseudo TCP。 ice4j由社区维护。 使用Jitsi的进行问题和讨论。 谢谢 该项目的工作由慷慨资助。 谢谢!
ICE学习资料ICE学习资料ICE学习资料ICE学习资料ICE学习资料ICE学习资料ICE学习资料ICE学习资料ICE学习资料
里面有关于ice的教程以及ice中文版的手册,对ice的安装运行等都有很大的帮助,费尽了千辛万苦找来的资料。
ZeroC Ice 3.7 手册 Ice(Internet Communications Engine)是ZeroC公司的杰作,继承了CORBA的血统,是新一代的面向对象的分布式系统中间件。Ice是RPC通讯领域里最稳定、强大、高性能、跨平台、多语言支持的老牌开源...
matlab ice.fig 函数源代码
冈萨雷斯数字图像处理matlab版源码ice源码
ICE中间件技术的详细教程,包含ice的开发基础,服务协议等,是初学ICE常用的工具书
ICE-3.7.4 最新安装文件msi文件,windows版 ICE常见报错 Exception in thread Ice.ConnectionRefusedException error = 0 at IceInternal.Network.doFinishConnect(Network.java:417) at IceInternal....
ice demo是很好的学习ice的东西,ice是一个很好的分布式的网络通讯中间件,很好的支持跨平台等各种功能。 ice demo是很好的学习ice的东西,ice是一个很好的分布式的网络通讯中间件,很好的支持跨平台等各种功能。 ...
NISEC讲座系列之---ICE网络编程 利用ICE通信中间件构建分布式应用程序开发框架 1.什么是ICE? ICE,夏天我最容易想的是冰激淋 : -- ) 在这里我们要讲的可不是冰激淋,而是...支持SSL协议(要使用此协议必须装OPENSSL开发包)
ice中间件是一个和CORBA同样强大却摒除了CORBA的缺陷的...ICE协议定义了客户和服务器通信的规则。本文使用Pi演算描述分析ICE协议, 从交互过程和协议实体两方面对协议进行了刻画, 揭示其并发、 分布的对象计算特征。
Ice Ice-3.7.0 linux windows mac os docker java js python ruby source Download Ice 3.7 Version: 3.7.0 - July 21, 2017 You are licensing Ice under GPLv2 unless you purchase a commercial license.
第 1 章引言 第 2 章 Ice 综述 第 3 章 Hello World 应用 ...第 18 章 Ice 协议 第 19 章 Ice 的 PHP 扩展 第 20 章 IcePack 第 21 章 Freeze 第 23 章 IceSSL 第 24 章 Glacier 第 25 章 IceBox
Ice通信框架简介;Ice通信框架简介;Ice通信框架简介
#配置服务端使用协议和所用端口,详细的配置大家可以看相关资料,这里不做过多解释了 Hello.Endpoints=default -p 10000 #如果num 被设成大于零的值,Ice 应用将针对连接中的某些异常情况,打印出警告消息。缺省值是...
ice源码(Ice-3.4.1.tar.gz),源码,包括java,c++,perl,直接下载解压即可查看源码内容。可分析实现细节。绝对真实。
Ice 是一种面向对象的中间件平台。从根本上说,这意味着Ice 为构建面 向对象的客户-服务器应用提供了工具、API 和库支持。Ice 应用适合在异 种环境中使用:客户和服务器可以用不同的编程语言编写,可以运行在不 同...