Verwendet WebRTC TCP oder UDP?

81

Das klingt nach einer sehr einfachen Frage, aber ich brauche eine Bestätigung

  1. Verwendet WebRTC TCP oder UDP als Peer-to-Peer-Transport? Wie soll ich wissen ?
  2. Ich habe gelesen, dass es Zuverlässigkeitsmodus und DTLS-Vereinbarung gibt. Wie wirken sie sich aus?
  3. Ist dieser Transport für Media und DataChannel gleich?
  4. Wie wechsle ich zwischen TCP und UDP?

Ich frage dies, weil ich weiß, dass die Anzahl der parallelen Verbindungen in Browsern begrenzt ist (ich denke, sie sprechen von TCP), und möglicherweise ist die UDP-Verbindung nicht beschränkt.

onmyway133
quelle

Antworten:

110
  1. Es kann entweder verwenden. Standardmäßig wird UDP bevorzugt, aber abhängig von den Firewalls zwischen den Peers, die eine Verbindung herstellen, kann möglicherweise nur eine Verbindung mit TCP hergestellt werden. Mit Wireshark können Sie Pakete erfassen und überprüfen, ob TCP oder UDP verwendet wird. In Chrome können Sie auch Details zum ausgewählten Kandidaten ( googActiveConnection) anzeigen, indem Sie auf gehen chrome://webrtc-internals.

  2. "Zuverlässigkeitsmodus" bezieht sich wahrscheinlich auf den Zuverlässigkeitsmodus des DataChannel , der so konfiguriert werden kann, dass er im zuverlässigen oder unzuverlässigen Modus ausgeführt wird. DTLS bezieht sich auf die derzeit optionale, aber bald standardmäßige Methode zum Austausch von Verschlüsselungsschlüsseln (der andere veraltete Modus ist SDES). Firefox unterstützt nur DTLS. Für Browser-Interop müssen Sie es derzeit in Chrome aktivieren .

  3. Die RTCPeerConnection (Medien) verwendet TCP oder UDP, während der DataChannel SCTP verwendet. Die von Firefox verwendete SCTP-Implementierung wird über UDP implementiert: https://code.google.com/p/sctp-refimpl/ .

  4. Es ist möglich, TCP- oder UDP-ICE-Kandidaten herauszufiltern, bevor Sie sie hinzufügen addIceCandidate. Im Allgemeinen sollten Sie nicht versuchen, den verwendeten Transport zu erzwingen, da WebRTC nur "das Richtige tut". Der Browser beschränkt die Anzahl der von WebRTC verwendeten TCP-Verbindungen nicht über ein Limit für RTCPeerConnection oder DataChannel hinaus (dh wenn Sie 10 PeerConnections haben können, können sie problemlos TCP verwenden).

Tomtheengineer
quelle
1
Gute Antwort! Ab Chrome 31 wird SCTP standardmäßig für Datenkanäle verwendet.
Sam Dutton
1
Rocking tolle Antwort. Vielen Dank für die Quellen.
Der Dembinski
@Jeder Grund, warum SCTP nicht von Audio / Video verwendet wird? Ist es nicht effektiv udp mit "Extras" (derzeit ist es meistens auf udp implementiert)
Pavel P
1
Für zukünftige Benutzer: In 1. chrome://webrtc-internalsmüssen Sie "Statistiken lesen von: Legacy"
Thomas Orlita
Der Grund, warum ich persönlich die Frage gestellt habe, ob WebRTC TCP oder UDP verwendet, ist zu prüfen, ob es zuverlässig ist oder nicht. Punkt 3 besagt, dass Medien TCP oder UDP verwenden, DataChannel jedoch SCTP. Daher sollte DataChannel zuverlässig sein, da SCTP zuverlässig ist (gemäß SCTP-RFC ). Dies widerspricht Punkt 2. Wenn also jemand großartig klären könnte!
Ben Butterworth