为什么WebRTC需要远程对等点的本地IP?

pro*_*ngs 4 webrtc

当我们向某个 STUN 服务器发送请求时,我们会收到外部服务器看到的 IP:端口对。然后,我们将浏览器绑定的本地 IP:端口对包含在这个“可能连接目标的概率列表”中,并通过 WebRTC 网络将其发送到远程客户端(实际上,我从来没有完全理解 - 在哪一步或用户 ID 在哪里解析为它的 IP,并且从哪里知道远程客户端 IP...?)。

但是为什么我们需要本地IP地址和端口呢?好吧,对于端口,我的解释是,一些 NAT 防火墙可以配置为将相同的本地端口放置到外部请求(仅重写 IP),然后类似的信息可能有用,但是这里需要 IP 吗?

Som*_*one 5

浏览器看到的本地 IP 很可能是一个可行的连接选项。这就是它被包括在内的原因。

评论中提到的链接实际上显示了为连接生成的所有 ICE 候选者。您的本地 IP 地址是最基本的地址,由浏览器自行添加。这是当您在没有 STUN 的情况下运行 webRTC 时得到的唯一候选。但该地址很可能是真实的 IP 或私有且在本地网络上可行的 IP。现在,如果它位于 NAT 后面,则浏览器无法知道路由器的外部 IP - 这是 STUN 检测到的连接选项,同时在 NAT 中戳一个洞以进行连接。(如果这不起作用,还有 TURN 服务器,它们也会显示为具有自己 IP 的 ICE 候选服务器。)

ICE 候选者本质上是另一端可能连接到的潜在地址列表。任何可检测到或可能起作用的内容都包括在内,而不仅仅是 STUN 响应或本地 IP。然后另一端使用这些来尝试建立实际的媒体/数据 (RTP) 连接。

我不确定“用户 ID”是什么意思,但这些 ICE 候选者必须通过单独的方法或信令层提供给其他客户端。这就是实际连接的方式——具体如何完成并没有被定义为 webRTC 的一部分,而且可以是任何东西。流行的传输层是 websocket。本质上,在 webRTC 发挥作用之前,两个客户端必须已经以某种形式进行通信。