Skip to main content

12. 将逐步传递的候选地址对插入检查列表 (Inserting Trickled Candidate Pairs into a Checklist)

在本地代理逐步传递了候选地址并从该本地候选地址形成了候选地址对 (第9节) 之后,或者在远程代理接收到逐步传递的候选地址并从该远程候选地址形成了候选地址对 (第11节) 之后,Trickle ICE代理将新候选地址对添加到本节中定义的检查列表中。

为了帮助理解本节中定义的程序,请考虑代理中所有检查列表的以下表格表示 (请注意,最初对于其中一个基础,即f5,没有候选地址对):

表1: 检查列表状态示例f1f2f3f4f5
s1 (Audio.RTP)FFF
s2 (Audio.RTCP)FFFF
s3 (Video.RTP)F
s4 (Video.RTCP)F

表中的每一行代表给定数据流的一个组件 (例如,s1和s2可能是音频的RTP和RTP控制协议 (RTCP) 组件),因此是检查列表集中的单个检查列表。每一列代表一个基础。每个单元格代表一个候选地址对。在本节显示的表格中,"F"代表"冻结 (frozen)","W"代表"等待 (waiting)","S"代表"成功 (succeeded)"; 此外,"^^"用于标注新添加的候选地址对。

当代理开始ICE处理时,根据 [RFC8445] 的 第6.1.2.6节,对于每个基础,它将解冻具有最低组件ID的候选地址对,如果组件ID相等,则解冻具有最高优先级的候选地址对 (这是每列中最顶部的候选地址对)。此初始状态如下表所示。

表2: 初始检查列表状态f1f2f3f4f5
s1 (Audio.RTP)WWW
s2 (Audio.RTCP)FFFW
s3 (Video.RTP)F
s4 (Video.RTCP)F

然后,随着检查的进行 (见 [RFC8445] 的 第7.2.5.4节),对于进入成功状态的每个候选地址对 (此处用"S"表示),代理将解冻具有相同基础的所有数据流的所有候选地址对 (例如,如果第1列第1行中的候选地址对成功,则代理将解冻第1列第2、3和4行中的候选地址对)。

表3: 具有成功候选地址对的检查列表状态f1f2f3f4f5
s1 (Audio.RTP)SWW
s2 (Audio.RTCP)WFFW
s3 (Video.RTP)W
s4 (Video.RTCP)W

Trickle ICE保留所有这些规则,因为它们适用于"静态"检查列表集。这意味着,如果Trickle ICE代理在所有候选地址对都已存在的情况下开始连接性检查,则候选地址对状态更改的方式与常规ICE代理无法区分。

当然,Trickle ICE的主要区别在于检查列表集可以动态更新,因为候选地址可以在连接性检查开始后到达。发生这种情况时,代理将按如下所述设置新形成的候选地址对的状态。

规则1: 如果新形成的候选地址对对于此基础的任何候选地址对具有最低的组件ID,并且如果组件ID相等,则具有最高的优先级 (即,如果它是列中最顶部的候选地址对),则将状态设置为等待 (Waiting)。例如,如果新形成的候选地址对放置在第5列第1行,则会出现这种情况。此规则与 [RFC8445] 的 第6.1.2.6节 一致。

表4: 具有新形成的候选地址对的检查列表状态,规则1f1f2f3f4f5
s1 (Audio.RTP)SWW^W^
s2 (Audio.RTCP)WFFW
s3 (Video.RTP)W
s4 (Video.RTCP)W

规则2: 如果此基础至少有一个候选地址对处于成功状态,则将状态设置为等待 (Waiting)。例如,如果第5列第1行中的候选地址对成功并且新形成的候选地址对放置在第5列第2行,则会出现这种情况。此规则与 [RFC8445] 的 第7.2.5.3.3节 一致。

表5: 具有新形成的候选地址对的检查列表状态,规则2f1f2f3f4f5
s1 (Audio.RTP)SWWS
s2 (Audio.RTCP)WFFW^W^
s3 (Video.RTP)W
s4 (Video.RTCP)W

规则3: 在所有其他情况下,将状态设置为冻结 (Frozen)。例如,如果新形成的候选地址对放置在第3列第3行,则会出现这种情况。

表6: 具有新形成的候选地址对的检查列表状态,规则3f1f2f3f4f5
s1 (Audio.RTP)SWWS
s2 (Audio.RTCP)WFFWW
s3 (Video.RTP)W^F^
s4 (Video.RTCP)W