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:- Signaling
- Connecting
- Securing
- Communicating
Para implementar esos pasos, el cliente hace uso de los siguientes protocolos:
- WebSocket: este protocolo se usa para signaling; los clientes intercambian el Session Description Protocol y las direcciones IP locales, públicas y Relayed.
- UDP: este es el protocolo de transporte; el cliente usa UDP para enviar/recibir mensajes entre peers.
- DTLS: similar a TLS, es una especificación de cifrado que asegura el mensaje entre peers, evitando que terceros lean o escriban mensajes.
- STUN: protocolo para obtener la dirección IP pública.
- TURN: protocolo para retransmitir la dirección IP cuando los peers están detrás de NATs.
- ICE: protocolo para encontrar qué dirección IP y puertos son accesibles entre peers.
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:
- IPs y puertos en los que el peer es accesible
- Certificado del Fingerprint usado para asegurar la comunicación.
- Usuario y contraseña.
- ...
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:
- RTCPeerConnection WebSocket Server
- RTCPeerConnection WebSocket Client
- RTCPeerConnection STUN TURN
- RTCPeerConnection Signaling
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:
- RTP: Real Time Transport Protocol: usado para intercambiar media cifrada con SRTP.
- SCTP: Stream Control Transmission Protocol, usado para enviar y recibir mensajes de DataChannel cifrados con dTLS.
Actualmente estos protocolos no están implementados, pero puedes enviar/recibir datos usando DTLS sobre UDP.
