90 votes

Comment est-ce que le routeur sait où transmettre le paquet ?

Si plusieurs ordinateurs avec des adresses locales (192.168.0.#) sont connectés à un routeur et que chaque ordinateur ouvre un navigateur web et demande une page via HTTP, lorsque ces paquets TCP:80 sont envoyés, le routeur remplace l'adresse locale par l'IP statique du routeur (c'est-à-dire l'IP fournie par le fournisseur) afin que le serveur puisse répondre à l'adresse appropriée.

Mais comment le routeur sait-il vers quel ordinateur transmettre la réponse HTTP, puisque l'en-tête TCP ne contient pas l'adresse IP locale (n'est-ce pas ?), et que tous les ordinateurs utilisent le port 80 ?

Cela a-t-il quelque chose à voir avec les adresses MAC ?

Comment cela fonctionne-t-il exactement ?

103voto

Paul Points 1153

La plupart des routeurs domestiques utilisent une forme spéciale de NAT appelée PAT.

Vous le verrez également appelé NAPT ou masquage d'IP. Tous ces termes signifient la même chose dans un usage général. (Les acronymes - Network Address Translation / Port Address Translation / Network Address Port Translation)

Lorsque le paquet sort de votre machine interne, l'adresse source est réécrite comme vous le savez. Le port source est également modifié, généralement vers un nombre élevé, et le routeur garde une table de traduction d'adresses.

Par exemple, disons que vous avez une machine cliente qui va sur www.google.com. Votre ordinateur (par exemple, 192.168.1.100) recherche cette adresse et établit une connexion TCP avec 72.14.204.147 sur le port 80 à partir de votre adresse IP interne, en utilisant un port source aléatoire.

À votre ordinateur, la connexion ressemble à ceci :

192.168.1.100:37641   <-->  72.14.204.147:80

Votre ordinateur envoie le paquet au routeur, qui choisit un nouveau port élevé aléatoire et réécrit le paquet. Chaque connexion sortante obtient son propre port sur le routeur. Le routeur transmet ensuite le paquet à votre FAI après l'avoir ajouté à sa table de connexion :

IPPrivée        PortPrivé   IPublic      PortPublic    Distant          PortDistant
-------------    ----------    -----------   -----------   ----------      -----------
192.168.1.100    37641         *10.6.23.5    59273         72.14.204.147   80

* À des fins d'exemple, j'ai utilisé une adresse commençant par 10, mais celles-ci ne sont pas routables publiquement. La table est également quelque peu simplifiée.

Pour Google, la connexion ressemble à ceci :

10.6.23.5:59273   <-->  72.14.204.147:80

Google enverra sa réponse à 10.6.23.5 sur le port 59273. Votre routeur recherche alors ces informations dans la table et transmet le paquet à 192.168.1.100:37641.

1voto

CodyBugstein Points 1385

Les routeurs entre le réseau local et le reste de l'Internet utilisent une technique appelée NAT.

Juste un extrait de TCP/IP Illustrated Volume 1 sur le NAPT, avec un mot sur les insuffisances de son cousin simple, le NAT de base :

Le NAT de base effectue uniquement le réadressage des adresses IP. En essence, une adresse privée est réadressée pour devenir une adresse publique, souvent à partir d'un pool ou d'une plage d'adresses publiques fournies par un FAI. Ce type de NAT n'est pas le plus populaire car il ne contribue pas à réduire de manière significative le besoin en adresses IP - le nombre d'adresses routables au niveau mondial doit être égal ou supérieur au nombre d'hôtes internes souhaitant accéder simultanément à Internet. Une approche beaucoup plus populaire, le NAPT, consiste à utiliser les identifiants de la couche de transport (c'est-à-dire les ports pour TCP et UDP, les identifiants de requête pour ICMP) pour différencier quel hôte du côté privé du NAT est associé à un paquet particulier (voir Figure 7-4). Cela permet à un grand nombre d'hôtes internes (c'est-à-dire plusieurs milliers) d'accéder simultanément à Internet en utilisant un nombre limité d'adresses publiques, souvent une seule. Nous utiliserons ordinairement le terme NAT pour inclure à la fois le NAT traditionnel et le NAPT, sauf si la distinction est importante dans un contexte particulier.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X