交互式连接建立 (ICE)
先决条件 - 网络地址转换 (NAT)
什么是冰?
交互式连接建立 (ICE) 用于 Internet 上的两个节点必须尽可能直接通信的问题,但 NAT 和防火墙的存在使节点之间难以相互通信。它是一种网络技术,它利用 STUN(用于 NAT 的会话遍历实用程序)和 TURN(使用 NAT 周围的中继进行遍历)在两个节点之间建立尽可能直接的连接。
它是如何工作的 ?
要了解 ICE 的工作原理,我们需要了解 STUN 协议及其扩展 TURN 协议的工作原理。
- STUN(用于 NAT 的会话遍历实用程序):
对于具有本地地址的NAT下的端点,本地网络之外的其他端点无法访问,因此无法建立连接。发生这种情况时,端点可以从 STUN 服务器请求它的公共 IP 地址。其他端点可以使用这个可公开访问的 IP 来建立连接。但是当端点处于对称 NAT 下时,这种情况会失败,这在大多数实际情况中都会发生。这就是 TURN 服务器出现的地方。 - TURN(使用 NAT 周围的中继进行遍历):
TURN server 顾名思义就是作为中继服务器或者中间服务器来交换数据。当对称 NAT 下的任何端点可以联系公共互联网上的 TURN 服务器以建立连接时,该端点称为 TURN 客户端。使用 TURN 服务器的缺点是在整个会话时间跨度内都需要它,而 STUN 服务器在建立连接后不再需要。因此在 ICE 技术中 STUN 被用作默认值。
ICE 是使用 STUN 和 TURN 协议建立连接的技术。开始时,端点不知道它们自己的网络拓扑,无论它们是在单个 NAT 下还是在多个级别的 NAT 下以及 NAT 的类型,ICE 让端点使用 STUN 服务器发现这一点,它们可以通过该服务器找到路径建立一个直接连接。如果是,则建立连接,否则使用 TURN 服务器作为中继在端点之间交换信息。
ICE 要求默认使用 STUN,因为 TURN 通信需要持续使用 TURN 服务器,连接不是点对点的,并且使用了更多的服务器资源。 ICE 由 Internet 工程任务组开发为 RFC 8445。
此协议用于以下情况:
- (SIP) 会话发起协议
- (VoIP) 互联网协议语音
- 点对点通信
- 网络RTC
- 电话会议