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?
Antworten:
(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:
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:
1.1.1.1
3.3.3.3
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-IP1.1.1.1
, Quell-Port2345
, Ziel-IP3.3.3.3
, Ziel-Port80
. Die Pakete kommen auf dem Webserver an, er sieht seine eigene IP und seinen eigenen Port80
, sodass er weiß, dass dies eine Anfrage für eine Webseite ist. Der Webserver sendet die Webseite dann in Paketen mit Quell-IP3.3.3.3
, Quell-Port 80, Ziel-IP1.1.1.1
, Ziel-Port zurück2345
. Der Computer empfängt diese Pakete und weiß aufgrund der Portnummer, welche Webseite angefordert wurde2345
.Diese Portkombinationen werden häufig als solche geschrieben:
1.1.1.1:2345
und3.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:
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:
192.168.0.1
und B:192.168.0.2
1.1.1.1
.Zuerst wählen beide Computer einen zufälligen Port aus: Sagen wir:
192.168.0.1:2345
und192.168.0.2:5432
.Computer A sendet sein Paket mit Quelle
192.168.0.1:2345
und Ziel3.3.3.3:80
. Das Gateway übersetzt dieses Paket in das1.1.1.1:2345
Quellziel3.3.3.3:80
und merkt sich, dass alle Antworten auf diese Kombination an gesendet werden192.168.0.1
. Wenn eine Antwort mit Quelle3.3.3.3:80
und Ziel eingeht1.1.1.1:2345
, übersetzt sie in Quelle3.3.3.3:80
und Ziel192.168.0.1:2345
und sendet das Paket weiter.Computer B sendet sein Paket mit Quelle
192.168.0.2:5432
und Ziel3.3.3.3:80
. Das Gateway übersetzt dieses Paket in das1.1.1.1:5432
Quellziel3.3.3.3:80
und merkt sich, dass alle Antworten auf diese Kombination an gesendet werden192.168.0.2
. Wenn eine Antwort mit Quelle3.3.3.3:80
und Ziel eingeht1.1.1.1:5432
, übersetzt sie in Quelle3.3.3.3:80
und Ziel192.168.0.2:5432
und 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.
quelle