Comment le routeur sait-il où transférer le paquet

68

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 est-ce que cela fonctionne exactement?

Kornelije Petak
la source

Réponses:

78

La plupart des routeurs domestiques utilisent un cas particulier 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. Le port source est également modifié, 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 l'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.

Paul
la source
3
Pour résumer, le routeur utilise des numéros de port pour se rappeler des éléments de l'extérieur du réseau local et de ceux de l'intérieur du réseau. Cependant, cela n'explique pas comment il www.google.comme trouverait si je ne lui envoyais pas une demande initiale. En d'autres termes, les messages ne peuvent me parvenir via le routeur que si j'ai initialement envoyé une demande via le routeur
CodyBugstein
2
@Imray google.com (ou quoi que ce soit d'autre sur Internet) ne peut pas trouver votre ordinateur si celui-ci n'a pas lancé la demande. C'est pourquoi avoir un routeur ajoute beaucoup de sécurité.
Jason
6
@ Jason C'est un mythe dangereux. Avoir un pare - feu ajoute la sécurité. Le travail typique d’un routeur SoHo consiste simplement à faire fonctionner les choses, pas à les empêcher de fonctionner. Voir ici pour plus d'informations.
David Schwartz
1
@Jason Mieux vaut ne pas supprimer votre commentaire, cela rendrait ce qui aurait été une discussion utile à lire, impossible à lire.
Barlop
2
Bel exemple, mais cela signifie-t-il que tous les ports dont le nombre est élevé sont toujours ouverts sur nos routeurs?
Jiggunjer
1

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 sur NAPT, avec un mot sur les défauts de son simple cousin, Basic NAT:

Le NAT de base effectue uniquement la réécriture des adresses IP. En substance, 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 à l’échelle mondiale 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 identifiants de la couche transport (ports pour TCP et UDP, identifiants de requête pour ICMP) afin de différencier l’hôte du côté privé du NAT associé à un paquet particulier (voir la Figure 7- 4) Cela permet à un grand nombre d’hôtes internes (c.-à-d., plusieurs milliers) pour accéder à Internet simultanément en utilisant un nombre limité d’adresses publiques, souvent une seule. Nous utiliserons habituellement le terme NAT pour inclure à la fois le NAT traditionnel et le NAPT, à moins que la distinction ne soit importante dans un contexte particulier.

CodyBugstein
la source