Comment les paquets de réponse IP atteignent-ils leur destination à l'intérieur d'un LAN privé? [dupliquer]

26

C'est une petite question théorique qui me déroute depuis assez longtemps.

Fondamentalement, si nous sommes à l'intérieur d'un réseau local privé et que nous voulons que les paquets entrants atteignent, par exemple, un serveur HTTP situé sur l'une des machines, nous transmettons les ports afin que les paquets entrants atteignent exactement cet ordinateur.

Maintenant, je suis assez confus quant à la façon dont les paquets de «réponse» atteignent leur destination à l'intérieur d'un LAN, comme lorsque nous ouvrons une page Web ou plus. Je ne trouve pas vraiment d'informations utiles sur ce sujet.

J'espère que quelqu'un pourra me donner quelques indices ou me lier à des informations qui pourraient l'expliquer. Merci.

EDIT: Je pense que je devrais clarifier. Un exemple de ce que je demande serait quelque chose comme ceci:
1. Un ordinateur à l'intérieur d'un LAN avec une seule adresse IP externe essaie de charger une page Web à partir d'un serveur Web en dehors de ce LAN (essentiellement sur Internet)
2 Le serveur Web répond et renvoie la page Web à cet ordinateur.

Ce qui m'embrouille beaucoup à ce stade, comment le routeur sait-il quel ordinateur envoyer les données entrantes (étant donné que le routeur est connecté à un réseau local avec plusieurs ordinateurs) sans transfert de port précédent.

InsomniaArray
la source
Je viens de regarder une belle vidéo sur le sujet: Traduction d'adresses réseau - Computerphile
Der Hochstapler

Réponses:

56

Même si la question a été entièrement couverte. Je pense que ce processus devrait être décrit étape par étape.

Pour cet exemple, je suis assis dans un LAN privé connecté à Internet via un routeur. Parce que notre réseau partage une seule adresse IP publique, nous utilisons NAT.

Ainsi, lorsque je demande la page superuser.comqui générera de nombreux paquets IP. Regardons un seul.


Source du paquet IP : 192.168.1.12(mon IP)
Destination: 64.34.119.12(superuser.com)

Maintenant, mon système est probablement configuré comme celui en question. J'ai ma propre adresse IP ( 192.168.1.12), un masque de sous-réseau ( 255.255.255.0) et une passerelle par défaut ( 192.168.1.1). Maintenant, comme mon champ de destination dans mon paquet IP pointe vers un réseau différent du mien, il est envoyé à ma passerelle par défaut (plutôt qu'à l'ordinateur directement).

Mais comment le paquet peut-il accéder à la passerelle par défaut, si la destination pointe complètement ailleurs?

Ethernet

C'est facile, car nous utilisons l'adressage du protocole Ethernet pour cela. Nous venons de définir notre adresse IP de destination dans le paquet IP et l'adresse MAC de notre passerelle par défaut comme destination dans la trame Ethernet .

Maintenant, cela garantira que notre passerelle par défaut reçoit le paquet superuser.com. Yay!

Maintenant, la passerelle a notre paquet et pourrait l'envoyer directement sur son chemin. Mais pour s'assurer qu'il obtiendra la réponse, il doit d'abord remplacer l' adresse source du paquet (sinon superuser.com, j'essaierais d'envoyer la réponse à un appareil (éventuellement) inexistant avec mon adresse IP sur leur réseau. Maintenant, ce ne serait pas très agréable.)
Mon routeur placera donc son adresse IP publique dans le champ Source :


Source du paquet IP : 92.69.127.243(mon adresse IP publique)
Destination: 64.34.119.12(superuser.com)

Maintenant, ce même jeu continue encore et encore avec tous les routeurs du monde jusqu'à ce que le paquet arrive enfin superuser.comet qu'une réponse soit générée.

La réponse

Réponse IP Packet
Source: 64.34.119.12(superuser.com)
Destination: 92.69.127.243(mon IP publique)

Ok, la réponse est arrivée à mon routeur, et maintenant? Comment mon routeur sait-il maintenant envoyer la réponse 192.168.1.12?

TCP

Eh bien, cela fonctionne réellement parce que nous n'avons examiné que les parties IP et Ethernet de la communication. Ce qui fait que cela fonctionne, c'est la partie TCP.

Vous savez très probablement que les serveurs Web fonctionnent généralement sur le port 80. IP n'a aucune notion de ports . Cela vient de TCP . En TCP, nous avons (comme en IP) un port source et de destination .

Mon paquet TCP vers superuser.com
Source: 192.168.1.12(mon IP)
Port source: 11111(le port créé par mon ordinateur)
Destination: 64.34.119.12(superuser.com)
Port de destination:80

Lorsque votre routeur envoie ce paquet initial (qui est adressé au superuser.comport 80), il y mettra un nouveau port source (comme 12345).
Et c'est la partie importante! Il se souviendra de ce remplacement!

Paquet TCP de mon routeur vers superuser.com
Source: 92.69.127.243(mon IP publique)
Port source: 12345(le port créé par mon routeur)
Destination: 64.34.119.12(superuser.com)
Port de destination:80

Ainsi, le paquet de réponses reçu par le routeur ressemble en fait à ceci:
Répondre au paquet TCP de superuser.com
Source: 64.34.119.12(superuser.com)
Port source: 80
Destination: 92.69.127.243(mon IP publique)
Port de destination: 12345(le port que mon routeur a constitué)

Alors maintenant, il obtient ce paquet et voit que c'est pour un port dont il se souvenait précédemment a été affecté aux opérations NAT pour l'adresse IP 192.168.1.12(mon adresse IP).

Répondre au paquet TCP depuis mon routeur
Source: 64.34.119.12(superuser.com)
Port source: 80
Destination: 192.168.1.12(mon IP)
Port destination: 11111(le port que mon ordinateur a créé)

Der Hochstapler
la source
1
J'ai modifié votre réponse, elle ne montrait pas clairement ce qui arrivait aux numéros de port. J'ai ajouté plus d'exemples sur les étapes intermédiaires et ce que les numéros de port où chaque étape.
Scott Chamberlain
1
@OliverSalzburg Je cherchais la réponse à la même question et votre explication m'a aidé à me souvenir, juste une question rapide à ce sujet. Vous vous demandez combien de temps le routeur conserverait ces mappages inversés (port source) donne l'impression qu'il manquerait d'espace s'il continue à le faire pour tant de demandes, les vide-t-il trop régulièrement?
Ahmed
@Ahmed: La quantité de mémoire pour garder une trace de ces informations est limitée. Il y a 65536 numéros de port possibles, ils sont stockés sur 2 octets. Ainsi, se souvenir d'une adresse IP (4 octets) pour chaque port équivaudrait à 65536 x 4 octets = 262144 octets = 256 ko. Cependant, les détails sont implémentés dans le routeur, ce n'est pas beaucoup de mémoire.
Der Hochstapler
@Oliver Excellente réponse, exactement ce que je cherchais! J'ai quelques questions - (1) "le même jeu continue avec tous les routeurs du monde" - est-ce exact? Certes, le champ source ne continuerait pas à être remplacé à chaque étape? (2) Le routeur se souvient-il des ports ouverts à long terme ou les supprime-t-il régulièrement pour les demandes qui ne répondent pas? (3) Cela signifie-t-il qu'un pirate peut faire passer des paquets via le pare-feu de votre routeur avec une attaque man-in-the-middle: espionner vos paquets TCP sortants, puis cibler le port TCP ouvert de votre routeur avec une IP source usurpée correspondant à votre destination?
Jon Bentley
1
Comment une réponse ping ICMP revient-elle sur un ordinateur du réseau local? A-t-il quelque chose de similaire au port pour TCP? Et les autres protocoles?
Jean
11

Traduction d'adresses réseau . En bref, lorsque le routeur de passerelle du réseau local privé remplace l'adresse source du réseau local privé par sa propre adresse publique, il modifie le paquet d'une manière telle que l'attribution d'un numéro de port unique et autrement sans signification locale qu'il mappe au nœud LAN d'origine et la demande sortante . Il se souvient de ce mappage de port, donc lorsqu'une réponse revient à l'IP public / port unique #, il (le routeur) sait comment le démapper à celui de son nœud d'origine. C'est également de cette façon que vous pouvez exécuter plusieurs onglets, navigateurs ou instances de navigateur et les réponses à chaque demande de navigateur reviennent au navigateur et à l'onglet corrects.

JRobert
la source
2
JRobert: Qu'en est-il des protocoles IP (par exemple ICMP), autres que TCP ou UDP, qui n'ont pas de numéro de port?
Uri
0

Lorsqu'un paquet initial arrive à l'interface externe du routeur, il modifie l'adresse IP de destination du paquet selon la configuration de redirection de port et transmet le paquet modifié sur l'interface interne du routeur (après l'ARP habituel si nécessaire)

Le paquet atteint le serveur Web et possède toujours une adresse IP source externe qui sera utilisée comme adresse de destination pour toute réponse. Le serveur adresse en conséquence le ou les paquets de réponse sortants de la manière habituelle avec une adresse IP de destination égale à l'adresse IP source de la demande. Étant donné que l'adresse IP du demandeur est externe, le paquet est adressé, au niveau de la couche MAC, à l'interface interne du routeur.

Notez qu'il existe différentes cibles dans chaque couche réseau.

RedGrittyBrick
la source
0

La redirection de port est généralement effectuée sur un routeur ou un périphérique adjacent. Lorsqu'un périphérique sur un LAN envoie du trafic vers un autre périphérique sur ce même LAN, le routeur n'est pas impliqué du tout. Le trafic n'y touche même pas. Vos règles de transfert de port n'auront aucun effet sur le trafic LAN à LAN.

Ethernet a été conçu avec une topologie de "bus" à l'esprit où chaque ordinateur était physiquement connecté au même support. Alors que les commutateurs modernes optimisent le flux de trafic en apprenant l'adresse MAC à l'autre extrémité du port et en répliquant le trafic en conséquence, la topologie «bus» demeure. Tout ce qui est connecté à un commutateur standard peut atteindre "directement" n'importe quoi d'autre (en supposant qu'il se trouve dans le même sous-réseau) sans avoir à "passer" par un périphérique intermédiaire tel qu'un routeur.

Vous pouvez être confus si le périphérique auquel vous connectez tous les ordinateurs possède plusieurs ports Ethernet "LAN" puis un seul port "WAN". Ces types de périphériques sont en fait à la fois un routeur et un commutateur dans le même châssis.

Ainsi, à l'intérieur de votre LAN, si votre serveur HTTP a l'adresse 192.168.1.55, pour l'atteindre à l'intérieur de votre LAN, vous devrez taper " http://192.168.1.55 " dans la barre d'adresse de votre navigateur. Le routeur ne le voit jamais. Pour l'atteindre en dehors de votre LAN, vous aurez besoin de taper votre IP externe, c'est-à-dire " http://256.99.88.77 : {le port que vous avez redirigé ici}" ou quoi que ce soit. Cela frappe votre routeur, la fonction NAT du routeur fonctionne dessus, puis le routeur l'envoie à 192.168.1.55.

LawrenceC
la source
0

Tout simplement, lorsqu'un ordinateur à l'intérieur du LAN privé initie une connexion sortante, la passerelle NAT génère automatiquement un mappage de port pour elle. Ils sont à peu près les mêmes que les mappages de ports que vous avez entrés manuellement auparavant: {port public, adresse privée, port privé}, et sont utilisés de la même manière. La plus grande différence avec les mappages dynamiques est que la passerelle NAT doit souvent attribuer arbitrairement les ports publics pour les mappages, lorsque le numéro de port attendu est déjà utilisé.

Spiff
la source