¿Cómo funciona Skype sin reenvío de puertos?

Estoy diseñando una aplicación p2p que funciona en el puerto 30000. Mi enrutador no es UPnP, así que tuve que reenviar un puerto al enrutador. Pero Skype otra aplicación p2p funciona sin reenvío de puertos en mi pc. Cuando lo analicé con wireshark encontré que usa el puerto UDP 48980, 58544. Estoy usando c ++.

Aquí hay una biblioteca en python que lo hace para los enrutadores Nat PnP . ¿Es posible reenviar el puerto mediante progtwigción al enrutador independientemente del tipo de enrutador y sistema operativo . ¿Cuál debería ser el enfoque para hacerlo en C ++ o en cualquier otro idioma?

Skype funciona de una manera muy interesante. Por lo que he leído (y esto hace un tiempo) funciona de la siguiente manera:

  • El servidor de Skype mantiene una lista de todos los usuarios y direcciones IP.
  • El usuario A de Skype desea hablar con el usuario B El usuario A de Skype envía un paquete de red a la dirección IP del usuario B y espera una respuesta. (el usuario B nunca recibe este paquete).
  • El usuario de Skype A notifica al servidor la combinación de IP / puerto en la que está esperando una respuesta
  • El servidor notifica al usuario B que envíe una respuesta a
  • el usuario A en el puerto especificado A se establece una conexión.

Esto es probablemente más simplificado pero la última vez que lo revisé, así es como funciona. (Que alguien me corrija si me equivoco).

Se describe muy bien en este artículo How-Skype-Co-get-round-firewalls

La perforación UDP es una de las formas de atravesar el NAT.

Debe usar un servidor intermediario e iniciar la comunicación desde el lado del cliente. Como mencionó Yossarian, desde ese punto, una posibilidad es la perforación de agujeros UDP. Según el tipo de aplicación (y si es verdaderamente P2P o no), puede mantener el servidor intermediario en su lugar todo el tiempo.

Skype utiliza otros pares como punto intermedio cuando la conexión directa no es posible.

es decir, el par A desea conectarse al par B, pero el par B tiene todos los puertos cerrados, luego la comunicación se inicia a través del par C que tiene puertos abiertos.

Tener algo de experiencia en la implementación de aplicaciones P2P y hacer que funcionen detrás de los enrutadores NAT.

Skype usa perforación UDP para trabajar detrás de enrutadores NAT. Escribí un artículo e hice un video de demostración para ayudar a otros a implementar aplicaciones similares. También se proporcionan enlaces a bibliotecas útiles que hacen la mayor parte del trabajo de campo como libutp, aquí.

>>> perforación de agujeros UDP Video de demostración y Libs útiles.