En el mundo de las comunicaciones en tiempo real a través de la web, WebRTC (Web Real-Time Communication) se ha convertido en una tecnología clave que permite a los navegadores y aplicaciones móviles comunicarse mediante audio, video o datos en tiempo real sin necesidad de plugins adicionales. Sin embargo, para que WebRTC funcione correctamente, sobre todo en redes complejas con firewalls y NATs (Network Address Translation), es necesario implementar dos tecnologías esenciales: STUN y TURN.
En este artículo, exploraremos en detalle qué son los servidores STUN y TURN, sus diferencias, cuándo se utilizan y cómo contribuyen al correcto funcionamiento de WebRTC.
Antes de profundizar en los servidores STUN y TURN, es importante entender qué es WebRTC. WebRTC es una tecnología de código abierto que facilita la transmisión de datos en tiempo real entre navegadores. Los casos de uso más comunes incluyen videollamadas, audio y la transmisión de archivos P2P (peer-to-peer).
WebRTC hace uso de tres APIs clave:
El desafío surge cuando los dispositivos están detrás de firewalls o NATs, que son muy comunes en redes modernas. Aquí es donde entran en juego STUN y TURN para facilitar la conectividad.
STUN (Session Traversal Utilities for NAT) es un protocolo que permite que un dispositivo descubra su dirección IP pública y el tipo de NAT que está utilizando. En términos sencillos, el servidor STUN actúa como un intermediario que le dice a los dispositivos detrás de un NAT cuál es su dirección IP pública y puerto, de modo que puedan establecer una conexión directa entre ellos.
Cuando dos dispositivos intentan conectarse directamente entre sí mediante WebRTC, necesitan conocer sus respectivas direcciones IP públicas. Si ambos dispositivos están detrás de diferentes NATs, no conocen sus direcciones públicas. Al usar un servidor STUN, los dispositivos envían una solicitud al servidor para obtener su dirección IP y puerto públicos. Una vez que ambos dispositivos tienen esta información, intentan establecer una conexión directa.
El proceso general se puede resumir en los siguientes pasos:
1. El dispositivo A envía una solicitud al servidor STUN.
2. El servidor STUN responde con la dirección IP pública y el puerto desde los que ve la solicitud.
3. Ambos dispositivos (A y B) utilizan esta información para intentar conectarse directamente.
TURN (Traversal Using Relays around NAT) es un protocolo que proporciona una solución alternativa cuando STUN no es suficiente. TURN funciona como un relé, es decir, en lugar de que los dispositivos establezcan una conexión directa, el tráfico de medios se enruta a través de un servidor TURN.
TURN es más complejo que STUN. En lugar de simplemente descubrir la IP pública de un dispositivo, el servidor TURN actúa como un relé completo para los medios. Cuando una conexión directa entre dos dispositivos no es posible debido a las restricciones de NAT o firewall, los datos de audio, video o archivos se envían al servidor TURN, que luego retransmite esos datos al dispositivo de destino.
El flujo es algo así:
1. El dispositivo A envía los datos al servidor TURN.
2. El servidor TURN reenvía los datos al dispositivo B.
3. El dispositivo B envía su respuesta al servidor TURN.
4. El servidor TURN reenvía la respuesta al dispositivo A.
STUN es ideal cuando los dispositivos pueden establecer una conexión directa entre sí. Este escenario es común cuando ambos dispositivos están en redes con NAT menos restrictivos, como un NAT de mapeo de puertos o un firewall que permite conexiones salientes.
TURN se utiliza cuando una conexión P2P directa no es posible debido a restricciones severas de red. Esto es común en grandes empresas o redes con NAT simétrico, que impiden la conexión directa entre dispositivos. TURN actúa como un "último recurso" para asegurar la conectividad en WebRTC, pero con el costo de mayor latencia y uso de recursos.
WebRTC es una tecnología poderosa que permite la comunicación en tiempo real en la web. Sin embargo, para que funcione correctamente en diferentes entornos de red, el uso de servidores STUN y TURN es esencial. STUN permite a los dispositivos establecer conexiones directas en la mayoría de los casos, lo que garantiza bajas latencias y menores costos. Sin embargo, en situaciones donde las redes NAT y los firewalls son más restrictivos, TURN se convierte en la opción necesaria, asegurando la conectividad al costo de una mayor latencia y más recursos.
Entender cuándo y cómo usar estos protocolos puede marcar la diferencia entre una experiencia de comunicación en tiempo real fluida y una que sufra interrupciones constantes.
Jorge García
Fullstack developer