Skip to main content

1. Introduction (简介)

在对等端之间建立通信会话的协议通常涉及交换数据源和目的地的IP地址和端口。然而, 当通过网络地址转换器 (Network Address Translator, NAT) [RFC3235] 运行时, 这会带来挑战。这些协议还寻求在参与者之间直接创建数据流, 使它们之间没有应用层中介。这样做是为了减少数据延迟、降低丢包率, 并降低部署应用程序的运营成本。然而, 通过NAT实现这一目标是困难的。对此原因的全面讨论超出了本规范的范围。

已经定义了许多解决方案来允许这些协议通过NAT运行。这些解决方案包括应用层网关 (Application Layer Gateways, ALG)、中间盒控制协议 (Middlebox Control Protocol) [RFC3303]、原始的UDP穿越NAT简单遍历 (Simple Traversal of UDP Through NAT, STUN) 规范 [RFC3489] (注意RFC 3489已被RFC 5389废止), 以及特定领域IP (Realm Specific IP) [RFC3102] [RFC3103], 还有使其工作所需的会话描述扩展, 例如用于实时控制协议 (Real-Time Control Protocol, RTCP) [RFC3605] 的会话描述协议 (Session Description Protocol, SDP) 属性 [RFC4566]。不幸的是, 这些技术都有优缺点, 使得每一种技术在某些网络拓扑中是最优的, 但在其他拓扑中是糟糕的选择。结果是管理员和实现者对其解决方案将部署的网络拓扑做出假设。这给系统引入了复杂性和脆弱性。

本规范将交互式连接建立 (Interactive Connectivity Establishment, ICE) 定义为一种用于基于UDP的数据流的NAT穿越技术 (尽管ICE已经扩展为处理其他传输协议, 例如TCP [RFC6544])。ICE通过交换多个IP地址和端口来工作, 然后通过点对点连通性检查 (peer-to-peer connectivity checks) 测试连通性。IP地址和端口使用ICE特定用法的机制进行交换 (例如, 在Offer/Answer交换中), 连通性检查使用STUN [RFC5389] 执行。ICE还使用了NAT中继穿越 (Traversal Using Relay around NAT, TURN) [RFC5766], 这是STUN的扩展。因为ICE为每个媒体流交换多个IP地址和端口, 它还允许对多宿主主机 (multihomed hosts) 和双栈主机 (dual-stack hosts) 进行地址选择。因此, RFC 5245 [RFC5245] 废止了先前在RFC 4091 [RFC4091] 和RFC 4092 [RFC4092] 中定义的解决方案。

附录B提供了有关设计ICE时所做设计决策的背景信息和动机。