我知道需要一个 STUN/ICE/TURN 服务器来查找参与 WebRTC 通信的对等方的 IP 地址。但是,即使在找到 IP 之后,对等方实际上如何在没有打开任何端口的情况下独立地相互通信?
如果您建立一个网站,您通常必须打开服务器上的端 Eloquent 能让其他人访问您的网站。 WebRTC 中发生的我不理解的魔法是什么?
最佳答案
有几种策略可以做到这一点:一种可能是客户端通过 UPnP 显式打开一个端口。 .我不确定当前是否有任何 WebRTC 客户端这样做,但在一般网络中,这是可能的。
否则,STUN 服务器会启动。有几个 hole punching它可以尝试的技术;阅读前面链接的文章了解血腥细节。简而言之,防火墙通常会为传出流量打开一个端口(因为它需要接收响应),因此通过建立与已知目标的传出连接,然后记下打开的端口,可以打开一个端口.
即便如此,TURN 服务器也是必要的。这个服务器可以从两个对等点公开访问,即使两个对等点都看不到对方。然后,TURN 服务器将充当两者之间的中继。这在某种程度上否定了 P2P 协议(protocol)的意义,但在一定比例的情况下是必要的(估计范围约为 10%-20%)。
关于networking - 如果没有打开端口,WebRTC 对等点如何相互连接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29794964/