WebRTC使用TCP还是UDP?

onm*_*133 64 udp tcp channel transport webrtc

这听起来像一个非常基本的问题,但我需要确认

  1. WebRTC是否使用TCP或UDP作为其对等传输?我怎么知道 ?
  2. 我看到有可靠性模式和DTLS协议,它们如何影响?
  3. Media和DataChannel的传输方式是否相同?
  4. 如何在TCP和UDP之间切换?

我问这个是因为我知道浏览器对并行连接的数量有限制(我认为他们谈论TCP),并且UDP连接可能不受限制.

tom*_*tom 92

  1. 它可以使用任何一个.默认情况下,优先级为UDP,但根据连接它的对等体之间的防火墙,它可能只能与TCP连接.您可以使用Wireshark捕获数据包并验证是否正在使用TCP或UDP.在Chrome中,您还可以查看所选候选人(googActiveConnection)的详细信息chrome://webrtc-internals.

  2. "可靠性模式"可能是指DataChannel的可靠性模式,可配置为以可靠或不可靠的模式运行.DTLS是指当前可选但很快将是交换加密密钥的默认方法(另一种不推荐的模式是SDES).Firefox仅支持DTLS,因此对于浏览器互操作,您目前需要在Chrome中启用它.

  3. RTCPeerConnection(媒体)将使用TCP或UDP,而DataChannel使用SCTP.Firefox使用的SCTP实现是在UDP之上实现的:https://code.google.com/p/sctp-refimpl/.

  4. 在添加TCP或UDP ICE候选之前,可以过滤掉它们addIceCandidate.一般来说,你不应该试图强制使用传输,因为WebRTC只会"做正确的事情".浏览器不限制WebRTC使用的TCP连接数超出RTCPeerConnection或DataChannel的任何限制(即,如果您可以拥有10个PeerConnections,则每个都可以使用TCP而没有任何问题).

  • 很好的答案!从 Chrome 31 开始,数据通道默认使用 SCTP。 (2认同)
  • 对于未来的用户:在 1. `chrome://webrtc-internals` 中,您必须选择“Read Stats From: Legacy” (2认同)