RTCPeerConnection P2P

· Versioni

Da sgcWebSockets 2022.8.0 è stato aggiunto un nuovo componente alla libreria sgcWebSockets, il TsgcRTCPeerConnection.

Il TsgcRTCPeerConnection è un componente client che permette di connettere peer tramite P2P attraverso UDP. Il flusso può essere suddiviso in 4 passi:




Per implementare questi passi, il client usa i seguenti protocolli:

Signaling 

Quando il client si avvia, non sa con chi comunicherà né di cosa parleranno. Il signaling usa il SDP (Session Description Protocol) che contiene dettagli come:

Il signaling usa il protocollo WebSocket per scambiare i dati, funziona tramite un sottoprotocollo ed è implementato nel componente TsgcWSPServer_RTCPeerConnection lato server.

Il TsgcRTCPeerConnection crea già internamente un client WebSocket con TsgcWSPClient_RTCPeerConnection collegato.

Per ottenere IP e porte, il client usa i protocolli STUN/TURN per ottenere queste informazioni. Quindi è richiesto anche un server STUN/TURN.

Links:

Connecting 

Una volta che i 2 peer conoscono i candidati e gli SDP, il client usa un altro protocollo standard chiamato ICE.

ICE (Interactive Connection Establishment) consente di stabilire una connessione tra 2 peer. I peer possono trovarsi sulla stessa rete o dietro NAT... ICE è una soluzione per stabilire una connessione diretta senza un server centrale. Se la connessione non può essere P2P, ICE userà TURN per fare il relay dei dati tramite un server TURN.

Una volta che ICE trova un candidato valido in grado di connettere i 2 peer, il passo successivo è cifrare la comunicazione

Links:

Securing 

 Dopo che i peer si sono connessi, la comunicazione deve essere sicura. Questo viene fatto usando DTLS, un protocollo crittografico usato per proteggere la comunicazione su UDP.

Una volta completato con successo l'handshake DTLS, viene usato un altro protocollo, SRTP (Secure Real-Time Transport Protocol); attualmente SRTP non è implementato.

Links:

Communicating 

Una volta che i 2 peer usano un protocollo sicuro, la comunicazione avviene usando 2 protocolli:

Attualmente questi protocolli non sono implementati, ma puoi inviare/ricevere dati usando DTLS su UDP.