Es gibt ein allgemeines Missverständnis zwischen NAT (Network Address Translation) und PAT (Port Address Translation), das wir hauptsächlich in unseren Heimroutern verwenden.
NAT
Nehmen wir an, wir haben ein Netzwerk mit der folgenden Topologie:
Private_Network <-------> Router <-------> The_Internet
Die Schnittstelle des Routers , der mit dem Private_Network verbunden ist, hat eine private IP-Adresse , dh eine, die in The_Internet nicht eindeutig ist . Auf der anderen Seite, im Fall von NAT , Router verfügt über mehrere Schnittstellen verbunden The_Internet . Jede Schnittstelle hat eine eindeutige IP-Adresse in The_Internet . Nehmen wir nun an, dass sich Host_A und Host_B im Private_Network befinden und beide gleichzeitig auf Website_X in The_Internet zugreifen möchten . Die IPs und die Ports von Host_ADas Paket lautet:
Quell-IP: Host_As privater IP- Quellport
: Ein Port auf Host_A
Ziel-IP: Website_Xs öffentlicher / eindeutiger IP- Zielport
: Ein Port, an dem der Server von Website_X empfangsbereit ist
und auf die gleiche Weise für ein Paket, das von Host_B kommt .
Wenn die Quell-IP unverändert bleibt , antwortet Website_X auf eine IP-Adresse, die privat, dh nicht eindeutig ist, und daher kann das Paket niemals den Weg zurück finden. Um dieses Problem zu lösen, prüft der Router , ob eine seiner mit The_Internet verbundenen eindeutigen IP-Adressen nicht verwendet wird. In diesem Fall wird die folgende Zuordnung vorgenommen:
Host_A ‚s private IP ======= Router's_unique_IP_K
und jetzt hat das Paket, das von Host_A gestartet wurde und zu Website_X geht und jetzt die Schnittstelle des mit The_Internet verbundenen Routers verlässt, die folgende Form:
Quell-IP: Router's_unique_IP_K
Quell-Port: Ein Port auf Host_A
Ziel-IP: Der öffentliche / eindeutige IP-
Ziel-Port von Website_X : Ein Port, an dem der Server von Website_X empfangsbereit ist
Somit können Sie verstehen, dass es eine Eins-zu-Eins-Zuordnung von privaten IPs zu öffentlichen IPs gibt. Wenn ein Paket von Website_X zum Router gelangt , wird diese Zuordnung überprüft und die Ziel-IP-Adresse wird wieder in die private Adresse geändert und erfolgreich an den richtigen Host übermittelt .
Wie Sie sehen können, ist diese Methode recht einfach, hat jedoch einen großen Nachteil: Für jeden privaten Host muss eine eindeutige IP-Adresse reserviert sein, was teuer ist. Daher wählen wir weniger eindeutige IP-Adressen als Hosts im privaten Netzwerk. Wenn daher alle privaten Hosts gleichzeitig versuchen, auf The_Internet zuzugreifen , entspricht nur eine Teilmenge davon der Anzahl der verfügbaren öffentlichen IP-Adressen, die der Router hathat, wird Zugriff haben und der Rest wird verweigert.
Um dem entgegenzuwirken, haben wir PAT erstellt .
PAT
PAT wird von der überwiegenden Mehrheit unserer Heimrouter verwendet. Die grundlegende Einschränkung besteht darin, dass der Router über eine einzige eindeutige IP-Adresse verfügt, mit der er eine Verbindung zu The_Internet herstellt . Wir möchten jedoch weiterhin zulassen, dass mehrere Hosts aus dem privaten Netzwerk gleichzeitig auf The_Internet zugreifen .
Die Art und Weise, wie wir dies tun, ist "ähnlich" wie NAT , mit einem wesentlichen Unterschied: Anstatt dass der Router einen Pool von IP-Adressen enthält, enthält er einen Pool von Portnummern. Genauer gesagt, ein Paket, das von Host_A im Private_Network , das für Website_X in bestimmt ist, am Router ankommtThe_Internet hat das folgende Format:
Quell-IP: Host_As privater IP- Quellport
: Ein Port auf Host_A
Ziel-IP: Website_Xs öffentlicher / eindeutiger IP- Zielport
: Ein Port, an dem der Server von Website_X empfangsbereit ist
Jetzt erledigt der Router zwei Aufgaben:
- Dadurch wird die Quell-IP in die eindeutige öffentliche IP UND des Routers geändert
- Der Quellport wird in einen Port aus einem Pool geändert, den der Router verwaltet und der noch nicht verwendet wird, z. B. Port_Z
und jetzt hat das Paket, das von Host_A gestartet wurde und zu Website_X geht und jetzt die Schnittstelle des mit The_Internet verbundenen Routers verlässt, die folgende Form:
Quell-IP: Router's_unique_IP_K
Quell-Port: Port_Z
Ziel-IP: Website_Xs öffentliche / eindeutige IP
Ziel-Port: Ein Port, an dem der Server von Website_X empfangsbereit ist
und der Router behält die folgende Zuordnung bei:
Host_A ‚s private IP und ein Port auf Host_A ======= Port_Z
Warum funktioniert das?
Wenn nun ein Paket zurückkommt, überprüft der Router einfach die Zielportnummer und ändert die Ziel-IP-Adresse und die Zielportnummer gemäß der oben genannten Zuordnung, und das Paket wird erfolgreich zugestellt.
Was ist, wenn ich mehrere Anwendungen auf demselben Host ausführe?
Unterschiedliche Anwendungen haben per Definition unterschiedliche Ports, sodass sie einem anderen Port als dem Router zugeordnet werden .
Was ist, wenn mehrere Hosts gleichzeitig versuchen, auf The_Internet zuzugreifen, und alle dieselbe Anwendung verwenden?
Verschiedene Hosts haben per Definition unterschiedliche private IP-Adressen, sodass sie einem anderen Port als dem Router zugeordnet werden .
PAT balanciert gefährlich in einem grauen Raum der Kreuzschicht. Portnummern sind Teil des Transportprotokolls, während Router bis zum Internetprotokoll arbeiten dürfen. Technisch gesehen ist dies also etwas, was von den Protokollen nicht zugelassen wird. Daher gibt es zumindest theoretisch potenzielle Gefahren: Der Portpool ist begrenzt. Wenn mein privates Netzwerk aus 1000 Hosts besteht und auf jedem Port_pool / 10-Anwendungen ausgeführt werden, gehen der Zuordnungstabelle auf dem Router die verfügbaren Einträge aus und der Zugriff auf Anwendungen wird verweigert.
Diese Antwort hat meine beabsichtigte Länge bei weitem überschritten, aber ich hoffe, es war hilfreich.