¿WebRTC usa TCP o UDP?

81

Suena como una pregunta muy básica, pero necesito una confirmación

  1. ¿WebRTC usa TCP o UDP como su transporte de igual a igual? Cómo puedo saber ?
  2. Leí que hay modo de confiabilidad y acuerdo DTLS, ¿cómo afectan?
  3. ¿Este transporte es el mismo para Media y DataChannel?
  4. ¿Cómo cambio entre TCP y UDP?

Pregunto esto porque sé que los navegadores tienen un límite en la cantidad de conexiones paralelas (creo que hablan de TCP), y tal vez la conexión UDP no está limitada.

onmyway133
fuente

Respuestas:

110
  1. Puede usar cualquiera de los dos. De forma predeterminada, se da preferencia a UDP, pero dependiendo de los firewalls entre los pares que se conectan, es posible que solo pueda conectarse con TCP. Puede utilizar Wireshark para capturar paquetes y verificar si se está utilizando TCP o UDP. En Chrome, también puede ver detalles sobre el candidato seleccionado ( googActiveConnection) yendo a chrome://webrtc-internals.

  2. El "modo de confiabilidad" probablemente se refiere al modo de confiabilidad del DataChannel , que puede configurarse para ejecutarse en modo confiable o no confiable. DTLS se refiere al método actualmente opcional, pero que pronto será el predeterminado, de intercambio de claves de cifrado (el otro modo obsoleto es SDES). Firefox solo admite DTLS, por lo que para la interoperabilidad del navegador, actualmente deberá habilitarlo en Chrome .

  3. RTCPeerConnection (medios) utilizará TCP o UDP, mientras que DataChannel utiliza SCTP. La implementación de SCTP utilizada por Firefox se implementa sobre UDP: https://code.google.com/p/sctp-refimpl/ .

  4. Es posible filtrar los candidatos ICE TCP o UDP antes de agregarlos con addIceCandidate. Generalmente, no debe intentar forzar el transporte utilizado, ya que WebRTC simplemente "hará lo correcto". El navegador no limita el número de conexiones TCP utilizadas por WebRTC más allá de cualquier límite en RTCPeerConnection o DataChannel (es decir, si puede tener 10 PeerConnections, cada una puede usar TCP sin ningún problema).

tomtheengineer
fuente
1
¡Gran respuesta! Desde Chrome 31, SCTP se utiliza de forma predeterminada para los canales de datos.
Sam Dutton
1
Excelente respuesta. Gracias por las fuentes.
The Dembinski
@ ¿Alguna razón por la que SCTP no es usado por audio / video? ¿No es efectivamente udp con "extras" (actualmente se implementa principalmente sobre udp)
Pavel P
1
Para futuros usuarios: en 1. chrome://webrtc-internals, debe seleccionar "Leer estadísticas de: Legacy"
Thomas Orlita
La razón por la que personalmente hice la pregunta "¿WebRTC usa TCP o UDP" es para ver si era confiable o no? El punto 3 dice, Media usará TCP o UDP, pero DataChannel usará SCTP, por lo que DataChannel debería ser confiable, porque SCTP es confiable (de acuerdo con SCTP RFC ). Esto contradice el punto 2. , así que si alguien pudiera aclarar, ¡genial!
Ben Butterworth