¿Cómo establecer comunicación Peer to Peer sin reenvío de puertos?

¿Cómo establecer comunicación Peer to Peer sin reenvío de puertos?

Mi ISP me proporciona una dirección IP estática local. ¿Cómo puedo establecer una conexión con otra computadora en Internet sin tener una dirección IP pública? Sólo quiero crear una aplicación sencilla que pueda enviar datos de un lado a otro a otra computadora fuera de mi red local. Sé un poco sobre el reenvío de puertos, pero desafortunadamente mi ISP no puede reenviar puertos por mí. ¿Es realmente posible sin reenvío de puertos? ¿Cómo? Gracias.

Respuesta1

Si la otra parte puede configurar el reenvío de puertos (o no usa NAT), ya está. Una conexión TCP siempre es compatible con dúplex.

Si eso no es posible, puedes recurrir a "Perforación de agujeros", una técnica que engaña a los dispositivos NAT para que permitan una conexión "entrante", con la ayuda de un tercero accesible universalmente.

Tomado del artículo vinculado, el principio básico:

    • El par A envía un SYN al par B
    • El par B envía un SYN al par A
    • Cuando NAT-a recibe el SYN saliente del par A, crea una asignación en su máquina de estados.
    • Cuando NAT-b recibe el SYN saliente del par B, crea una asignación en su máquina de estados.
  1. Ambos SYN se cruzan en algún lugar a lo largo de la ruta de la red, luego:

    • SYN del par A alcanza NAT-b, SYN del par B alcanza NAT-a
    • Dependiendo del momento de estos eventos (en qué parte de la red se cruza el SYN), al menos uno de los NAT dejará pasar el SYN entrante y lo asignará al par de destino interno.
  2. Al recibir el SYN, el par envía un SYN+ACK y se establece la conexión.

información relacionada