Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

251
Vistas
WebRTC no puede conectar P2P a pesar de que los pares pueden enviarse paquetes UDP entre sí

Tenía la impresión de que WebRTC hace todo lo posible para lograr la conectividad P2P a pesar de los NAT. [1][2] Por eso me sorprendió saber que WebRTC no logra conectar a los pares en algunas situaciones en las que una conexión P2P es fácil de lograr. Me gustaría entender por qué sucede esto y si hay algo que pueda hacer para mejorar la situación.


¿Por qué afirmo que P2P es fácil de lograr en algunas de estas situaciones? Reclamo esto porque configuré un experimento con 2 dispositivos en diferentes redes:

  • El dispositivo F está conectado a Internet detrás de NAT de cono completo
  • El dispositivo S está conectado a Internet detrás de Symmetric NAT

Puedo lograr fácilmente una conexión P2P entre estos dispositivos de la siguiente manera:

  1. El dispositivo F vincula una conexión a un puerto aleatorio (impredecible) y envía un paquete UDP a través de ese puerto a cualquier parte de Internet. Debido a que F está detrás de NAT de cono completo, este paquete ha "perforado" el puerto para abrirlo, lo que permite que cualquier dirección externa envíe paquetes a través de ese puerto. En mi caso, el puerto que abrí localmente parece ser el mismo que el puerto externo. (Si el puerto externo fuera diferente del puerto local, podríamos usar algo como STUN para averiguar el puerto externo).

  2. El dispositivo S vincula una conexión a un puerto aleatorio (impredecible) y envía un paquete UDP a través de ese puerto a la IP externa y al puerto del dispositivo F. Este paquete se puede entregar porque el puerto se abrió en el paso 1. Después de esto paquete, el dispositivo S ha perforado su propio puerto, lo que permite que los paquetes del dispositivo F se envíen de vuelta a través de él. El dispositivo F sabrá dónde enviar los paquetes, porque el paquete que envió S contiene la IP y el puerto externos. Debido a que el Dispositivo S tiene NAT simétrico, la perforación no abrió el puerto para todo el tráfico, solo para el tráfico del Dispositivo F (la IP externa y el puerto del Dispositivo F).

Usé Python para verificar que puedo abrir una conexión P2P entre estos dispositivos y enviar mensajes en ambas direcciones, como se describe anteriormente. No entiendo por qué WebRTC no puede lograr una conexión P2P como esta.


¿Por qué afirmo que WebRTC no se conecta en algunas de estas situaciones en las que una conexión debería ser fácil? Reclamo esto porque traté de lograr una conexión WebRTC P2P con 3 ejemplos de código diferentes. Todos los ejemplos funcionaron cuando los dispositivos estaban en la misma red local, pero no funcionaron cuando los dispositivos estaban en redes diferentes (la configuración descrita anteriormente). Ninguna de las bibliotecas que probé proporcionó información de depuración útil para averiguar qué salió mal, y chrome://webrtc-internals tampoco proporcionó información útil. También probé en Firefox para verificar que este problema no es específico de la implementación.

Para ser específico, probé los siguientes ejemplos de código:

  1. simple-peer, una biblioteca WebRTC. Probé el primer código de ejemplo en el LÉAME.

  2. PeerJS, otra biblioteca WebRTC. Probé la página de demostración que han configurado.

  3. Un fragmento de código de una respuesta de Stackoverflow. [3]

En los 3 experimentos también traté de cambiar qué dispositivo inicia la conexión y qué dispositivo la recibe.

Dado que este problema no es específico de la implementación de WebRTC, y no es específico de ninguna biblioteca JavaScript de WebRTC en particular, empiezo a sospechar que la especificación de WebRTC está rota de alguna manera fundamental, lo que impide que WebRTC logre conexiones P2P en situaciones donde serían fáciles de lograr. ¿Me estoy perdiendo de algo?

[1] https://webrtc.org/getting-started/turn-server afirma: "Para que la mayoría de las aplicaciones WebRTC funcionen, se requiere un servidor para transmitir el tráfico entre pares, ya que a menudo no es posible un conector directo entre los clientes" . Esto da la impresión de que WebRTC debería poder lograr una conexión P2P en un escenario donde es fácil de lograr.

[2] https://webrtcforthecurious.com/docs/03-connecting/ afirma: "WebRTC reunirá toda la información que pueda y hará todo lo posible para lograr una comunicación bidireccional entre dos agentes WebRTC". Esto también da la impresión de que WebRTC debería poder lograr una conexión P2P en un escenario donde es fácil de lograr.

[3] Canal de datos WebRTC con señalización manual, ¿ejemplo, por favor?

over 4 years ago · Santiago Trujillo
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda