Question

Je sais que le mot « connexion » n'est pas vraiment approprié quand on parle de UDP, mais ...

Comment un serveur (celui avec l'adresse IP connue) obtenir ses paquets UDP via Internet à un client qui se trouve derrière NAT?

Par exemple: dire un client se connecte et authentifie au serveur en utilisant une messagerie sur TCP. A ce stade, le serveur est prêt à démarrer le streaming de données au client sur UDP, mais comment le serveur sait où traiter les paquets UDP afin qu'ils trouveraient leur chemin à travers les routeurs NAT au client?

Si le poing client envoie un « Je suis prêt pour la diffusion en continu s'il vous plaît » message via UDP, les routeurs NAT seraient garder le port ouvert afin que le serveur puisse répondre avec son flux de données UDP?

Ou suis-je WAAY sur la bonne voie ici?

Était-ce utile?

La solution

En général, le NAT en face du client au niveau TCP sera en mesure de déterminer que la connexion à l'UDP a été crée. Cela dit, le NAT sur le côté client devra être configuré pour accepter les paquets UDP du port du serveur SRC, puis les transmettre à l'adresse IP de destination interne (client). La chose importante à retenir si NAT est qui est l'appelant et qui est l'appelé. La mise en œuvre diffèrent NATs et capablity donc un simple générique à mettre en œuvre la solution est probablement ce que vous voudrez peut-être à mettre en œuvre, en fonction de vos besoins.

Vous avez raison de supposer, je pense que dans votre client de cas ne sera pas en mesure de recevoir le flux UDP dans l'information. Dans votre cas, votre client devra envoyer son IP WAN à votre serveur pour lancer la connexion UDP. Trouver vos clients WAN IP peut être difficile, mais il y a des sites qui aideront votre DETERMINATION votre WAN IP en le retournant dans une page de texte.

Si la connexion UDP est créé après la connexion TCP par le serveur une socket au client à un port UDP connu alors, UPnP peut être intéressant de regarder en elle vous permettra de configurer automatiquement vos attaquants de port sur votre NAT, c'est que si votre NAT prend en charge UPnP comme dans le cas des routeurs DSL.

Un travail d'un tour serait de client pour ouvrir les sockets TCP et UDP au serveur. Étant donné que le client derrière le NAT a initié la connexion les états des deux connexions TCP et UDP seront ajoutés à la table de connexion du NAT.

Autres conseils

Ignorant la disposition de la traduction de port connue (données sur les ce Port va cette adresse) dans votre routeur (fournissant le NAT), vous pouvez utiliser UDP Perforation .

Je suppose que vous ne parlez pas de multicasting, dans lequel chaque pair se joint à un groupe et annonce que les parties intéressées (dans ce cas, le routeur), qui peut ensuite effectuer le routage approprié. Bien que ce soit normalement utilisé pour le routage du trafic efficacement à plusieurs hôtes, le mécanisme de routage par groupe travaillerait pour vous décrire ci-dessus.

Si vous parlez des protocoles de streaming comme SIP ou RTSP alors la façon dont il fonctionne est que le port UDP le client veut que le serveur envoie à est spécifié dans l'appel mis en place demande.

Le serveur envoie à ce port et le trafic peut ou ne peut pas passer au client selon que le NAT a traduit le choix de clien't du port à un autre numéro ou pas.

Lorsque le serveur reçoit son premier paquet UDP ruisselait du client et si elle est sur un port différent de celui qu'il envoyait sur il passera à elle. Cela permet à l'UDP du serveur passer à travers le NAT puisque le client a déjà créé le mappage NAT en envoyant au serveur.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top