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:- Sygnalizacja
- Łączenie
- Zabezpieczanie
- Komunikacja
Do realizacji tych kroków klient korzysta z następujących protokołów:
- WebSocket: protokół używany do sygnalizacji — klienci wymieniają Session Description Protocol oraz lokalne, publiczne i przekazane adresy IP.
- UDP: protokół transportowy — klient używa UDP do wysyłania i odbierania wiadomości między uczestnikami.
- DTLS: podobny do TLS — specyfikacja szyfrowania zabezpieczająca wiadomości między uczestnikami i uniemożliwiająca osobom trzecim ich odczyt lub zapis.
- STUN: protokół do uzyskiwania publicznego adresu IP.
- TURN: protokół do przekazywania adresu IP, gdy uczestnicy są za NAT-ami.
- ICE: protokół do znajdowania adresów IP i portów dostępnych między uczestnikami.
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:
- Adresy IP i porty, pod którymi uczestnik jest osiągalny
- Certyfikat odcisku palca używany do zabezpieczenia komunikacji.
- Użytkownik i hasło.
- ...
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:
- RTCPeerConnection WebSocket Server
- RTCPeerConnection WebSocket Client
- RTCPeerConnection STUN TURN
- RTCPeerConnection Signaling
Łą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:
- RTP: Real Time Transport Protocol — używany do wymiany multimediów szyfrowanych przez SRTP.
- SCTP: Stream Control Transmission Protocol — używany do wysyłania i odbierania wiadomości DataChannel szyfrowanych przez dTLS.
Obecnie te protokoły nie są jeszcze zaimplementowane, ale możesz wysyłać i odbierać dane za pomocą DTLS przez UDP.
