Guías
WebRTC DataChannel y el significado de «transferencia directa»
Mándamele usa RTCPeerConnection y un DataChannel ordenado para el contenido. El servidor señaliza la conexión, pero la implementación no le envía los archivos como fallback.
Actualizada el 2026-08-07 · aproximadamente 778 palabras
Qué es un DataChannel en este producto
Un RTCDataChannel es una capacidad del navegador para intercambiar datos dentro de una conexión WebRTC. Mándamele crea uno con la etiqueta «mandamele» y solicita entrega ordenada. No se utiliza para audio ni vídeo: transporta mensajes de texto, metadatos de archivo, bloques binarios y pequeños mensajes de preparación. La interfaz solo se declara lista cuando ambos extremos han abierto el canal.
La aplicación no implementa un protocolo de red desde cero. Delega la negociación y el transporte al RTCPeerConnection del navegador, y añade un protocolo sencillo para distinguir textos, inicio y final de archivo. Esta elección permite trabajar en una página web sin instalar una aplicación nativa, pero también hereda las restricciones de WebRTC del navegador y de la red.
Por qué hace falta señalización
Dos navegadores no pueden encontrarse solo porque ambos hayan abierto la misma web. Necesitan intercambiar descripciones de sesión y candidatos de conectividad. En Mándamele, un WebSocket conecta cada navegador con el Durable Object del Pase. El servidor reenvía ofertas SDP, respuestas SDP y candidatos ICE al participante aprobado. No interpreta esos mensajes para reconstruir el archivo.
La señalización también comunica creación, entrada, cierre, errores y pings. Es correcto decir que el servicio participa en el establecimiento y mantenimiento de la sesión. Sería incorrecto decir que todo ocurre sin servidor. La diferencia relevante es que, una vez disponible el DataChannel, el código envía el contenido por él y no por el canal de señalización.
Qué significa y qué no significa «directo»
En la implementación actual, «directo» significa navegador a navegador a través de la ruta seleccionada por WebRTC, sin una carga deliberada del texto o archivo al Worker, al Durable Object, a una base de datos o a almacenamiento de objetos de Mándamele. No hay endpoint de subida de transferencias ni fallback que convierta el archivo en una petición HTTP al fallar WebRTC.
No significa que los dispositivos estén conectados físicamente por un único cable, que ningún operador transporte los paquetes o que el receptor no pueda guardar una copia. Tampoco promete anonimato de red. El servidor y los proveedores de infraestructura procesan datos técnicos necesarios para operar y proteger el servicio; las redes de acceso conocen tráfico y direcciones según su propia función.
STUN, NAT y la ausencia de TURN
La mayoría de dispositivos se encuentran detrás de NAT o cortafuegos. El RTCPeerConnection usa candidatos ICE para probar rutas posibles. Mándamele configura un servidor STUN de Google en el puerto 19302. STUN ayuda al navegador a descubrir cómo se ve su conexión desde fuera; no es el almacén del archivo ni un relé configurado por esta aplicación.
TURN resolvería algunos casos retransmitiendo el contenido cuando no existe una ruta directa aceptable, pero Mándamele no configura TURN porque está fuera del alcance del MVP. Por eso dos navegadores que funcionan en una red doméstica pueden no conectar en una empresa, hotel, VPN o red móvil concreta. La ausencia de fallback es una limitación deliberada que debe explicarse, no ocultarse.
Transporte, cifrado y afirmaciones prudentes
El código crea un RTCPeerConnection estándar y no desactiva la seguridad integrada del navegador. WebRTC negocia su transporte protegido dentro de esa implementación del navegador. Mándamele no añade cifrado de aplicación, una contraseña para el archivo, verificación manual de huellas ni una clave independiente del Pase. Por eso no presentamos el producto como una caja fuerte criptográfica especializada.
Para un usuario, la consecuencia práctica es separar dos preguntas: si el archivo se sube a los servidores de Mándamele y si el archivo requiere protección adicional antes de enviarlo. La respuesta a la primera es no en el flujo implementado. Para material especialmente sensible, puede seguir siendo sensato cifrar el archivo antes con una herramienta adecuada y compartir la contraseña por otro canal.
Cómo viaja un archivo grande dentro del límite
El navegador no envía un archivo de 40 MB como un único mensaje. Primero valida que no supere 50 MB, describe tamaño, nombre, MIME y número de fragmentos, y luego recorre bloques de 64 KiB. El canal es ordenado, de modo que el receptor puede reconstruir el Blob siguiendo la secuencia esperada. Los metadatos entrantes también tienen límites de longitud.
El emisor vigila el búfer del DataChannel. Si supera 1 MiB, espera al evento que indica que ha bajado hacia 512 KiB antes de continuar. Este mecanismo reduce picos y mantiene visible el progreso, pero no garantiza una velocidad. CPU, memoria, calidad de la red, suspensión de pestañas y capacidad del receptor siguen condicionando el resultado.
- Directo describe el plano de contenido, no todo el sistema.
- STUN ayuda a descubrir rutas; no hay TURN configurado.
- No existe cifrado adicional de archivo implementado por Mándamele.