Je pense que c'est une question très classique, mais, ayant des antécédents, je n'ai plus assez de vocabulaire pour rechercher et comprendre correctement sur le Web.
Disons que j'ai un réseau domestique avec 192.168.0.1 (IP.1) et 192.168.0.2 (IP.2) et que nous jouons tous les deux sur Counter Strike en frappant exactement le même serveur extérieur.
Comment mon routeur domestique sait-il quel paquet ira à IP.1? Je lis souvent des trucs avec des adresses NAT et xxx.xxx/y. ** Où est écrite la partie / y dans la pile TCP / IP?
Avons-nous absolument besoin de NAT pour cela? Ce que j'ai compris de l'article de Wikipedia, c'est que le NAT est fait pour optimiser les adresses IP, lorsque certains ordinateurs sont éteints. Est-ce que cela permet également de connecter 5 appareils avec seulement 1 IP publique?
Réponses:
(Pour ce qui suit, j'ignorerai toute recherche DNS ou action de couche deux, car ce n'est pas la partie pertinente pour l'histoire NAT.)
Toute connexion TCP est un tuple de quatre parties:
En bref: l'IP de destination est utilisée pour acheminer le paquet vers la bonne machine, le port de destination est utilisé pour amener le paquet sur cette machine vers le bon programme / session L'IP source est utilisée pour savoir où envoyer les réponses. Il en va de même pour le port source. Lorsqu'une réponse est envoyée, la source et la destination sont simplement échangées.
Commençons par deux ordinateurs sans NAT:
1.1.1.1
3.3.3.3
80
Lorsqu'un ordinateur demande une page Web, il sélectionne d'abord un numéro de port inutilisé aléatoire dans la plage aléatoire (1024-65535). Choisissons
2345
. Ensuite, la séquence suivante se produira: l'ordinateur envoie son paquet avec: IP1.1.1.1
source, port source2345
, IP de3.3.3.3
destination, port de destination80
. Les paquets arrivent sur le serveur Web, il voit sa propre adresse IP et son propre port80
, il sait donc qu'il s'agit d'une demande de page Web. Le serveur Web renvoie ensuite la page Web en paquets avec IP3.3.3.3
source, port source 80, IP de1.1.1.1
destination, port de destination2345
. L'ordinateur reçoit ces paquets et sait de quelle page Web il s'agit, en raison du numéro de port2345
.Ces combinaisons de ports sont souvent écrites comme telles:
1.1.1.1:2345
et3.3.3.3:80
.Maintenant, le nombre d'ordinateurs sur Internet dépasse de loin le nombre d'adresses IPv4 disponibles. Pour préserver l'espace d'adressage, un ensemble de plages d'adresses privées a été introduit, qui peut être librement utilisé pour le partage d'adresses. Ces rangese sont appelés RFC1918 et sont les suivants:
Ces adresses ne figurent nulle part dans les tables de routage Internet, donc si vous envoyez un paquet avec une destination dans ces plages sur le réseau principal d'Internet, elles seront simplement supprimées. En effet, des millions de personnes utilisent les mêmes adresses. Ces adresses doivent être traduites en quelque chose d'utile pour Internet. C'est là qu'intervient la traduction d'adresses réseau:
Nous avons deux ordinateurs:
192.168.0.1
et B:192.168.0.2
1.1.1.1
.D'abord, les deux ordinateurs sélectionnent un port aléatoire: disons:
192.168.0.1:2345
et192.168.0.2:5432
.L'ordinateur A envoie son paquet avec la source
192.168.0.1:2345
et la destination3.3.3.3:80
. La passerelle traduit ce paquet en1.1.1.1:2345
destination source3.3.3.3:80
et se souvient que toutes les réponses à cette combinaison sont envoyées192.168.0.1
. Ainsi, quand il reçoit une réponse avec source3.3.3.3:80
et destination1.1.1.1:2345
, il la traduit en source3.3.3.3:80
et destination192.168.0.1:2345
et envoie le paquet.L'ordinateur B envoie son paquet avec la source
192.168.0.2:5432
et la destination3.3.3.3:80
. La passerelle traduit ce paquet en1.1.1.1:5432
destination source3.3.3.3:80
et se souvient que toutes les réponses à cette combinaison sont envoyées192.168.0.2
. Ainsi, quand il reçoit une réponse avec source3.3.3.3:80
et destination1.1.1.1:5432
, il la traduit en source3.3.3.3:80
et destination192.168.0.2:5432
et envoie le paquet.Si les deux ordinateurs sélectionnent le même numéro de port source, la passerelle choisira simplement un autre numéro de port source gratuit et n'oubliez pas de traduire également le numéro de port. Ceci est parfois appelé PAT (Port Address Translation). Il s'agit essentiellement d'un sous-ensemble de NAT.
Il y a plusieurs implémentations à tout cela. La passerelle peut simplement se souvenir uniquement de "l'ordinateur X a utilisé le port source Y" et transmettre tout ce qui a le port Y à l'ordinateur X. Elle peut se rappeler que l'ordinateur X a utilisé le port source Y et la destination Z "et ne renvoyer que du port Z au port Y vers ordinateur X. Ou il y a l'option qu'il se souvient de l'intégralité du tuple et envoie uniquement du trafic vers l'ordinateur X qui correspond à l'IP et au port source / destination.
la source