35 votes

Exemple de perforation Java UDP - Connexion à travers un pare-feu

Disons que j'ai deux ordinateurs.

Ils savent les uns des autres publics et privés IPs via ice4j.

Un client à l'écoute et de l'autre l'envoi d'une chaîne de caractères.

J'aimerais voir cela se produire via UPD perforation:

Let A be the client requesting the connection

Let B be the client that is responding to the request

Let S be the ice4j STUN server that they contact to initiate the connection
--
A sends a connection request to S

S responds with B's IP and port info, and sends A's IP and port info to B

A sends a UDP packet to B, which B's router firewall drops but it still
punches a hole in A's own firewall where B can connect

B sends a UDP packet to A, that both punches a hole in their own firewall,
and reaches A through the hole that they punched in their own firewall

A and B can now communicate through their established connection without 
the help of S

Pouvait-on post pseudo exemples de la façon de faire de la perforation par NAT symétrique? En supposant qu'il sera serveur S qui les aideront à deviner les numéros de port et d'établir la connexion entre le client A et B.

Il serait bien si vous comptabilisés double NAT ainsi.

NOTE:

Vous pouvez utiliser PARALYSANT pour découvrir l'IP et le Port, mais vous devez écrire votre propre code envoie l'IP:Port de votre serveur via keepalive technique.

Une fois un client identifie l'autre via l'ID unique sur le serveur, il vous sera fourni avec l'autre client IP:port info pour UDP perforatrice les données dont il a besoin pour envoyer et recevoir des.

Petite mise à jour:

Il y a de la bibliothèque qui se profile à l'horizon pour java check it out:
https://github.com/htwg/UCE#readme

10voto

Yahia Points 49011

Votre question est vraiment large, je ne peux pas vous donner un exemple, mais les liens suivants peuvent vous aider (spécifications, des bibliothèques, des échantillons, etc.):

6voto

JVerstry Points 12414

Votre question n'est pas de Java est relative. Si vous savez comment faire pour ouvrir une connexion UDP, c'est assez. Lire le contenu de l'en suivant le lien. Ne soyez pas effrayés par le titre, il couvre également UDP. Le reste n'est qu'en Java.

P. S.: Dans votre scénario, il manque une étape. A et B doivent avoir une connexion ouverte sur S, parce que S besoin de dire à B que A est d'essayer de l'atteindre. Si B n'a pas une connexion ouverte sur S, il n'existe aucun moyen A et B peuvent commencer à communiquer ensemble.

Mise à JOUR

La réponse faite par Jason contient des erreurs et de la spéculation sauvage sur NAT traversal. Il faut lire le travail effectué par Saikat Guha (mpi-sws.org/~françois/imc05-tcpnat.pdf) pour vraiment comprendre cette question. Le cône de classification de Wikipédia est complètement obsolète et trompeuse.

6voto

vladimir e. Points 485

STUN fonctionne essentiellement comme suit: votre client derrière le pare-feu se connecte à un serveur STUN à l'extérieur du pare-feu. Le serveur STUN inspecte les paquets reçus du client et envoie au client une réponse contenant les clients IP et le port comme ils semblent le serveur STUN.

C'est de cette façon le client derrière le pare-feu découvre sa propre adresse IP externe et port. Autant que je sache, un serveur STUN n'est normalement pas de passer des informations d'adresse d'un client à un autre.

Généralement STUN est utilisé pour configurer les flux de médias à travers les pare-feu, lorsque le pare-feu est déjà ouvert à la signalisation de la circulation par exemple, en VoIP: client communique avec un serveur STUN de découvrir sa propre adresse IP et le port pour le trafic UDP, il envoie sa demande de signalisation (SIP INVITER ou autre) pour l'autre client sur un bien-connu ouvrir le port - y compris son externe UDP adresse de l'info dans la charge utile (SDP ou quoi que ce soit). Donc, généralement, un client doit être accessible via un port ouvert pour la signalisation du peer-to-peer de communication.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X