web-dev-qa-db-fra.com

Comment fonctionne Skype sans redirection de port?

Je conçois une application p2p qui fonctionne sur le port 30000. Mon routeur n'est pas UPnP j'ai donc dû transmettre un port au routeur. Mais Skype une autre application p2p fonctionne sans redirection de port sur mon PC. Lorsque je l'ai analysé avec wirehark, j'ai trouvé son utilisation du port UDP 48980, 58544. J'utilise c ++.

Il y a une bibliothèque dans python ici qui le fait pour les routeurs Nat PnP . Is il est possible de transmettre par programme le port au routeur indépendamment du type de routeur et du système d'exploitation . Quelle devrait être l'approche pour le faire en c ++ ou dans tout autre langage.

32
Xinus

Skype fonctionne d'une manière très intéressante. D'après ce que j'ai lu (et il y a un certain temps), cela fonctionne comme suit:

  • Le serveur Skype conserve une liste de tous les utilisateurs et IP.
  • L'utilisateur Skype A souhaite parler à l'utilisateur B
  • L'utilisateur Skype A envoie un paquet réseau à l'adresse IP de l'utilisateur B et attend une réponse. (l'utilisateur B n'obtient jamais ce paquet).
  • L'utilisateur Skype A informe le serveur de la combinaison IP/port sur laquelle il attend une réponse
  • Le serveur demande à l'utilisateur B d'envoyer une réponse à l'utilisateur A sur le port spécifié
  • Une connexion est établie.

C'est probablement trop simplifié mais la dernière fois que j'ai vérifié, c'est comme ça que ça marche. (Quelqu'un me corrige si je me trompe).

Edit: problème de puce fixe

20
rein

Perforation de trous UDP est (une) des façons de traverser le NAT.

18
nothrow

Vous devez utiliser un serveur intermédiaire et initier la communication du côté client. Comme Yossarian l'a mentionné, à partir de ce moment-là, une possibilité est la perforation UDP. Selon le type d'application (et s'il s'agit vraiment de P2P ou non), vous pouvez garder le serveur intermédiaire en place tout le temps.

3
Joe

Avoir une certaine expérience dans la mise en œuvre des applications P2P et les faire fonctionner derrière les routeurs NAT.

Skype utilise la perforation UDP pour travailler derrière les routeurs NAT. J'ai écrit un article et réalisé une vidéo de démonstration pour aider les autres à mettre en œuvre des applications similaires. comme libutp, ici.

>>> Vidéo de démonstration de perforation UDP et Libs utiles.

0
Rakesh Gopal