WebRTC - 寻找路由
为了连接到另一个用户,您应该在您自己的网络和其他用户的网络周围找到一条畅通的路径。但您使用的网络可能有多个级别的访问控制,以避免安全问题。有几种技术可用于找到通往另一个用户的畅通路由 −
- STUN(NAT 的会话遍历实用程序)
- TURN(使用中继绕过 NAT 进行遍历)
- ICE(交互式连接建立)
要了解它们的工作原理,让我们看看典型的 WebRTC 连接的布局是什么样的 −
第一步是找出您自己的 IP 地址。但是当您的 IP 地址位于网络路由器后面时,就会出现问题。为了提高安全性并允许多个用户使用相同的 IP 地址,路由器会隐藏您自己的网络地址并将其替换为另一个。当您与公共网络之间有多个 IP 地址时,这种情况很常见。
STUN
STUN 有助于识别每个用户并找到他们之间的良好连接。首先,它向启用 STUN 协议的服务器发出请求。然后服务器发回客户端的 IP 地址。客户端现在可以使用此 IP 地址来识别自己。
所以基本上有两个步骤 −
要使用此协议,您需要连接到启用 STUN 的服务器。最棒的是,Chrome 和 Firefox 提供了开箱即用的默认服务器供您测试。
对于生产环境中的应用程序,您需要部署自己的 STUN 和 TURN 服务器供您的客户端使用。目前有几种开源服务提供此功能。
TURN
有时防火墙不允许任何基于 STUN 的流量流向其他用户。例如在某些企业 NAT 中。这时 TURN 就成为与其他用户连接的不同方法。
TURN 的工作原理是在客户端之间添加中继。此中继代表用户充当对等连接。然后,用户从 TURN 服务器获取其数据。然后,TURN 服务器将为每个用户获取并重定向发送给它的每个数据包。这就是为什么它是在没有其他选择时的最后一种手段。
大多数情况下,用户没有 TURN 也可以正常工作。在设置生产应用程序时,最好先确定使用 TURN 服务器的成本是否值得。
ICE
现在我们可以了解 STUN 和 TURN 如何通过 ICE 结合在一起。它利用 STUN 和 TURN 提供成功的对等连接。ICE 会按排序顺序查找并测试适用于两个用户的一系列地址。
当 ICE 启动时,它对每个用户的网络一无所知。ICE 的过程将逐步经历一系列阶段,以发现每个客户端的网络是如何设置的,并使用不同的技术。主要任务是找出每个网络的足够信息,以便成功建立连接。
STUN 和 TURN 用于查找每个 ICE 候选。ICE 将使用 STUN 服务器查找外部 IP。如果连接失败,它将尝试使用 TURN 服务器。当浏览器找到新的 ICE 候选时,它会通知客户端应用程序。然后,应用程序通过信令通道发送 ICE 候选。当找到并测试了足够的地址后,连接就建立了。