如果没有打开端口,WebRTC对等端如何相互连接?

Luc*_*eis 5 networking p2p webrtc

我知道需要一个STUN / ICE / TURN服务器来查找WebRTC通信中涉及的对等方的IP地址。但是,即使在找到IP之后,对等端又如何在不打开任何端口的情况下彼此独立地实际对话呢?

如果您建立一个网站,通常必须打开服务器上的端口以使其他人访问您的网站。我不了解的WebRTC发生了什么魔术?

dec*_*eze 5

有几种策略可以做到这一点:一种可能性是客户端通过UPnP显式打开端口。我不确定当前是否有任何WebRTC客户端这样做,但是在一般网络中这是有可能的。

失败的话,STUN服务器就会启动。它可以尝试多种打孔技术。请阅读上述文章以获取更多详细信息。简而言之,防火墙通常会为出站流量打开一个端口(因为它需要接收响应),因此通过建立到已知目标的出站连接,然后记下已打开的端口,可以打开一个端口。

即使失败,TURN服务器也是必需的。该服务器可以从两个对等方公开访问,即使两个对等方都无法看到对方。然后,TURN服务器将充当两者之间的中继。这在某种程度上抵消了P2P协议的意义,但是在一定比例的情况下是必需的(估计范围在10%-20%左右)。


Dr.*_*ard 5

最初的问题是“是什么/谁创建了套接字?”

  • 在“ICE 收集”期间,浏览器会创建套接字并将它们绑定到本地端口。
  • 无论您是否使用任何眩晕/转弯服务器,在冰收集期间生成的每个候选者都有一个相应的端口打开。
  • 这些端口通常只开放 3000 万,之后它们会被撤销,以避免有人使用旧的和/或欺骗性的候选者进行攻击。这 30mns 没有在任何规范中指定,是浏览器供应商的任意选择。——

下一个问题是“远程对等方如何知道哪些端口是开放的”。

  • 通过 ICE 机制,它会为每个媒体生成潜在的候选对象,并通过您首选的信令通道将它们发送到远程对等方。
  • ICE 候选人(实际上是 SDP 的一行)有一个“类型”。如果此类型为 HOST,则您的候选人是本地候选人,无需使用任何眩晕或转向服务器。如果类型是 SRFLX,那么您已经使用 STUN 服务器添加了本地 IP:port 和公共 IP:port 之间的映射。如果您的类型是 RELAY,则与 TURN 服务器相同。
  • 当然,除非远程对等体在同一个本地网络上,否则使用本地 IP:port HOST 候选将失败。
  • 从浏览器和本地系统的角度来看,无论如何,套接字在本地 IP:PORT 上是打开的。因此,打开套接字并找出远程对等方应该连接到哪个端口以连接到套接字是单独处理的单独问题。

最后一个问题是:“它真的可以在没有 STUN 服务器的情况下工作吗”

  • 很可能不会,除非您在同一个子网中。
  • 统计数据显示 ( http://webrtcstats.com ) 即使使用 STUN 服务器,对于普通大众来说,仍有 8% 的情况会失败。它在企业中更多,您最好拥有高级转向(支持通过 TCP/80 和 TLS/443 的隧道),甚至支持 HTTP 代理的 CONNECT 方法。