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的情况下都可以正常使用。在设置生产应用程序时,最好决定是否值得使用TURN服务器。
ICE
现在我们可以通过ICE学习如何将STUN和TURN统一起来。它利用STUN和TURN来提供成功的点对点连接。ICE通过按排序顺序查找和测试一系列适用于两个用户的地址。
当ICE开始时,它对每个用户的网络一无所知。ICE的过程将逐步经过一系列阶段来发现每个客户端的网络设置,使用不同的技术。主要任务是找出关于每个网络的足够信息以建立成功的连接。
STUN和TURN用于查找每个ICE候选者。ICE将使用STUN服务器来查找外部IP。如果连接失败,它将尝试使用TURN服务器。当浏览器找到一个新的ICE候选者时,它会通知客户端应用程序。然后应用程序通过信令通道发送ICE候选者。当找到足够的地址并进行测试后,连接将建立起来。