Wie teilt NAT eine öffentliche IPv4-Adresse für mehrere private IPv4-Adressen? [Geschlossen]

10

Ich denke, es ist eine sehr klassische Frage, aber obwohl ich einen Hintergrund habe, habe ich nicht mehr genug Vokabeln, um im Web richtig zu suchen und zu verstehen.

Angenommen, ich habe ein Heimnetzwerk mit 192.168.0.1 (IP.1) und 192.168.0.2 (IP.2) und wir spielen beide gegen Counter Strike und treffen genau denselben externen Server.

Woher weiß mein Heimrouter, welches Paket an IP.1 gesendet wird? Ich lese oft Sachen mit NAT- und xxx.xxx/y-Adressen. ** Wo steht der / y-Teil im TCP / IP-Stack?

Brauchen wir dafür unbedingt NAT? Was ich aus dem Wikipedia-Artikel verstanden habe, ist, dass NAT dazu dient, IP-Adressen zu optimieren, wenn einige Computer ausgeschaltet sind. Ermöglicht es auch, 5 Geräte mit nur 1 öffentlichen IP zu verbinden?

Nicolas Zozol
quelle
One-to-Many sollte Ihre Fragen beantworten. Auch Heimnetzwerke und Fragen zur Einstiegsausbildung passen nicht am besten zu dieser Website.
Craig Constantine

Antworten:

14

(Im Folgenden werde ich alle DNS-Lookups oder Layer-2-Aktionen ignorieren, da dies nicht der relevante Teil für die NAT-Story ist.)

Jede TCP-Verbindung besteht aus vier Teilen:

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

Kurz gesagt: Die Ziel-IP wird verwendet, um das Paket an den richtigen Computer zu senden. Der Zielport wird verwendet, um das Paket auf diesem Computer an das richtige Programm / die richtige Sitzung zu senden. Die Quell-IP wird verwendet, um zu wissen, wohin Antworten gesendet werden sollen. Gleiches gilt für den Quellport. Wenn eine Antwort gesendet wird, werden Quelle und Ziel einfach ausgetauscht.

Beginnen wir mit zwei Computern ohne NAT:

  • Der Computer hat IP 1.1.1.1
  • Der Webserver hat IP 3.3.3.3
  • Der Standardport für HTTP ist 80

Wenn ein Computer nach einer Webseite fragt, wählt er zuerst eine zufällige nicht verwendete Portnummer aus dem zufälligen Bereich (1024-65535) aus. Lass uns auswählen 2345. Dann wird die folgende Sequenz ausgeführt: Der Computer sendet sein Paket mit: Quell-IP 1.1.1.1, Quell-Port 2345, Ziel-IP 3.3.3.3, Ziel-Port 80. Die Pakete kommen auf dem Webserver an, er sieht seine eigene IP und seinen eigenen Port 80, sodass er weiß, dass dies eine Anfrage für eine Webseite ist. Der Webserver sendet die Webseite dann in Paketen mit Quell-IP 3.3.3.3, Quell-Port 80, Ziel-IP 1.1.1.1, Ziel-Port zurück 2345. Der Computer empfängt diese Pakete und weiß aufgrund der Portnummer, welche Webseite angefordert wurde 2345.

Diese Portkombinationen werden häufig als solche geschrieben: 1.1.1.1:2345und 3.3.3.3:80.

Jetzt ist die Anzahl der Computer im Internet weitaus größer als die Anzahl der verfügbaren IPv4-Adressen. Um den Adressraum zu erhalten, wurde eine Reihe privater Adressbereiche eingeführt, die frei für die gemeinsame Nutzung von Adressen verwendet werden können. Diese Rangese werden als RFC1918 bezeichnet und sind die folgenden:

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

Diese Adressen befinden sich nirgends in den Internet-Routing-Tabellen. Wenn Sie also ein Paket mit einem Ziel in diesen Bereichen im Backbone des Internets senden, werden sie einfach verworfen. Dies liegt daran, dass Millionen von Menschen dieselben Adressen verwenden. Diese Adressen müssen in etwas Nützliches für das Internet übersetzt werden. Hier kommt die Netzwerkadressübersetzung ins Spiel:

Wir haben zwei Computer:

  • A: 192.168.0.1und B:192.168.0.2
  • Ihr Gateway hat eine öffentliche IP von 1.1.1.1.
  • Wir behalten den gleichen Webserver.
  • Beide Computer möchten dieselbe Webseite vom selben Server.

Zuerst wählen beide Computer einen zufälligen Port aus: Sagen wir: 192.168.0.1:2345und 192.168.0.2:5432.

Computer A sendet sein Paket mit Quelle 192.168.0.1:2345und Ziel 3.3.3.3:80. Das Gateway übersetzt dieses Paket in das 1.1.1.1:2345Quellziel 3.3.3.3:80und merkt sich, dass alle Antworten auf diese Kombination an gesendet werden 192.168.0.1. Wenn eine Antwort mit Quelle 3.3.3.3:80und Ziel eingeht 1.1.1.1:2345, übersetzt sie in Quelle 3.3.3.3:80und Ziel 192.168.0.1:2345und sendet das Paket weiter.

Computer B sendet sein Paket mit Quelle 192.168.0.2:5432und Ziel 3.3.3.3:80. Das Gateway übersetzt dieses Paket in das 1.1.1.1:5432Quellziel 3.3.3.3:80und merkt sich, dass alle Antworten auf diese Kombination an gesendet werden 192.168.0.2. Wenn eine Antwort mit Quelle 3.3.3.3:80und Ziel eingeht 1.1.1.1:5432, übersetzt sie in Quelle 3.3.3.3:80und Ziel 192.168.0.2:5432und sendet das Paket weiter.

Wenn beide Computer zufällig dieselbe Quellportnummer auswählen, wählt das Gateway einfach eine andere freie zufällige Quellportnummer aus und denkt daran, auch die Portnummer zu übersetzen. Dies wird manchmal als PAT (Port Address Translation) bezeichnet. Dies ist im Grunde eine Teilmenge von NAT.

Hierfür gibt es mehrere Implementierungen. Das Gateway erinnert sich möglicherweise nur an "Computer X hat den Quellport Y verwendet" und leitet alles mit Port Y an Computer X weiter. Es erinnert sich möglicherweise daran, dass Computer X den Quellport Y und das Ziel Z verwendet hat und leitet nur etwas von Port Z an Port Y zurück an Computer X. Oder es gibt die Option, dass das gesamte Tupel gespeichert wird und nur Datenverkehr an Computer X gesendet wird, der der gesamten Quell- / Ziel-IP und dem gesamten Port entspricht.

JelmerS
quelle
Vielen Dank. Ich dachte, dass jeder Client mit seinem Port 80 an einen anderen Port 80 senden würde. Ich denke, dass viele Nichtfachleute dasselbe glauben.
Nicolas Zozol