RTCPeerConnection P2P

· Versions

À 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 :




Pour mettre en œuvre ces étapes, le client utilise les protocoles suivants :

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 :

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 :

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 :

Actuellement, ces protocoles ne sont pas implémentés, mais tu peux envoyer/recevoir des données via DTLS sur UDP.