Wie reagiert ein Internetserver auf eine Anfrage von einer privaten IP?

Wie reagiert ein Internetserver auf eine Anfrage von einer privaten IP?

Ich lerne etwas über private/öffentliche IPs, Portweiterleitung und NAT, finde aber immer noch keine Antwort auf eine einfache Frage:

Angenommen, zwei Benutzer im selben Netzwerk kommunizieren mit einem einzigen Server außerhalb ihres Netzwerks (sagen wir, meine Frau und ich senden HTTP-Anfragen an yahoo.com). Der Server sieht beide Benutzer als eine einzige öffentliche IP-Adresse und häufig – wie in diesem Fall – kommunizieren sie über denselben Port. Wie leitet der Router die Pakete entsprechend den beiden unterschiedlichen Verbindungen weiter? Gibt es im Paket Routing-Informationen über IP/Port hinaus? Wird irgendwo eine „Sitzungstabelle“ verwaltet? Von wem und was genau enthält sie?

Antwort1

Innerhalb eines Computers zwischen Prozessen

Sehen wir uns zunächst an, wie eineinzelDer Computer unterscheidet zwischen gleichzeitigen Verbindungen.

Die meisten Transportprotokolle wie TCP, UDP, SCTPverwendenzweiHäfen, Quelle und Ziel– also an jedem Ende der Verbindung. Das heißt, Paketenichteinfach nur „durch“ einen Hafen gehen, sondernausAnschluss XZuAnschluss Y.

DerZielPort ist normalerweise bekannt (80 für HTTP, 53 für DNS…), aber derQuelleDer Port wird normalerweise zufällig vom Betriebssystem selbst ausgewählt, wodurch auch sichergestellt wird, dass die Quelle/Ziel-Kombination eindeutig ist.

Wenn Ihr Browser also mehrere Verbindungen "zu Yahoos Port 80" herstellt, haben alle Verbindungen tatsächlich unterschiedlicheQuellports, und das Betriebssystem führt eine Socket-Tabelle wie die folgende:

PROCESS       PROTO  LOCAL                REMOTE            STATE
9894/firefox  tcp    192.168.6.175:39163  google.server:80  established
9894/firefox  tcp    192.168.6.175:52909  yahoo.server:80   established
17463/chrome  tcp    192.168.6.175:64981  yahoo.server:80   established
9894/firefox  udp    192.168.6.175:4984   8.8.8.8:53        --

Wenn das Betriebssystem also ein TCP-Paket vom yahoo.server:80lokalen Port 52909 empfängt, kann es es der spezifischen Verbindung zuordnen, die von Firefox hergestellt wurde.

Wichtig zu beachten: Dies hat nichts mit NAT zu tunnoch, und geschieht auf die gleiche Weise, auch wenn Sie direkt verbunden sind. (NAT wird es jedoch nutzen.)

(Sie können diese Tabelle mithilfe von netstat -noder verschiedenen grafischen Tools unter Windows anzeigen. „Lokal/Remote“ wird häufig als „Quelle/Ziel“ bezeichnet, obwohl dies nicht ganz korrekt ist.)


Innerhalb eines NAT-Netzwerks zwischen Computern

Die Antwort auf Ihre Frage zu NAT ist sehr ähnlich, nur dass alles in einem größeren Maßstab erfolgt.

Der Router, der NAT durchführt, führt eine „Status“-Tabelle, die sowohl die internen als auch die externen Adressen und Ports enthält. Wenn Ihre beiden HTTP-Anfragen beispielsweise separate TCP-Verbindungen verwenden, können sie wie folgt verfolgt werden:

PROTO   ORIG-SRC             ORIG-DST         REPLY-SRC        REPLY-DST
6/tcp   192.168.6.42:52909   yahoo.server:80  yahoo.server:80  your.public.ip.addr:52909
6/tcp   192.168.6.175:39163  yahoo.server:80  yahoo.server:80  your.public.ip.addr:39163
6/tcp   192.168.6.175:52909  yahoo.server:80  yahoo.server:80  your.public.ip.addr:28330
17/udp  192.168.6.175:4984   8.8.8.8:53       8.8.8.8:53       your.public.ip.addr:4984

Wenn der Router ein Paket von REPLY-SRC (Yahoo) empfängt, das an REPLY-DST (Ihre öffentliche IP-Adresse) adressiert ist, weiß er, dass dierealUm das NAT rückgängig zu machen, muss das Ziel aus der Spalte ORIG-SRC übernommen werden.

(Wenn kein übereinstimmender Status vorliegt, werden manuell konfigurierte Portweiterleitungsregeln verarbeitet. Wenn immer noch keine Übereinstimmung vorliegt, war das Paket tatsächlich für den Router selbst bestimmt.)

Beachten Sie, dass die Statustabelle enthältAdressenUndHäfen, sodass mehrere Verbindungen zum selben Server anhand der Portkombination unterschieden werden können. In meinem Beispiel verwendeten zwei Computer versehentlich dieselbe Portkombination, sodass auch die Ports der zweiten Verbindung übersetzt wurden.

(Tatsächlich sehen einige NATsnuram Port und ignorieren Sie die Quelladresse vollständig; dies reduziert die Anzahl möglicher Verbindungen, macht es für Peer-to-Peer-Programme jedoch viel einfacher, „NAT Hole Punching“ durchzuführen.)

Dieser Status bleibt sogar bei verbindungslosen Protokollen wie UDP oder ICMP erhalten, sodass die Einträge nach einer gewissen Zeit der Inaktivität verfallen, auch wenn kein explizites „Verbindung schließen“-Paket vorhanden ist. (Die Statustabelle ist eigentlich Teil der Firewall, sodass der Router sie auch dann verwenden kann, wenn kein NAT durchgeführt wird, um zwischen „aktiven“ Verbindungen und Streupaketen zu unterscheiden.)

(Wenn Ihr Router Linux-basiert ist, conntrack -Lwürde cat /proc/net/nf_conntrackdiese Tabelle angezeigt werden. Für OpenBSD oder pfSense versuchen Sie pfctl -s state.)

verwandte Informationen