Trickle ICE

Trickle ICE 是一种优化 WebRTC 连接建立过程的技术,它可以提供更快的连接速度和更好的连接质量。

参考网站: Trickle ICE

这个网站是用来测试 WebRTC 中的 trickle ICE功能的,trickle ICE 是一种技术(ICE协议),它允许 WebRTC 应用更快的建立连接,同时还能提供更好的连接。ICE 代表ICE协议,用于允许 WebRTC 客户端在各种网络环境中找到最佳的路径来连接到其他客户端。

在标准的 ICE 流程汇总,客户端必须收集该设备所有可能的候选者,也就是可能的连接路径,然后在尝试建立连接之前将这些后选择发送给其他客户端,这个过程可能会导致连接建立的延迟,因为客户端必须等待所有的候选者都被收集和发送。

Trickle ICE 通过改变这个过程来解决问题,在 Trickle ICE中,客户端可以立即开始收集候选者,并且一旦找到一个候选者,就立即将其发送给其他客户端。这意味着客户端可以在手机所有候选者之前开始尝试连接,从而大大减少了建立连接的时间。

候选者

候选者是指可能用于两个 WebRTC 端点之间通信的网络路径,它包含了一些信息,如:

  • IP 地址(公共或者私有)
  • 端口号
  • 传输协议(通常是 UDP 或 TCP)
  • 候选者类型
    • 它可能是主机候选者
    • 服务器发射(srflx)候选者
    • 对等反射(prflx)候选者
    • 中继(relay)候选者

这些候选者一般通过 WebRTC 应用和 STUN/TURN 服务器的帮助来收集的,然后这些候选者被发送到远程端点,以便在连接建立过程中进行互联性检查。这个过程的目标是找到最佳的网络路径,以便在两个 WebRTC 端点之间建立稳定、高效的连接。

通过这个站点,可以判断设备支持那种连接方式,例如 SUTN 和 TURN。通过添加 STUN 和 TURN 服务器观察设备是否成功收集到类型为srflx(表示 STUN)和 relay(表示 TURN)的候选者,如果可以则说明你的设备可以使用对应的服务器类型进行 WebRTC 连接。

如果设备检测出可以进行 STUN 连接,那么就意味着设备可以使用 STUN 服务器来发现其公共 IP 地址和端口,从而可以通过 WebRTC 与 互联网上另一个也支持 STUN 的设备建立点对点连接。

结果字段

  • Time: 收集候选者所消耗的时间
  • Type:
    • host:表示候选者是设备的IP地址和端口
    • srflx:表示候选者是根据 STUN 服务器反射得到的公共IP地址和端口
    • relay:表示候选者是通过 TURN 服务器中继的
  • Foundation:用于优化ICE连接的标识符,具有相同 foundation的候选者将被视为一类,可以一起进行连接尝试
  • Protocol:候选者使用的传输协议,通常是UDP或TCP
  • Address:候选者的IP地址
  • Port:候选者的端口号
  • Priority:候选者的优先级,在ICE连接中,优先级高的候选者将被优先考虑
  • URL(if presend):如果候选者是通过STUN或TURN服务器得到的,这是服务器的URL。
  • relayProtocol (if present):如果候选者是通过TURN服务器中继的,这是中继使用的协议。

免费 STUN 服务器

stun.syncthing.net
stun.qq.com
stun.miwifi.com
stun.newtocktech.com
stun:stun1.l.google.com:19302
stun:stun2.l.google.com:19302
stun:stun3.l.google.com:19302
stun:stun4.l.google.com:19302
stun:23.21.150.121
stun:stun01.sipphone.com
stun:stun.ekiga.net
stun:stun.fwdnet.net
stun:stun.ideasip.com
stun:stun.iptel.org
stun:stun.rixtelecom.se
stun:stun.schlund.de
stun:stunserver.org
stun:stun.softjoys.com
stun:stun.voiparound.com
stun:stun.voipbuster.com
stun:stun.voipstunt.com
stun:stun.voxgratia.org
stun:stun.xten.com

WebRTC Chrome 状态查看

chrome://webrtc-internals/
image.png

超时错误问题

如果你在 ICE 候选者列表中看到类型为 ‘srflx’(服务器反射)的候选者,那通常意味着你的设备已经成功地通过 STUN 服务器获取到了公网 IP 地址,并且理论上可以进行 WebRTC 的点对点连接。

然而,“STUN allocate request timed out” 的错误提示表明在某个阶段,STUN 服务器的请求出现了超时,这可能是由于各种原因,如网络波动、STUN 服务器暂时不可用、或者 STUN 服务器和你的设备之间的连接问题。

要记住的一点是,即使设备能够获取到公网 IP 地址(即 ‘srflx’ 候选者),在实际的点对点连接过程中仍然可能会遇到问题。例如,尽管设备有公网 IP 地址,但如果设备后面的 NAT 是对称型 NAT,那么直接的点对点连接仍然可能无法建立。或者,即使设备已经获取到了公网 IP 地址,但在后续的连接过程中,由于网络问题或者其他问题,导致 STUN 请求超时。

如果你在 ICE 候选列表中获取到了类型为 ‘srflx’ 的候选者,那应该表示你的设备成功地通过了 STUN 服务器获取到了公网 IP 地址。但是,你提到的 “STUN allocate request timed out” 错误提示可能是由于以下原因引起的:

  1. 并发请求问题:可能在进行多个并发的 STUN 请求时,某些请求成功,某些请求超时,导致同时出现 ‘srflx’ 候选者和 “STUN allocate request timed out” 错误。

  2. 时序问题:在某些情况下,可能在一开始 STUN 请求超时,然后再次尝试时成功获取到了 ‘srflx’ 候选者。这样在日志中就会同时出现这两种情况。

  3. 网络问题:网络延迟或者网络不稳定也可能导致 STUN 请求超时,但这并不影响你的设备在其他时间点成功地获取到 ‘srflx’ 候选者。

  4. STUN/TURN 服务器问题:在使用同一个 STUN/TURN 服务器时,STUN 部分可能会出现超时,但并不影响获取到 ‘srflx’ 候选者。

总的来说,获取到 ‘srflx’ 候选者和 “STUN allocate request timed out” 错误提示的并存,可能涉及到复杂的网络状况和请求时序,需要具体问题具体分析。你可以检查一下详细的日志信息,或者尝试在不同的网络环境下复现问题,以获取更多的信息。