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:- Signaling
- Verbinden
- Absichern
- Kommunikation
Um diese Schritte umzusetzen, verwendet der Client die folgenden Protokolle:
- WebSocket: dieses Protokoll wird für das Signaling verwendet; die Clients tauschen das Session Description Protocol und die lokalen, öffentlichen und Relayed-IP-Adressen aus.
- UDP: das Transportprotokoll; der Client nutzt UDP, um Nachrichten zwischen Peers zu senden/empfangen.
- DTLS: ähnlich wie TLS eine Verschlüsselungsspezifikation, die die Nachrichten zwischen Peers absichert und verhindert, dass Dritte sie lesen/schreiben können.
- STUN: Protokoll zum Ermitteln der öffentlichen IP-Adresse.
- TURN: Protokoll zum Relayen der IP-Adresse, wenn Peers hinter NATs sitzen.
- ICE: Protokoll, um herauszufinden, welche IP-Adressen und Ports zwischen Peers erreichbar sind.
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:
- IPs und Ports, unter denen der Peer erreichbar ist
- Fingerprint des Zertifikats, mit dem die Kommunikation gesichert wird.
- Benutzer und Passwort.
- ...
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:
- RTCPeerConnection WebSocket Server
- RTCPeerConnection WebSocket Client
- RTCPeerConnection STUN TURN
- RTCPeerConnection Signaling
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:
- RTP: Real Time Transport Protocol – zum Austausch von mit SRTP verschlüsselten Medien.
- SCTP: Stream Control Transmission Protocol – zum Senden und Empfangen von DataChannel-Nachrichten, verschlüsselt mit DTLS.
Aktuell sind diese Protokolle nicht implementiert, aber du kannst Daten per DTLS über UDP senden/empfangen.
