Comment NAT partage-t-il une adresse IPv4 publique entre plusieurs adresses IPv4 privées [fermé]

10

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?

Nicolas Zozol
la source
One-to-Many devrait répondre à vos questions. En outre, les questions de réseautage à domicile et d'éducation de niveau d'entrée ne sont pas les mieux adaptées à ce site.
Craig Constantine

Réponses:

14

(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:

<source IP> <source port> <destination IP> <destination port>

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:

  • L'ordinateur est IP 1.1.1.1
  • Le serveur Web a une adresse IP 3.3.3.3
  • Le port standard pour HTTP est 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: IP 1.1.1.1source, port source 2345, IP de 3.3.3.3destination, port de destination 80. Les paquets arrivent sur le serveur Web, il voit sa propre adresse IP et son propre port 80, il sait donc qu'il s'agit d'une demande de page Web. Le serveur Web renvoie ensuite la page Web en paquets avec IP 3.3.3.3source, port source 80, IP de 1.1.1.1destination, port de destination 2345. L'ordinateur reçoit ces paquets et sait de quelle page Web il s'agit, en raison du numéro de port 2345.

Ces combinaisons de ports sont souvent écrites comme telles: 1.1.1.1:2345et 3.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:

  • 192.168.0.0 - 192.168.255.255
  • 172.16.0.0 - 172.31.255.255
  • 10.0.0.0 - 10.255.255.255

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:

  • A: 192.168.0.1et B:192.168.0.2
  • Leur passerelle a une adresse IP publique de 1.1.1.1.
  • Nous gardons le même serveur Web.
  • Les deux ordinateurs veulent la même page Web à partir du même serveur.

D'abord, les deux ordinateurs sélectionnent un port aléatoire: disons: 192.168.0.1:2345et 192.168.0.2:5432.

L'ordinateur A envoie son paquet avec la source 192.168.0.1:2345et la destination 3.3.3.3:80. La passerelle traduit ce paquet en 1.1.1.1:2345destination source 3.3.3.3:80et se souvient que toutes les réponses à cette combinaison sont envoyées 192.168.0.1. Ainsi, quand il reçoit une réponse avec source 3.3.3.3:80et destination 1.1.1.1:2345, il la traduit en source 3.3.3.3:80et destination 192.168.0.1:2345et envoie le paquet.

L'ordinateur B envoie son paquet avec la source 192.168.0.2:5432et la destination 3.3.3.3:80. La passerelle traduit ce paquet en 1.1.1.1:5432destination source 3.3.3.3:80et se souvient que toutes les réponses à cette combinaison sont envoyées 192.168.0.2. Ainsi, quand il reçoit une réponse avec source 3.3.3.3:80et destination 1.1.1.1:5432, il la traduit en source 3.3.3.3:80et destination 192.168.0.2:5432et 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.

JelmerS
la source
Merci. Je pensais que n'importe quel client enverrait avec son port 80 à un autre port 80. Je pense que beaucoup de non-spécialistes pensent la même chose.
Nicolas Zozol