跳到主要内容

1. 简介 (Introduction)

RFC 3264 [RFC3264] 定义了为建立多媒体会话而交换 Session Description Protocol (SDP) 消息 [RFC4566] 的两阶段过程. 这种 offer/answer 机制由 Session Initiation Protocol (SIP) [RFC3261] 等协议使用.

使用 offer/answer 的协议很难穿越 Network Address Translator (NAT) 工作. 由于这些协议的目的在于建立媒体分组流, 它们往往会在消息中携带媒体源和媒体接收端的 IP 地址与端口, 而这在穿越 NAT 时已知会带来问题 [RFC3235]. 这些协议还试图在参与者之间直接创建媒体流, 使二者之间没有应用层中介. 这样做是为了降低媒体时延, 减少丢包, 并降低部署应用的运营成本. 然而, 通过 NAT 实现这一点很困难. 对其中原因的完整讨论超出了本规范的范围.

已经定义了大量方案, 用于允许这些协议穿越 NAT 工作. 这些方案包括 Application Layer Gateway (ALG), Middlebox Control Protocol [RFC3303], 原始 Simple Traversal of UDP Through NAT (STUN) [RFC3489] 规范, Realm Specific IP [RFC3102] [RFC3103], 以及让这些方案生效所需的会话描述扩展, 例如用于 Real Time Control Protocol (RTCP) [RFC3605] 的 Session Description Protocol (SDP) [RFC4566] 属性. 遗憾的是, 这些技术各有优缺点, 使每种技术在某些网络拓扑中是最优的, 但在其他拓扑中却是糟糕选择. 结果是, 管理员和实现者不得不对其方案将要部署的网络拓扑作出假设. 这会给系统引入复杂性和脆弱性. 所需要的是一种足够灵活的单一方案, 能够在所有情形下良好工作.

本规范定义 Interactive Connectivity Establishment (ICE), 作为一种用于基于 UDP 的媒体流的 NAT 穿越技术; 这些媒体流由 offer/answer 模型建立, 但 ICE 也可以扩展为处理其他传输协议, 例如 TCP [ICE-TCP]. ICE 是 offer/answer 模型的扩展, 其工作方式是在 SDP offer 和 answer 中包含多个 IP 地址和端口, 然后通过对等连接检查 (connectivity checks) 测试它们的连通性. SDP 中包含的 IP 地址和端口以及连接检查使用修订后的 STUN 规范 [RFC5389] 完成, 该规范现已更名为 Session Traversal Utilities for NAT. 新名称和新规范反映了 STUN 的新角色: 它是与其他 NAT 穿越技术, 即 ICE, 配合使用的工具, 而不再像原始 STUN 规范那样是独立的 NAT 穿越方案. ICE 还使用 Traversal Using Relays around NAT (TURN) [RFC5766], 这是 STUN 的一个扩展. 由于 ICE 会为每个媒体流交换多个 IP 地址和端口, 它也支持多宿主和双栈主机的地址选择; 因此, 本规范废弃 RFC 4091 [RFC4091] 和 [RFC4092].