Skip to main content

13. 生成候选地址结束指示 (Generating an End-of-Candidates Indication)

一旦与特定数据流相关联的ICE会话的所有候选地址收集完成或过期,代理将为该会话生成"候选地址结束" (end-of-candidates) 指示,并通过信令通道将其传递给远程代理。尽管指示的确切形式取决于使用协议,但指示必须 (MUST) 指定一代 (用户名片段和密码组合),以便代理可以将候选地址结束指示与特定ICE会话相关联。指示可以通过以下方式传递:

  • 如果在完成相关冗余测试后,要添加候选地址对的检查列表已包含最大数量的候选地址对 (根据 [RFC8445] 默认为100),则代理应该 (SHOULD) 丢弃处于失败状态的任何候选地址对以为新候选地址对腾出空间。如果没有这样的候选地址对,代理应该 (SHOULD) 丢弃优先级低于新候选地址对的候选地址对,以便为新候选地址对腾出空间,直到候选地址对的数量等于最大候选地址对数量。此处理与 [RFC8445] 的 第6.1.2.5节 一致。
  • 作为发起请求的一部分 (这通常是半逐步传递的初始ICE描述的情况)
  • 与代理可以为流发送的最后一个候选地址一起
  • 作为独立通知 (例如,在对服务器的STUN绑定请求或TURN分配请求超时后,代理不再主动收集候选地址)

及时传递候选地址结束指示对于避免歧义和加快ICE处理的结论非常重要。特别是:

  • 受控的 (controlled) Trickle ICE代理应该 (SHOULD) 在完成数据流的收集后传递候选地址结束指示,除非ICE处理在代理有机会完成收集之前终止。
  • 控制 (controlling) 代理可以 (MAY) 在为所有流传递候选地址结束指示之前结束ICE处理。但是,建议 (RECOMMENDED) 控制代理尽可能传递候选地址结束指示,以保持一致性并使中间盒和受控代理了解ICE处理状态的最新信息。

在逐步传递期间传递候选地址结束指示时 (而不是作为初始ICE描述或其响应的一部分),使用协议有责任定义将指示与一个或多个特定数据流关联的方法。

如果代理确定收集已持续超过可接受的时间段,则代理也可以 (MAY) 选择在候选地址收集实际完成之前生成候选地址结束指示。但是,代理禁止 (MUST NOT) 在传递候选地址结束指示后传递任何更多候选地址。

执行半逐步传递时,除非代理计划可能逐步传递其他候选地址 (例如,如果远程方被证明支持Trickle ICE),否则代理应该 (SHOULD) 将候选地址结束指示与其初始ICE描述一起传递。

在代理传递候选地址结束指示后,它将如第8节所述更新相应检查列表的状态。在那之后,代理禁止 (MUST NOT) 在此ICE会话中逐步传递任何新候选地址。因此,仅通过ICE重启才能向协商添加新候选地址 (见第15节)。

本规范不会覆盖用于结束ICE处理的常规ICE语义。因此,即使传递了候选地址结束指示,代理仍然需要经历候选地址对提名。此外,如果已为组件和数据流提名了候选地址对,即使尚未收到所有流的候选地址结束指示,ICE处理也可以 (MAY) 仍然结束。在所有情况下,代理禁止 (MUST NOT) 在如 [RFC8445] 的 第8.1.1节 所述提名候选地址对后在ICE会话中逐步传递任何新候选地址。