UDP, la perforation de l'Algorithme
Quelqu'un peut-il donner un exemple d'une UDP perforation ?
En fait, je veux écrire un programme de chat avec laquelle les gens peuvent discuter quand ils savent les uns des autres IP. Mais les deux machines seront derrière un pare-feu du routeur. Donc, j'ai besoin de percer un trou afin de pouvoir communiquer.
Je voudrais une fonction telle que, sur l'appel de la fonction, un trou aurait été des coups de poing et à l'avenir des communications devrait passer facilement - si ce n'est pas trop demander 🙂
Possible dupe de: stackoverflow.com/questions/8523330/programming-p2p-application/...
Il n'est pas simple de fonction que vous pouvez simplement appeler qui permettra de résoudre tous vos NAT traversal problèmes. Voir le lien ci-dessus pour une plus longue discussion sur NAT traversal et le P2P.
Il n'est pas simple de fonction que vous pouvez simplement appeler qui permettra de résoudre tous vos NAT traversal problèmes. Voir le lien ci-dessus pour une plus longue discussion sur NAT traversal et le P2P.
OriginalL'auteur | 2012-01-17
Vous devez vous connecter pour publier un commentaire.
Réponse courte: il ne peut pas être fait de manière fiable.
Réponse Longue:
"Perforation" se réfère à déclenchement automatique des règles de NAT du routeur pour autoriser le trafic entrant. Lorsque vous envoyez un paquet UDP, le routeur (généralement) crée une règle temporaire de cartographie votre adresse source et le port vers l'adresse de destination et le port, et vice versa. Des paquets UDP de retour à partir de l'adresse de destination et le port (et aucune autre) sont transmis par le biais de la source d'origine, l'adresse et le port (et aucune autre). Cette règle expire au bout de quelques minutes d'inactivité.
Se présente au travail lorsque les deux points d'extrémité sont derrière des Nat ou pare-feu exigerait que les deux points d'extrémité envoyer des paquets les uns les autres à la même époque. Cela signifie que les deux parties doivent connaître les uns les autres public les adresses IP et les numéros de port et de la nécessité de communiquer à l'autre par d'autres moyens.
Il n'y a pas de voie pour un programme permettant de déterminer directement sa propre adresse IP publique si elle est derrière un NAT (il va seulement voir son adresse privée, comme
192.168.x.x
). Mais puisque vous êtes en supposant que les êtres humains impliqués connaître les uns les autres adresses IP, ces humains pouvez simplement taper dans l'autre adresse.Mais le vrai problème, c'est qu'il est également impossible pour un programme permettant de déterminer directement ce numéro de port du routeur à l'aide du côté du public. Votre programme peut être lié à 12345 sur la machine locale, mais le routeur peut carte à presque n'importe quel port du côté du public. (Imaginez deux ordinateurs sur votre réseau local, tant pour l'envoi de port 12345, évidemment le routeur aura de la carte l'un d'eux à un autre numéro.) Donc, même si vous et l'homme peut savoir ce numéro de port local, vous, il n'y a aucun moyen de savoir quel numéro de port du routeur montrera au monde.
Il est exact que le problème va en grande partie à l'écart si vous pouvez de manière fiable atteindre un tiers de relais. @c.adhityaa n'a pas vraiment dire que la communication directe a été une exigence, de sorte que j'ai dû poser la question. Aussi, si vous vous détendre sur la fiabilité exigence, puis d'avoir les deux pairs d'envoyer simultanément les uns les autres un peu de datagrammes un intervalle d'une seconde peut travailler beaucoup de temps. Je suis habituée à gérer les pare-feu d'entreprise, donc j'ai peut-être trop pessimiste à propos de ce que le réseau le permet.
OriginalL'auteur Seth Noble
Lidgren de la mise en réseau de la bibliothèque dispose de cette fonctionnalité intégrée. Après l'ajout de la bibliothèque de votre application, vous instanciez un NetServer, ont deux NetClients se connecter, et d'appeler NetServer.Introduire().
Lien vers Lidgren: https://github.com/lidgren/lidgren-network-gen3
OriginalL'auteur Jason