webrtc - WebRTC 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 端口。
推荐阅读
- c# - 我有几个关于异步编程的问题
- c++ - “listPointer->leftPointer->rightPointer = newNodePtr;”是什么意思?做?
- javascript - 提交后重新打开表单弹出窗口
- javascript - Azure 服务总线计划消息“in”绑定未定义
- javascript - 版本 2.0.0+(包括 2.0.5)的速度“淡入”问题
- java - 将函数调用分配给 Kotlin 中的变量
- sqlite - 在 Sqflite 中插入多条记录
- c++ - C++:关于“有效指针和引用”的说明
- java - 线程“JavaFX 应用程序线程”java.lang.IllegalStateException 中的异常:一旦阶段设置为可见,就无法设置样式
- gitlab - Gitlab CI - 完成某个阶段后将自定义标签/徽章添加到管道