
Ich kenne die NAT-Tabelle. Ich möchte nur wissen, was passiert, wenn zwei Clients in einem privaten lokalen Netzwerk genau dieselbe Ressource über denselben Port herunterladen möchten. Mit anderen Worten: Wenn ein Paket vom Server kommt, wie kann der Router entscheiden, welcher Client dieses Paket erhalten soll?
Wenn ich mich nicht irre, hat das eingehende Paket vom Server die Ziel-IP-Adresse des Routers, die öffentlich ist und für beide gleich ist, und auch die Portnummer des Ziels, die in diesem Fall zufällig auch dieselbe ist.
Gibt es im Router oder Server einen Mechanismus, um dies zu erkennen? Oder ist dieses Verhalten überhaupt möglich?
Ich habe nach Fragen gesucht wieDas, es macht Sinn, dass der Fehler auftritt, weil der Port beschäftigt ist, aber ich frage nach zwei separaten Systemen.
Aktualisieren :Aus den Kommentaren ist mir klar geworden, dass ich mich nicht klar genug ausgedrückt habe. Deshalb möchte ich es anhand eines Beispiels noch einmal wiederholen:
Mich interessiert nur der „Quell“-Port der Geräte. Angenommen, ich habe zwei Laptops ( 192.168.2.10
und 192.168.2.11
), die beide dieselbe Datei vom selben Server irgendwo im Internet herunterladen. Jeder von ihnen hat ein Betriebssystem, das einen zufälligen Port generiert, sodass die Quell-IP und der Quell-Port etwa so aussehen würden: 192.168.2.10:6321
und 192.168.2.11:7132
. Ich dachte, dass der Router bei NAT seine (öffentliche) IP-Adresse zusammen mit den Ports der Laptops einstellt, sodass, wenn die öffentliche IP-Adresse des Heimrouters lautet 65.82.23.32
, diese beiden Pakete diese Quell-IP und diesen Quell-Port erhalten: 65.82.23.32:6321
und 65.82.23.32:7132
.
Wenn nun die Antwort zurückkommt, kann der Router anhand der Portnummern herausfinden, welches Paket für welchen Laptop bestimmt ist, richtig? Soweit, so gut. Aber was passiert, wenn zwei Laptops versehentlich oder absichtlich genau denselben Quellport generieren? Zum Beispiel: 192.168.2.10:6000
und 192.168.2.11:6000
. Jetzt legt der Router seine öffentliche IP-Adresse wie zuvor als Quell-IP-Adresse fest, aber wenn er jetzt versucht, diese Portnummern zu verwenden, haben diese Pakete genau dieselbe Quell-IP und Quellportnummer, wie: 65.82.23.32:6000
und 65.82.23.32:6000
.
Hier bin ich verwirrt: Wie kann der Router entscheiden, welches Paket für welchen Laptop bestimmt ist, wenn die Antwort zurückkommt?
Nach der Antwort von @mfinni ist mir aufgefallen, dass PAT nicht so funktioniert! Das NAT-Gerät (hier der Router) weist jedem einzelnen Laptop eindeutige Ports zu (private IP-Adresse), dann werden die Pakete mit diesen eindeutigen Ports gesendet (zum Beispiel und 7777
) 7778
. Wenn also eine Antwort zurückkommt, ist klar, welches Paket von den Ports für welchen Laptop bestimmt ist, dann konvertiert der Router diese 65.82.23.32:7777
in 65.82.23.32:7778
--> 192.168.2.10:6000
.192.168.2.11:6000
Antwort1
Eine TCP-Verbindung (die HTTP und vielen anderen Protokollen zugrunde liegt) wird (zu einem bestimmten Zeitpunkt) eindeutig durch 4 Parameter definiert:
- Die lokale IP
- Der örtliche Hafen
- Die Remote-IP
- Der Remote-Port
Auch wenn Sie die gleiche Anfrage zweimal gleichzeitig vom gleichen Computer aus stellen und die beiden IP-Adressen und der Zielport identisch sind, wird der Quellport unterschiedlich sein.
Wenn Sie zwei Anfragen von zwei Geräten haben, die über dasselbe NAT-Gerät laufen, verwendet das NAT-Gerät unterschiedliche Quellports. Je nach Gerät behält es entweder die ursprünglichen Quellports bei (und ändert nur einen, wenn ein Konflikt auftritt) oder weist immer einen neuen Quellport zu, unabhängig vom ursprünglichen Quellport.
Das NAT-Gerät speichert dann für jede Verbindung eine Zuordnung in seiner Übersetzungstabelle, die besagt, dass die externe Verbindung (externe IP, externer Quellport, Ziel-IP, Zielport) einer internen Verbindung (interne Host-IP, interner Host-Quellport, Ziel-IP, Zielport) zugeordnet wird.
Antwort2
Die NAT-Tabelle weiß, dass der Quellport auf jedem Client unterschiedlich ist, sodass nicht versehentlich das falsche Paket an den falschen internen Client gesendet wird. Das NAT-Gerät weist auch unterschiedliche ausgehende Ports zu, und diese sind bei verschiedenen internen Clients NICHT gleich.
Antwort3
Wenn Sie sich auf beziehen, NAT
beziehen Sie sich wahrscheinlich tatsächlich aufNAPT
. Dadurch wird der Quellport (zumindest falls erforderlich) im NAT-Gerät geändert. Dadurch ändert sich der Quellport.
Zum Beispieliptables
MASQUERADE
Wenn in diesem Fall NAT verwendet wird, ist auch eine „Verbindungsverfolgung“ erforderlich, die einfach festhält, welcher „externe Port“ mit welchem „internen Client und Port“ in Verbindung steht. In iptables sehen Sie häufig die RELATED,ESTABLISHED
verwendete Regel. Sie werden auch feststellen, dass ein Router, der NAPT verwendet, beim Neustart alle Verbindungen trennt. Ein Router ohne NAT hingegen nimmt normalerweise einfach alle Verbindungen wieder auf. (Vorausgesetzt, er schließt den Neustart ab, bevor der Client eine Zeitüberschreitung meldet.)
Antwort4
Der Router verwendet bei seinen ausgehenden Anfragen an das WAN nicht die gleiche Quellportnummer, die die Laptops generieren, sondern generiert seine eigenen eindeutigen Quellports. Die NAT-Tabelle im Router konvertiert laptop1:6000 in publicip:N und laptop2:6000 in publicip:M. Dann weiß er, wohin eingehende Pakete weitergeleitet werden müssen, und über welchen Port der Datenverkehr aus dem Internet eintrifft.