A partir do sgcWebSockets 2022.8.0, um novo componente foi adicionado à biblioteca sgcWebSockets: o TsgcRTCPeerConnection.
O TsgcRTCPeerConnection é um componente cliente que permite conectar peers usando P2P via UDP. O fluxo pode ser dividido em 4 etapas:- Sinalização
- Conexão
- Segurança
- Comunicação
Para implementar essas etapas, o cliente utiliza os seguintes protocolos:
- WebSocket: este protocolo é usado para sinalização; os clientes trocam o Session Description Protocol e os endereços IP locais, públicos e relay.
- UDP: este é o protocolo de transporte; o cliente usa UDP para enviar/receber mensagens entre peers.
- DTLS: semelhante ao TLS, é uma especificação de criptografia que protege as mensagens entre peers, impedindo que terceiros leiam/escrevam mensagens.
- STUN: protocolo para obter o endereço IP público.
- TURN: protocolo para relay de endereço IP quando os peers estão atrás de NATs.
- ICE: protocolo para descobrir quais endereços IP e portas são acessíveis entre os peers.
Sinalização
Quando o cliente inicia, ele não sabe com quem vai se comunicar nem sobre o que vão se comunicar. A sinalização usa o SDP (Session Description Protocol), que contém detalhes como:
- IPs e portas pelos quais o peer é acessível
- Certificado de impressão digital usado para proteger a comunicação.
- Usuário e senha.
- ...
A sinalização utiliza o protocolo WebSocket para trocar os dados; funciona através de um subprotocolo e é implementada no componente TsgcWSPServer_RTCPeerConnection no lado do servidor.
O TsgcRTCPeerConnection já cria internamente um cliente WebSocket com o TsgcWSPClient_RTCPeerConnection anexado.
Para obter os IPs e portas, o cliente utiliza os protocolos STUN/TURN. Portanto, um servidor STUN/TURN também é necessário.
Links:
- RTCPeerConnection WebSocket Server
- RTCPeerConnection WebSocket Client
- RTCPeerConnection STUN TURN
- RTCPeerConnection Signaling
Conexão
Assim que os 2 peers conhecem os candidatos e os SDPs, o cliente utiliza outro protocolo padrão chamado ICE.
ICE (Interactive Connection Establishment) permite o estabelecimento de uma conexão entre 2 peers. Os peers podem estar na mesma rede ou atrás de um NAT. O ICE é uma solução para estabelecer uma conexão direta sem um servidor central. Se a conexão não puder ser P2P, o ICE usará TURN para retransmitir os dados usando um servidor TURN.
Assim que o ICE encontra um candidato válido que pode conectar os 2 peers, o próximo passo é criptografar a comunicação.
Links:
Segurança
Após os peers se conectarem, a comunicação deve ser protegida. Isso é feito usando DTLS, que é um protocolo criptográfico usado para proteger a comunicação sobre UDP.
Assim que o handshake DTLS for processado com sucesso, outro protocolo é utilizado: o SRTP (Secure Real-Time Transport Protocol). Atualmente, o SRTP não está implementado.
Links:
Comunicação
Assim que os 2 peers estão usando um protocolo seguro, a comunicação é feita usando 2 protocolos:
- RTP: Real Time Transport Protocol: usado para trocar mídia criptografada com SRTP.
- SCTP: Stream Control Transmission Protocol, usado para enviar e receber mensagens de DataChannel criptografadas com dTLS.
Atualmente esses protocolos não estão implementados, mas você pode enviar/receber dados usando DTLS sobre UDP.
