¿Qué es WebRTC (Web Real-Time Communication)?
WebRTC es un framework de código abierto diseñado por Google y estandarizado por el W3C y el IETF. Permite que las aplicaciones y sitios web establezcan conexiones directas punto a punto (peer-to-peer o P2P) para transmitir audio, vídeo y datos binarios sin necesidad de extensiones externas ni servidores de almacenamiento en medio. Si bien es famoso por videollamadas (en plataformas como Teams o Discord), su canal de transmisión de datos (RTCDataChannel API) es una herramienta fantástica para enviar archivos directamente de dispositivo a dispositivo de forma confidencial.
En esta guía explicamos en detalle los protocolos que permiten a dos navegadores encontrarse, atravesar cortafuegos y transferir archivos localmente.
1. La paradoja P2P: ¿Por qué necesitamos un servidor?
Un error común es pensar que las tecnologías P2P no requieren ningún tipo de servidor. Para que el navegador A y el navegador B puedan conectarse directamente, primero deben saber en qué parte del mundo está el otro. Un navegador web no conoce de antemano la dirección IP pública o los puertos de un tercero. Por eso, WebRTC hace uso de tres servidores de infraestructura auxiliar:
1.1. El Servidor de Señalización (Signaling Server)
El servidor de señalización actúa como intermediario inicial de descubrimiento. Este servidor nunca toca tu archivo real, solo transmite metadatos descriptivos de conexión:
- SDP (Session Description Protocol): Archivos de texto que describen qué capacidades y códecs soporta cada navegador.
- ICE Candidates: Direcciones IP públicas y puertos candidatos por donde un navegador puede recibir conexiones.
Una vez intercambiados los metadatos de configuración, el servidor de señalización se retira y la conexión de datos fluye exclusivamente entre los dos navegadores.
1.2. Servidor STUN (Session Traversal Utilities for NAT)
La inmensa mayoría de routers domésticos funcionan detrás de un sistema NAT (Traducción de Direcciones de Red). Tu ordenador suele tener una IP privada (como 192.168.1.50) que es invisible para el resto de Internet. El servidor STUN es un servidor público sencillo al que tu navegador le pregunta: "¿Con qué IP y puerto público me ve el mundo?" El servidor STUN le responde indicando su dirección visible en Internet, la cual se empaqueta como un **ICE Candidate**.
1.3. Servidor TURN (Traversal Using Relays around NAT)
En el 15-20% de los casos (como redes móviles muy restrictivas o redes wifi corporativas con cortafuegos estrictos), la arquitectura de la red impide que dos dispositivos conecten sus puertos directamente. En ese caso extremo, WebRTC utiliza un servidor TURN.
El servidor TURN actúa como repetidor web de retransmisión de datos. El navegador A envía la información al TURN y este la reenvía al navegador B. Es importante señalar que todo el flujo de datos viaja encriptado de extremo a extremo (End-to-End Encryption), por lo que el dueño del servidor TURN no puede espiar el contenido de tus archivos.
2. Paso a paso: Ciclo de vida de una conexión WebRTC
Así es como nuestra herramienta de transferencia P2P inicia una conexión:
- Creación de Sala: El emisor entra a la web. Se abre una conexión de señalización por WebSockets y se genera un código de sala único.
- Unión del Receptor: El receptor introduce el código o entra por el enlace directo. Ambos dispositivos se registran en la misma sala del servidor de señalización.
- Oferta SDP: El emisor crea un objeto de conexión, llama a
createOffer()y envía el paquete SDP con sus especificaciones al receptor. - Respuesta SDP: El receptor procesa la oferta, define su configuración y envía una respuesta SDP de vuelta al emisor.
- Intercambio de Candidatos ICE: Ambos dispositivos recaban información de los servidores STUN e intercambian sus IP candidatas.
- Enlace P2P: Los navegadores prueban las rutas de conexión. En cuanto se valida una ruta directa, el estado cambia a "Conectado" y la transferencia comienza de inmediato de navegador a navegador sin pasar por nubes ni bases de datos.
3. RTCDataChannel: Cómo viajan los archivos
Para asegurar que los archivos lleguen íntegros y en orden (a diferencia de una transmisión de vídeo donde perder píxeles no es crítico), WebRTC emplea el protocolo **SCTP (Stream Control Transmission Protocol)** montado sobre encriptación DTLS dentro de paquetes UDP.
Esto garantiza:
- Integridad Absoluta: SCTP reordena los paquetes y retransmite automáticamente los trozos que se pierdan por el camino.
- Cifrado de Nivel Militar: DTLS asegura que nadie pueda interceptar o descifrar la información en tránsito.
- Gestión de Memoria Local: El archivo se lee en pequeños fragmentos (normalmente de 16KB o 64KB) mediante la API `FileReader` y se reconstruye en el receptor, evitando colapsar la RAM de tu dispositivo.
4. Beneficios del modelo P2P para compartir archivos
- Sin límites de tamaño: Al no tener que subir el archivo a ningún disco en la nube, puedes enviar vídeos o archivos de decenas de gigabytes directamente.
- Velocidad máxima: Si ambos dispositivos están en la misma oficina o red doméstica, la velocidad de transferencia se realiza a velocidad de LAN local (300Mbps o más), sin verse limitada por la velocidad de subida contratada en tu plan de Internet.
- Privacidad de Datos Completa: No existen servidores de almacenamiento que guarden tus archivos. La información solo existe en los dos navegadores activos.
Conclusión
La tecnología WebRTC demuestra que es perfectamente posible construir software web de alto rendimiento sin sacrificar la privacidad de los usuarios. Al descentralizar el envío de archivos, devolvemos el control de la información a los usuarios.