Czy WebRTC korzysta z protokołu TCP czy UDP?

81

To brzmi jak bardzo podstawowe pytanie, ale potrzebuję potwierdzenia

  1. Czy WebRTC używa protokołu TCP lub UDP jako transportu peer-to-peer? Skąd mam wiedzieć ?
  2. Czytałem, że jest tryb niezawodności i umowa DTLS, jak wpływają?
  3. Czy ten transport jest taki sam dla kanałów Media i DataChannel?
  4. Jak przełączać się między TCP i UDP?

Pytam, bo wiem, że przeglądarki mają limit liczby połączeń równoległych (myślę, że mówią o TCP), a może połączenie UDP nie jest ograniczone.

onmyway133
źródło

Odpowiedzi:

111
  1. Może używać albo. Domyślnie preferowany jest UDP, ale w zależności od zapory ogniowej między łączącymi się urządzeniami równorzędnymi może on łączyć się tylko przez TCP. Możesz użyć Wireshark do przechwytywania pakietów i sprawdzenia, czy używany jest protokół TCP lub UDP. W przeglądarce Chrome możesz również zobaczyć szczegóły dotyczące wybranego kandydata ( googActiveConnection), przechodząc do chrome://webrtc-internals.

  2. "Reliability mode" probably refers to the reliability mode of the DataChannel, which can be configured to run in reliable or unreliable mode. DTLS refers to the currently optional, but soon to be default method of exchanging encryption keys (the other deprecated mode is SDES). Firefox only supports DTLS, so for browser interop, you'll currently need to enable it in Chrome.

  3. The RTCPeerConnection (media) will use TCP or UDP, while the DataChannel uses SCTP. The SCTP implementation used by Firefox is implemented on top of UDP: https://code.google.com/p/sctp-refimpl/.

  4. It's possible to filter out TCP or UDP ICE candidates before adding them with addIceCandidate. Generally, you should not try to force the transport used since WebRTC will just "do the right thing". The browser does not limit the number of TCP connections used by WebRTC beyond any limit on the RTCPeerConnection or DataChannel (i.e., if you can have 10 PeerConnections, they can each use TCP without any problem).

tomtheengineer
źródło
1
Great answer! From Chrome 31, SCTP is used by default for data channels.
Sam Dutton
1
Rocking awesome answer. Thank you for the sources.
The Dembinski
@Any reason SCTP isn't used by audio/video? Isn't it effectively udp with "extras" (currently it's implemented on top of udp mostly)
Pavel P
1
For future users: in 1. chrome://webrtc-internals, you have to select "Read Stats From: Legacy"
Thomas Orlita
The reason why I personally asked the question "does WebRTC use TCP or UDP" is to see if it were reliable or not. Point 3 says, Media will use TCP or UDP, but DataChannel will use SCTP, so DataChannel should be reliable, because SCTP is reliable (according to the SCTP RFC). This contradicts point 2., so if someone could clarify great!
Ben Butterworth