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


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

Hay una biblioteca en python aquí que lo hace para enrutadores Nat PnP. ¿Es posible reenviar programáticamente el puerto a router independientemente del tipo de router y del sistema operativo. Cuál debería ser el enfoque para hacerlo en c++ o cualquier otro lenguaje.

Author: Pekka 웃, 2009-10-08

6 answers

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

  • El servidor de Skype mantiene una lista de todos usuarios e IPs.
  • El usuario de Skype A quiere hablar con el usuario B El usuario de Skype A envía a 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 de IP / puerto combinación en la que está esperando para una respuesta
  • El servidor notifica al usuario B para enviar un respuesta a
  • usuario A en el puerto especificado Se realiza una conexión.

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

 20
Author: rein,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-10-08 17:41:12

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

 25
Author: Martin Beckett,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-03-09 04:42:36

La perforación de agujeros UDP es (una) de formas de atravesar el NAT.

 18
Author: nothrow,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-10-08 18:03:01

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

 3
Author: Joe,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-10-08 17:41:02

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

Es decir, el par A quiere 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.

 0
Author: ,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-10-08 18:05:59

Tiene algo de experiencia en la implementación de aplicaciones P2P y conseguir que trabajen detrás de routers NAT.

Skype utiliza perforación de agujeros UDP para trabajar detrás de enrutadores NAT. He escrito un artículo y he hecho un video de demostración para ayudar a otros a implementar aplicaciones similares. También proporcionó enlaces a bibliotecas útiles que hacen la mayor parte del trabajo de base como libutp, aquí.

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

 0
Author: Rakesh Gopal,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-10-14 07:27:15