RTCPeerConnection P2P

· Releases

From sgcWebSockets 2022.8.0 a new component has been added to the sgcWebSockets library, the TsgcRTCPeerConnection.

TsgcRTCPeerConnection is een clientcomponent waarmee je peers kunt verbinden via P2P over UDP. De flow kan worden opgesplitst in 4 stappen:




Om deze stappen te implementeren gebruikt de client de volgende protocollen:

Signaling 

Wanneer de client start, weet deze niet met wie er gecommuniceerd gaat worden en waarover. Signaling gebruikt het SDP (Session Description Protocol) dat details bevat zoals:

De signaling gebruikt het WebSocket-protocol om de data uit te wisselen; dit werkt via een subprotocol en is geïmplementeerd in het component TsgcWSPServer_RTCPeerConnection aan de serverzijde.

TsgcRTCPeerConnection maakt intern al een WebSocket-client aan met TsgcWSPClient_RTCPeerConnection eraan gekoppeld.

Om de IP's en poorten te verkrijgen gebruikt de client de STUN/TURN-protocollen om deze informatie op te halen. Een STUN/TURN-server is dus ook vereist.

Links:

Connecting 

Zodra de 2 peers de candidates en SDP's kennen, gebruikt de client een ander standaardprotocol genaamd ICE.

ICE (Interactive Connection Establishment) maakt het mogelijk een verbinding tot stand te brengen tussen 2 peers. De peers kunnen in hetzelfde netwerk of achter een NAT zitten... ICE is een oplossing om een directe verbinding te maken zonder centrale server. Als de verbinding niet P2P kan zijn, gebruikt ICE TURN om de data door te geven via een TURN-server.

Zodra ICE een geldige candidate vindt die de 2 peers kan verbinden, is de volgende stap het versleutelen van de communicatie

Links:

Securing 

 Nadat de peers verbonden zijn, moet de communicatie beveiligd zijn. Dit gebeurt met DTLS, een cryptografisch protocol om communicatie over UDP te beveiligen.

Zodra de DTLS-handshake succesvol is verwerkt, wordt een ander protocol gebruikt, SRTP (Secure Real-Time Transport Protocol); SRTP is momenteel niet geïmplementeerd.

Links:

Communicating 

Zodra de 2 peers een beveiligd protocol gebruiken, gebeurt de communicatie via 2 protocollen:

Momenteel zijn deze protocollen niet geïmplementeerd, maar je kunt data versturen/ontvangen via DTLS over UDP.