2010-12-12 4 views
-1

Der Router ersetzt die Quell-MAC-Adresse des Pakets mit der Adresse des vorherigen Hop und die Ziel-MAC-Adresse mit der Adresse des nächsten Hop.Wo ersetzt der Linux-Kernel-Router-Code die MAC-Adresse

Der Linux bietet eine Funktionalität, die als Router funktioniert. Meine Frage ist, wie der Kernel-Code die Funktion für die Mac-Adressaktualisierung während seiner Paketweiterleitung implementiert? Und wo ist dieser Teil des Codes

Ich versuche, die Codes in/net/ipv4 zu finden, kann aber nichts gefunden ...

+2

Mein Verständnis ist, dass auf einigen Karten, Software nicht direkt die MAC auf ausgehenden Paketen steuern. Das heißt, Sie können es in ifconfig einstellen, aber für eine solche Karte ist es nicht der Kernel, der den MAC einfügt. Es scheint also, selbst wenn es einen solchen Ort gibt, würde es nicht immer benutzt werden. – asveikau

+0

Aber ich denke immer noch, dass irgendwo der Kernel-Code den Inhalt des Pakets ändern sollte. Ein Linux-Computer kann auch als Bridge fungieren, und in diesem Fall ändert sich die MAC-Adresse, die von der Maschine weitergeleitet/übertragen wird, nicht. Im Router-Fall wurde es geändert, also denke ich, dass es irgendeinen Platz geben sollte, den der Kernel wählen kann, um das Paket zu aktualisieren oder nicht –

Antwort

2

Das ist nicht, was tatsächlich geschieht.

IP hängt nicht von Ethernet ab, was passiert, hängt vom zugrunde liegenden Protokoll der unteren Schicht ab.

Das Gleiche passiert, wenn es sich um ein lokal erzeugtes IP-Paket handelt oder wenn es für einen anderen Host geroutet wurde.

Der IPv4-Stack von Linux ist in keiner Weise Ethernet-abhängig, vielmehr werden viele andere Link-Layer-Protokolle vom Kernel unterstützt. Da IP ein WAN-Protokoll ist, können Sie zwischen verschiedenen zugrunde liegenden Protokollen routen. Einige Beispiele sind

  • ppp, Schlupf (serielle Leitungen)
  • PPTP, GRE (für Tunnel, meist VPNs)
  • IP über ATM
  • Token Ring (meist ältere, glaube ich)
  • Loopback und Dummy (nur für die lokale Kommunikation)
  • Wireless LAN (obwohl dies tatsächlich weitgehend identisch zu Ethernet)

Wenn also IP-Frames von einer Ethernet-Schnittstelle zu einer anderen weitergeleitet werden, passiert es, dass die Verbindungsschicht vollständig entfernt wird. Dann wird nach dem Routing eine neue Verbindungsschicht gebildet. Wenn das Protokoll nicht Ethernet wäre, würde stattdessen ein geeignetes Verbindungsschichtpaket für dieses Protokoll verwendet werden.

Also niemand "ändert die MAC-Adresse", sondern das Link-Layer-Paket ist gerade komplett neu aufgebaut.

+0

Gut, dann würden Sie mir bitte sagen, wo ich den Code darin finden kann, dass der Linux-Kern das neue wiederherstellt Link-Layer-Frame/Paket-Header? Weil mein Ziel ist zu versuchen, irgendwie zu finden, die MAC-Adresse eines Pakets unverändert zu lassen, wenn es von einem Linux-Router weitergeleitet wurde, und der einzige Weg, den ich herauskommen kann, ist den Code zu finden, der diesen neuen Link-Layer-Kopf erstellt und sein Verhalten ändert .. –

+1

Mein Eindruck ist, dass es Hardware-spezifisch ist und daher jeder Gerätetreiber es anders macht. Einige Geräte schreiben einige der Header in Hardware. – MarkR

Verwandte Themen