videocalling
Illustration of ICE (Establecimiento de Conectividad Interactiva) in video calling

ICE (Establecimiento de Conectividad Interactiva)

glossary.categories.protocol

Marco de trabajo para establecer conexiones entre pares a través de firewalls y NAT

¿Qué es ICE?

Interactive Connectivity Establishment (ICE) es un marco de trabajo que WebRTC utiliza para establecer conexiones directas entre navegadores o dispositivos a pesar de obstáculos de red como NAT (Traducción de Direcciones de Red) y firewalls. Piensa en ICE como un negociador inteligente que prueba múltiples estrategias de conexión simultáneamente para encontrar la mejor ruta entre dos pares.

ICE no transporta medios por sí mismo; es el proceso que determina CÓMO conectar dos dispositivos para que los medios (video, audio, datos) puedan fluir entre ellos. Una vez que ICE tiene éxito, la conexión WebRTC real usa la ruta que ICE descubrió.

Por qué ICE es necesario

El problema central que ICE resuelve: la mayoría de los dispositivos no tienen direcciones IP públicas a las que otros puedan llegar directamente. Tu portátil en casa tiene una IP privada como 192.168.1.100. Tu router (NAT) la traduce a tu IP pública al acceder a internet. Pero alguien en internet no puede iniciar una conexión a 192.168.1.100.

Cómo funciona ICE: Paso a paso

1. Recopilación de candidatos ICE

Cuando una conexión WebRTC comienza, cada par recopila "candidatos", rutas de conexión potenciales. ICE descubre tres tipos de candidatos:

  • Candidatos de host: Las direcciones IP locales de tu dispositivo. Funcionan solo si ambos pares están en la misma red local
  • Candidatos reflexivos del servidor: Tu dirección IP pública vista desde internet, descubierta consultando un servidor STUN
  • Candidatos de retransmisión: Una dirección en un servidor de retransmisión TURN que reenviará tu tráfico si las conexiones directas fallan

2. Intercambio de candidatos vía señalización

Los candidatos de cada par se envían al otro par a través de un canal de señalización (típicamente WebSockets o HTTPS). WebRTC moderno usa "Trickle ICE" que envía candidatos incrementalmente a medida que se descubren.

3. Verificaciones de conectividad

Una vez que los pares tienen los candidatos del otro, ICE realiza verificaciones de conectividad. Empareja candidatos locales con remotos y prueba cada par enviando solicitudes de binding STUN.

4. Selección de la mejor ruta

ICE identifica qué pares de candidatos se conectaron exitosamente y selecciona el "mejor" basándose en menor latencia, prioridad del tipo de candidato y confiabilidad de la conexión.

Tasas de éxito de conexión

  • 75-85% de las conexiones: Tienen éxito a través de rutas peer-to-peer directas usando candidatos reflexivos del servidor (STUN)
  • 15-25% de las conexiones: Requieren retransmisión TURN debido a NAT simétrico, firewalls restrictivos o redes empresariales
  • <1% de las conexiones: Fallan completamente, usualmente debido a proxies corporativos que bloquean WebRTC por completo

Conclusión

ICE es el héroe oculto de WebRTC. Es la razón por la que puedes hacer clic en un enlace e iniciar instantáneamente una videollamada con alguien al otro lado del mundo, a pesar de que ambos están detrás de routers NAT y firewalls.

Referencias