web-dev-qa-db-fra.com

Comment le routeur sait-il où transférer 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 TCP: 80 paquets sont envoyés, le routeur bascule l'adresse locale avec le IP statique du routeur (c.-à-d. IP donnée par le fournisseur) afin que le serveur puisse répondre à l'adresse appropriée.

Mais comment le routeur sait-il à quel ordinateur envoyer la réponse HTTP, puisque l'en-tête TCP ne contient pas l'adresse IP locale (le fait-il?) Et que tous les ordinateurs utilisent le port 80?

Est-ce que cela a quelque chose à voir avec les adresses MAC?

Comment ça marche exactement?

67
Kornelije Petak

La plupart des routeurs domestiques utilisent un cas spécial de NAT appelé PAT.

Vous verrez également qu'il est appelé NAPT ou IP Masquerading. Les trois derniers termes signifient la même chose en usage général. (Les acronymes - traduction d'adresse réseau/traduction d'adresse de port/traduction de port d'adresse réseau)

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

Par exemple, disons que vous avez un ordinateur client qui va sur www.google.com. Votre ordinateur (par exemple, 192.168.1.100) recherche cette adresse et établit une connexion TCP vers 72.14.204.147 sur le port 80 à partir de votre adresse IP interne, à l'aide d'un port source aléatoire.

Pour votre ordinateur, la connexion ressemble à ceci:

192.168.1.100:37641   <-->  72.14.204.147:80

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

PrivateIP        PrivatePort   PublicIP      PublicPort    Remote          RemotePort
-------------    ----------    -----------   -----------   ----------      -----------
192.168.1.100    37641         *10.6.23.5    59273         72.14.204.147   80

* À titre d'exemple, j'ai utilisé une adresse commençant par 10, mais celles-ci ne sont pas publiquement routables. La table est aussi un peu simpliste.

Pour google, la connexion ressemble à ceci:

10.6.23.5:59273   <-->  72.14.204.147:80

Google enverra sa réponse au 10.6.23.5 sur le port 59273. Votre routeur recherchera ensuite ces informations dans la table et transmettra le paquet à 192.168.1.100:37641.

77
Paul

Les routeurs situés entre le réseau local et le reste d’Internet utilisent une technique appelée NAT.

Juste un extrait de TCP/IP Illustrated Volume 1 à propos de NAPT, avec un mot sur les faiblesses de son simple cousin, Basic NAT:

Basic NAT effectue uniquement la réécriture des adresses IP. Essentiellement, une adresse privée est réécrite pour devenir une adresse publique, souvent à partir d’un groupe ou d’une plage d’adresses publiques fournies par un fournisseur de services Internet. Ce type de NAT n'est pas le plus répandu car il ne permet pas de réduire considérablement le besoin d'adresses IP. Le nombre d'adresses routables globalement doit être égal ou supérieur au nombre d'hôtes internes souhaitant accéder à Internet. simultanément. Une approche beaucoup plus populaire, NAPT implique l’utilisation des identificateurs de la couche transport (ports pour TCP et UDP, identificateurs de requête pour ICMP) afin de différencier quel hôte du côté privé du NAT. _ est associé à un paquet particulier (voir la 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 habituellement le terme NAT pour inclure à la fois les méthodes traditionnelles NAT et NAPT, à moins que la distinction ne soit importante dans un contexte particulier.

1
CodyBugstein