RTCPeerConnection P2P

· Versiones

Desde sgcWebSockets 2022.8.0 se ha añadido un nuevo componente a la librería sgcWebSockets, el TsgcRTCPeerConnection.

El TsgcRTCPeerConnection es un componente cliente que permite conectar peers usando P2P a través de UDP. El flujo se puede dividir en 4 pasos:




Para implementar esos pasos, el cliente hace uso de los siguientes protocolos:

Signaling 

Cuando el cliente arranca no tiene ni idea de con quién va a comunicarse ni sobre qué. El Signaling usa el SDP (Session Description Protocol), que contiene detalles como:

El Signaling usa el protocolo WebSocket para intercambiar los datos; funciona mediante un subprotocolo y está implementado en el componente TsgcWSPServer_RTCPeerConnection en el lado del servidor.

El TsgcRTCPeerConnection ya crea internamente un cliente WebSocket con TsgcWSPClient_RTCPeerConnection adjunto.

Para obtener las IPs y los puertos, el cliente usa los protocolos STUN/TURN para obtener esta información. Por tanto, también se requiere un servidor STUN/TURN.

Enlaces:

Connecting 

Una vez que los 2 peers conocen los candidatos y los SDPs, el cliente usa otro protocolo estándar llamado ICE.

ICE (Interactive Connection Establishment) permite establecer una conexión entre 2 peers. Los peers pueden estar en la misma red o detrás de un NAT... ICE es una solución para establecer una conexión directa sin un servidor central. Si la conexión no puede ser P2P, ICE usará TURN para retransmitir los datos usando un servidor TURN.

Una vez que ICE encuentra un candidato válido que puede conectar entre 2 peers, el siguiente paso es cifrar la comunicación

Enlaces:

Securing 

 Una vez que los peers se han conectado, la comunicación debe ser segura. Esto se hace usando DTLS, que es un protocolo criptográfico usado para asegurar la comunicación sobre UDP.

Una vez procesado correctamente el handshake DTLS, se usa otro protocolo, SRTP (Secure Real-Time Transport Protocol); actualmente SRTP no está implementado.

Enlaces:

Communicating 

Una vez que los 2 peers usan un protocolo seguro, la comunicación se realiza mediante 2 protocolos:

Actualmente estos protocolos no están implementados, pero puedes enviar/recibir datos usando DTLS sobre UDP.