RTCPeerConnection P2P

· Wydania

Począwszy od wersji sgcWebSockets 2022.8.0 do biblioteki sgcWebSockets dodano nowy komponent: TsgcRTCPeerConnection.

TsgcRTCPeerConnection to komponent klienta umożliwiający łączenie uczestników przez P2P za pomocą UDP. Przepływ można podzielić na 4 kroki:




Do realizacji tych kroków klient korzysta z następujących protokołów:

Sygnalizacja

Gdy klient startuje, nie wie, z kim będzie się komunikować ani o czym. Sygnalizacja korzysta z SDP (Session Description Protocol), który zawiera takie informacje jak:

Sygnalizacja korzysta z protokołu WebSocket do wymiany danych, działa przez subprotokół i jest zaimplementowana w komponencie TsgcWSPServer_RTCPeerConnection po stronie serwera.

TsgcRTCPeerConnection tworzy wewnętrznie klienta WebSocket z dołączonym TsgcWSPClient_RTCPeerConnection.

Do uzyskania adresów IP i portów klient korzysta z protokołów STUN/TURN. Wymagany jest zatem serwer STUN/TURN.

Links:

Łączenie

Gdy obaj uczestnicy poznają kandydatów i SDP-y, klient korzysta z kolejnego protokołu standardowego zwanego ICE.

ICE (Interactive Connection Establishment) umożliwia nawiązanie połączenia między 2 uczestnikami. Uczestnicy mogą być w tej samej sieci lub za NAT-em. ICE to rozwiązanie pozwalające nawiązać bezpośrednie połączenie bez centralnego serwera. Jeśli połączenie P2P jest niemożliwe, ICE użyje TURN do przekazywania danych przez serwer TURN.

Gdy ICE znajdzie prawidłowego kandydata umożliwiającego połączenie 2 uczestników, kolejnym krokiem jest zaszyfrowanie komunikacji.

Links:

Zabezpieczanie 

 Po nawiązaniu połączenia między uczestnikami komunikacja musi być bezpieczna. Realizuje to DTLS — protokół kryptograficzny służący do zabezpieczania komunikacji przez UDP.

Po pomyślnym zakończeniu handshake DTLS używany jest kolejny protokół: SRTP (Secure Real-Time Transport Protocol) — obecnie SRTP nie jest jeszcze zaimplementowany.

Links:

Komunikacja

Gdy obaj uczestnicy korzystają z bezpiecznego protokołu, komunikacja odbywa się przy użyciu 2 protokołów:

Obecnie te protokoły nie są jeszcze zaimplementowane, ale możesz wysyłać i odbierać dane za pomocą DTLS przez UDP.