RTCPeerConnection P2P

· Versionen

Ab sgcWebSockets 2022.8.0 wurde der sgcWebSockets-Bibliothek eine neue Komponente hinzugefügt: TsgcRTCPeerConnection.

Die TsgcRTCPeerConnection ist eine Client-Komponente, mit der du Peers per P2P über UDP verbinden kannst. Der Ablauf lässt sich in 4 Schritte unterteilen:




Um diese Schritte umzusetzen, verwendet der Client die folgenden Protokolle:

Signaling 

Wenn der Client startet, weiß er noch nicht, mit wem er kommunizieren wird und worüber. Signaling verwendet das SDP (Session Description Protocol), das Details enthält wie:

Das Signaling tauscht die Daten über das WebSocket-Protokoll aus. Es funktioniert über ein Subprotokoll und ist serverseitig in der Komponente TsgcWSPServer_RTCPeerConnection implementiert.

Die TsgcRTCPeerConnection erzeugt intern bereits einen WebSocket-Client mit angehängtem TsgcWSPClient_RTCPeerConnection.

Zum Ermitteln von IPs und Ports nutzt der Client die STUN/TURN-Protokolle. Daher wird auch ein STUN/TURN-Server benötigt.

Links:

Verbinden 

Sobald die beiden Peers die Candidates und SDPs kennen, nutzt der Client ein weiteres Standardprotokoll namens ICE.

ICE (Interactive Connection Establishment) ermöglicht den Verbindungsaufbau zwischen zwei Peers. Die Peers können sich im selben Netzwerk befinden oder hinter einem NAT ... ICE ist eine Lösung, um eine direkte Verbindung ohne zentralen Server aufzubauen. Falls keine P2P-Verbindung möglich ist, leitet ICE die Daten über einen TURN-Server weiter.

Sobald ICE einen gültigen Candidate gefunden hat, der zwei Peers verbinden kann, ist der nächste Schritt das Verschlüsseln der Kommunikation.

Links:

Absichern 

 Sobald die Peers verbunden sind, muss die Kommunikation abgesichert werden. Das übernimmt DTLS, ein kryptografisches Protokoll zur Absicherung der Kommunikation über UDP.

Sobald der DTLS-Handshake erfolgreich abgeschlossen ist, kommt ein weiteres Protokoll zum Einsatz: SRTP (Secure Real-Time Transport Protocol). Aktuell ist SRTP nicht implementiert.

Links:

Kommunikation 

Sobald die beiden Peers ein sicheres Protokoll verwenden, läuft die Kommunikation über zwei Protokolle:

Aktuell sind diese Protokolle nicht implementiert, aber du kannst Daten per DTLS über UDP senden/empfangen.