Kann ich den Transport von IP-Paketen über eine "Loopback" -Verbindung auf demselben Rechner erzwingen?
557
michael
Meine folgende Frage ist auf ein sehr Anfänger Niveau und ich könnte fehlen erhebliche Kenntnisse über Netzwerkgrundlagen. Obwohl sich die Frage in gewisser Weise auf Server / Client-Konzepte bezieht, liegt das Hauptproblem dahinter definitiv nicht in der Programmierung. Also versuche ich es hier und hoffe, dass es nicht völlig unrealistisch ist. Ich weiß nicht, wo die Frage besser platziert worden wäre ... Bitte schließen Sie die Frage nicht, ohne einen Hinweis darauf zu geben, was falsch ist.
Bei einer einzigen Maschine (in meinem Fall einen PC), könnte es mehr als eine Netzwerkkarte installiert und bietet, kann sagen, zwei physikalische Schnittstellen A, B. Gemäß einer früheren Frage können diese beiden Schnittstellen (Layer-1) zwei verschiedenen IP-Adressen (Layer-3) zugewiesen werden:
Dem Layer-3-Modul, das beim Layer-2-Modul für eine Schnittstelle registriert ist, wird die Layer-3-Adresse für diese Schnittstelle zugewiesen.
Zum Beispiel IP(A)= 192.168.1.10 und IP(B)= 192.168.2.10; beide werden durch die Eigenschaften von TCP / IP für die jeweilige Schnittstellenkarte zugewiesen.
Die Frage:
Angenommen, ein Serverprozess, der auf demselben Computer ausgeführt wird, wird gestartet, indem er sich bei IP (B) und einem Port registriert, bevor er auf eingehende Verbindungen wartet. Es wartet also auf eingehende Anfragen, die über die Schnittstelle B ankommen.
Jetzt habe ich einen TCP-Client auf demselben Rechner und möchte eine TCP-Verbindung zum Server auf IP (B) herstellen. Also verbinde ich A und B naiv mit einem externen Loopback-Kabel und erwarte, dass der Verkehr über dieses Kabel geht, wenn eine Verbindung zu B angefordert wird. Es gibt jedoch keine Möglichkeit, dem Client mitzuteilen, welche Schnittstelle Xer verwenden soll. Wird er Aoder B? Ich vermute sogar, dass es verwendet werden würde B, weil Aund Bwerden unterschiedliche Netzwerke entsprechend der gewählten Subnetzmaske und daher eine Anforderung an eine Endadresse in Büber die Schnittstelle ausgegeben B? Als Nebenfrage: Wie ist der Weg von Paketen jetzt, weil das Kabel nicht benötigt wird. Gibt es einen internen Loopback?
Was aber, wenn ich den Verkehr über das Loopback-Kabel erzwingen möchte (aus welchem Grund auch immer)? Ist das überhaupt möglich? Wie kann ich acchieve, dass ein Client A als abgehende Schnittstelle verwendet, wenn praxisnah erläutert IP(B). Zum Schluss: Ich möchte nur sicherstellen, dass alle gesendeten Pakete zwischen Client und Server über das Kabel transportiert werden.
Wenn Aund Bund auch Server und Client auf verschiedenen Maschinen mit jeweils einer Netzwerkschnittstelle liegen, hätte ich kein Problem zu verstehen. Aber hier?
Warum brauche ich das?
In der Realität möchte ich als nächsten Schritt das Kabel zwischen Aund Bdurch einen experimentellen Aufbau ersetzen, bei dem Bitfehlerraten geändert werden können, indem absichtlich einige Arten von Rauschen und statistische Fehler hinzugefügt werden, um einen sehr schlechten Kanal zu simulieren / emulieren. Ich könnte jede Seite auf eine andere Maschine legen, hätte aber lieber beide auf derselben.
Siehe [Wie funktioniert localhost (127.0.0.1)?] (Https://superuser.com/q/321734/354511)
G-Man vor 7 Jahren
0
2 Antworten auf die Frage
2
Spiff
Bei den Netzwerkstacks der meisten Betriebssysteme ist die Zieladresse, an die Sie senden, eine Adresse, die der lokale Computer selbst besitzt, und verwendet einen internen Software-Loopback-Mechanismus, damit für den Datenverkehr keine Kosten für das Verlassen des Hosts entstehen Schlagen der Ethernet-Hardware. In der Tat sprechen Netzwerkleute meistens von Loopback. Sie sprechen von diesen Loopback-Mechanismen, die vollständig in den Netzwerksoftware-Stack integriert sind. "Loopback" bedeutet fast nie "eine NIC über eine externe Schleife eines Netzwerkkabels und wieder zurück in eine andere NIC".
Die Erzwingung des Verkehrs von einer NIC und zurück in eine andere kann von Betriebssystem zu Betriebssystem variieren. Beispielsweise haben einige Mitglieder der BSD-Unix-Familie, wie FreeBSD und macOS, einen sysctl-Aufruf net.link.ether.inet.useloopback, der standardmäßig auf 1 (aktiviert) gesetzt ist, aber auf 0 (deaktiviert) gesetzt werden kann, um den Datenverkehr zu erzwingen NIC, auch wenn sie für eine andere IP-Adresse auf demselben Computer bestimmt ist.
0
Genaro Morales
Ich denke, wir benötigen Ihr Betriebssystem oder die Gerätekennzeichnung, um eine detailliertere Lösung zu erhalten. Sie können jedoch eine Standardroute für die Netzwerke festlegen.
Dies bedeutet, dass Sie festlegen müssen, dass der gesamte Datenverkehr von Netzwerk 192.168.1.0/24 von der IP-Adresse xxxx oder einem bestimmten Port als lo ausgegeben wird.
Sie müssen über eine Routing-Tabelle verfügen, in der Sie die Route definiert haben, um den Verkehr über diesen Port / diese Adresse zu erhalten.