rfc5245-概要翻译2
来源:互联网 发布:淘宝the mountain 编辑:程序博客网 时间:2024/06/06 02:01
对此rfc的翻译正确性不做任何保证。按照它而导致的任何问题后果自负。转载请注明原地址。
2.3. 候选排序
由于算法搜索所有的候选对,所以不管候选地址是按什么顺序加入的,可用对(working pair)如果有的话,肯定能发现。为了更快更好的搜索,我们用了特殊算法对候选排序。排序后的候选对结果列表叫做检查表(CHECK LIST)。4.1.2介绍了算法,在这里先介绍下思路:
1每个agent给出自己候选地址的数字优先级,然后连候选地址一起发给对端。
2远程和本地的优先级混合,这样每个agent的候选对顺序是一样的。
当L和R在NAT后面时,思路2很重要。因为通常外网不许向NAT内网发数据,除非内网agent向外网发数据。所以ICE直到各agent从各自的NAT后发送check,都没法成功检测。
agent通过定期为列表中下个候选对发送STUN request来完成检测。这过程叫普通检测( ORDINARY CHECKS)。
总之,相同类型的候选对获得相似的优先级,更多直连路径的优先级高于非直连。按照上面的原则,agnet在调整算法时有很多自由度。
2.4. 冻结候选
上面只描述了agent希望为一个媒体会话获得一个组件(COMPONENT)的情况。然而媒体流中每一块要一个传输层地址,所以一个媒体流要多个组件。比如RTP和RCTP。
每个组件的网络状况类似(比如RTP和RCTP的IP地址是相同的)。因此常常可以通过一个组件获得另个组件的最佳候选地址。ICE靠"冻结候选"机制实现它。
每个候选地址有个关联属性"基础"(FOUNDATION)。当两个候选地址类似(类型相同、主机地址相同、STUN服务器协议相同)时基础是一样的。候选地址对也有"基础",它由相关的两个候选地址的"基础"组成。开始,只有独立"基础"的候选对被测试,其他(重复"基础")的候选对只有在刚才候选对检查成功时再检查(先被“冻结”了)。这样避免了检查那些看上去会成功但实际失败的候选对。
尽管我们单独讨论了“冻结”,但实际上这是作为ICE候选排序的一部分。
2.5检查的安全性
为避免媒体流被劫持到别的地址,STUN的连接测试中夹带消息认证码(MAC)(密钥交换在信令中)。MAC确保消息正确和来源可靠。进一步,如果SIP使用ICE,而且分叉了,ICE在每个分叉上的交互是独立的。信令上的密钥交互帮助了ICE和各接收者的信息交互。
2.6ICE结束
ICE根据候选对的优先级来检查。一种实现方法是当一个候选对检查成功时便宣布胜利。的确这是个合理的算法。但是,一旦丢包,一个高优先级的检查可能会花更多时间。所以让ICE多运行会会比较好。更本质的问题是,上面的优先级高的也许不是最优解。可以用往返时间RTT来证明。所以ICE叫一个agent控制端,另个被控端。控制端决定用什么候选地址。有两种实现方法:经常提名或进取型提名( REGULAR NOMINATION or AGGRESSIVE NOMINATION)。
经常提名时,控制端一直检查,直到至少发现一个有效候选对。然后控制端选一个未提名的候选对,在上面发送第二个STUN Request,不过在这请求上打上个标记告诉对方这个对被提名了。如下所示:
L R
- -
STUN request -> \ L's
<- STUN response / check
<- STUN request \ R's
STUN response -> / check
STUN request + flag -> \ L's
<- STUN response / check
Figure 4: Regular Nomination
当最后打标记的STUN事物完成了,双方都取消对此地址对的检测,然后就用它传媒体流。这个地址对叫选择对(SELECTED PAIR)。
进取型提名时,控制端在每个STUN request上打上flag。这意味着一旦第一个检查成功,ICE流程结束。选择的对也就是最高优先级的。进取型提名更快但灵活性弱。
L R
- -
STUN request + flag -> \ L's
<- STUN response / check
<- STUN request \ R's
STUN response -> / check
Figure 5: Aggressive Nomination
当媒体流建立时,如果媒体流中的候选地址(m行和c行)(默认地址)和ICE的选择对不同时,控制端发送更新请求。
当ICE结束时,双方都通过发更新请求来重启。
2.7简易实现
为了用ICE,所有agent必须要支持它。然而有些agent在公网上。为了这些agent,ICE定义了简易实现。简易实现不收集候选地址,它只包括主机地址。简易agent不发出连接检查,但会对连接检查做响应。当简易实现和完全实现互联时,完全实现做控制端,另个做被控端。两个简易实现互联时,没有事发生。
附录A表示什么时候简易实现是恰当的。
简易实现只是个过度,如果可能最好都完全实现。
3术语
(略)
4发送初始offer
(待续)
- rfc5245-概要翻译2
- rfc5245--概要翻译1
- rfc5245概要翻译--目录
- rfc5245概要翻译-3
- rfc5245--概要翻译
- rfc5245翻译--4
- ICE-RFC5245摘要
- webrtc ICE rfc5245笔记
- C2 开发环境搭建 README 概要翻译
- Netty研究(一、官网文档概要介绍翻译)
- Node.js v5.3.0个人翻译(一) --概要
- 《LoRaWAN网络服务器演示:概要描述(R1.0)》部分翻译
- Struts 2 概要说明
- X11协议概要 2
- struts1.2概要
- Struts 2 概要说明
- WWDC2013_218 内容概要 ( 2 )
- 实验2 概要设计
- vs开发的程序在xp下显示 xxx.exe不是有效的win32程序问题解决
- java设计模式之单例模式
- Java 并发
- tiny6410裸机实验第10章--------------PWM定时器(原理及代码)
- 无法加载协定为“ServiceReference1.xxxxxx”的终结点配置部分,因为找到了该协定的多个终结点配置。请按名称指示首选的终结点配置部分。(转)
- rfc5245-概要翻译2
- android 的manageSpaceActivity引发的血案
- 中国移动SDK计费开发手册(转载)
- crash部分命令用法
- UVa:11019 Matrix Matcher(AC自动机)
- pthread编程基础
- Spring Batch 入门例子
- 删除某字段的所有关系以及该字段
- JS中的constructor与prototype【转】