【发布时间】:2019-02-18 15:25:16
【问题描述】:
我了解 STUN 和 TURN 服务器的用途以及它们在 WebRTC 中的用途,但我不完全明白:
如果我作为 WebRTC 客户端已经登录使用 WebRTC 服务,该服务不是已经有我的公共 IP 地址了吗?为什么 STUN 服务器需要第二次找到它?
【问题讨论】:
我了解 STUN 和 TURN 服务器的用途以及它们在 WebRTC 中的用途,但我不完全明白:
如果我作为 WebRTC 客户端已经登录使用 WebRTC 服务,该服务不是已经有我的公共 IP 地址了吗?为什么 STUN 服务器需要第二次找到它?
【问题讨论】:
简答:因为代理和 NAT。
原因很多:
Web 服务器知道您已建立 TCP 连接的公共 IP 地址,但对于随后通过 UDP 进行的 P2P 通信,它不知道您的本地 NAT 将如何映射端口(或它使用的端口)。
您可能位于所有 HTTP/HTTPS 流量都通过代理的网络上。因此,WebRTC 服务只知道您代理的地址。
WebRTC 服务本身可以有一个前端负载平衡器。因此,它只知道负载均衡器的 IP 地址。
尝试进行 WebRTC 会话的两个端点实际上可能位于同一个 NAT 后面。因此,公共 IP 地址没有那么有用。
但主要原因是上面#1 中讨论的端口预测。通过 ICE 或 WebRTC 进行地址交换不仅涉及交换 IP 地址,还涉及 UDP 端口。即使 Web 服务器知道客户端的实际 IP 地址,Web 服务器也无法推断它将用于媒体流量的 UDP 端口。
【讨论】: