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

(待续)






0 0
原创粉丝点击