À partir de sgcWebSockets 2022.8.0, un nouveau composant a été ajouté à la bibliothèque sgcWebSockets, le TsgcRTCPeerConnection.
Le TsgcRTCPeerConnection est un composant client qui permet de connecter des pairs en P2P via UDP. Le flux peut être divisé en 4 étapes :- Signalisation
- Connexion
- Sécurisation
- Communication
Pour mettre en œuvre ces étapes, le client utilise les protocoles suivants :
- WebSocket : ce protocole est utilisé pour la signalisation ; les clients échangent le Session Description Protocol ainsi que les adresses IP locales, publiques et relayées.
- UDP : c'est le protocole de transport ; le client utilise UDP pour envoyer/recevoir des messages entre pairs.
- DTLS : similaire à TLS, c'est une spécification de chiffrement qui sécurise le message entre pairs et empêche les tiers de lire/écrire les messages.
- STUN : protocole pour obtenir l'adresse IP publique.
- TURN : protocole pour relayer l'adresse IP lorsque les pairs sont derrière des NAT.
- ICE : protocole pour trouver les adresses IP et ports accessibles entre pairs.
Signalisation
Au démarrage, le client ne sait pas avec qui il va communiquer ni de quoi. La signalisation utilise SDP (Session Description Protocol) qui contient des détails comme :
- IP et ports auxquels le pair est joignable
- L'empreinte du certificat utilisé pour sécuriser la communication.
- Utilisateur et mot de passe.
- ...
La signalisation utilise le protocole WebSocket pour échanger les données ; elle fonctionne via un sous-protocole et est implémentée dans le composant TsgcWSPServer_RTCPeerConnection côté serveur.
Le TsgcRTCPeerConnection crée déjà en interne un client WebSocket avec TsgcWSPClient_RTCPeerConnection associé.
Pour obtenir les IP et ports, le client utilise les protocoles STUN/TURN. Un serveur STUN/TURN est donc également requis.
Liens :
- RTCPeerConnection WebSocket Server
- RTCPeerConnection WebSocket Client
- RTCPeerConnection STUN TURN
- RTCPeerConnection Signaling
Connexion
Une fois que les deux pairs connaissent les candidats et les SDP, le client utilise un autre protocole standard appelé ICE.
ICE (Interactive Connection Establishment) permet d'établir une connexion entre deux pairs. Les pairs peuvent être sur le même réseau ou derrière un NAT... ICE est une solution pour établir une connexion directe sans serveur central. Si la connexion ne peut pas être P2P, ICE utilise TURN pour relayer les données via un serveur TURN.
Une fois qu'ICE trouve un candidat valide capable de connecter les deux pairs, l'étape suivante consiste à chiffrer la communication.
Links:
Sécurisation
Une fois les pairs connectés, la communication doit être sécurisée. C'est fait avec DTLS, un protocole cryptographique utilisé pour sécuriser la communication sur UDP.
Une fois le handshake DTLS effectué avec succès, un autre protocole est utilisé, SRTP (Secure Real-Time Transport Protocol) ; actuellement, SRTP n'est pas implémenté.
Links:
Communication
Une fois que les deux pairs utilisent un protocole sécurisé, la communication se fait via deux protocoles :
- RTP : Real Time Transport Protocol, utilisé pour échanger des médias chiffrés avec SRTP.
- SCTP : Stream Control Transmission Protocol, utilisé pour envoyer et recevoir des messages DataChannel chiffrés avec DTLS.
Actuellement, ces protocoles ne sont pas implémentés, mais tu peux envoyer/recevoir des données via DTLS sur UDP.
