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:- Signaling
- Connecting
- Securing
- Communicating
Per implementare questi passi, il client usa i seguenti protocolli:
- WebSocket: questo protocollo è usato per il signaling; i client si scambiano il Session Description Protocol e gli indirizzi IP locali, pubblici e Relayed.
- UDP: questo è il protocollo di trasporto; il client usa UDP per inviare/ricevere messaggi tra peer.
- DTLS: simile a TLS, è una specifica di cifratura che protegge i messaggi tra peer evitando che terze parti possano leggerli/scriverli.
- STUN: protocollo per ottenere l'indirizzo IP pubblico.
- TURN: protocollo per relay dell'indirizzo IP quando i peer sono dietro NAT.
- ICE: protocollo per trovare quali indirizzi IP e porte sono accessibili tra i peer.
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:
- IP e porte tramite cui il peer è raggiungibile
- Fingerprint del certificato usato per proteggere la comunicazione.
- Utente e password.
- ...
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:
- RTCPeerConnection WebSocket Server
- RTCPeerConnection WebSocket Client
- RTCPeerConnection STUN TURN
- RTCPeerConnection Signaling
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:
- RTP: Real Time Transport Protocol: usato per scambiare media cifrati con SRTP.
- SCTP: Stream Control Transmission Protocol, usato per inviare e ricevere messaggi DataChannel cifrati con DTLS.
Attualmente questi protocolli non sono implementati, ma puoi inviare/ricevere dati usando DTLS su UDP.
