Kann ich ein Ethernet-Netzwerk erstellen, in dem Geräte keine IP-Adresse, sondern nur eine MAC-Adresse haben, da Ethernet MAC-Adressen für die Kommunikation verwendet?
Wenn Sie Ihre gesamte Software von Grund auf neu schreiben würden, könnten Sie dies auf jeden Fall tun. Lassen Sie die Software einfach überall dort eine MAC-Adresse akzeptieren, wo das normale Gegenstück zu diesem Programm eine IP-Adresse akzeptiert hätte. Verwenden Sie alle Systemaufrufe, um unformatierte Ethernet-Pakete anstelle der IP-Adresse zu senden, und es wird funktionieren - aber es wäre ein großer Aufwand.
Im Allgemeinen folgen MAC-Adressen in Ihrem Netzwerk keinem Muster. Sie werden vom Hersteller in die Hardware eingebrannt. Sie sind lang und sperrig. Meins ist jetzt C8-60-00-CA-4B-9A. Der Computer neben mir ist 00-40-F4-48-1B-88.
Damit die Computer miteinander kommunizieren können, können Sie jedem Computer eine fest codierte Liste aller MAC-Adressen aller anderen Computer im Netzwerk geben, damit er weiß, wohin Pakete gesendet werden sollen. Dies ist eine Menge fehleranfälliger Eingaben, und jedes Mal, wenn Sie Ihre Netzwerkhardware geändert haben, müssen Sie alle Listen ändern, um die neuen MAC-Adressen wiederzugeben.
Dies ist ein riesiger Aufwand, sodass Sie wahrscheinlich eine Möglichkeit finden werden, mit der die Computer im Netzwerk die MAC-Adressen der anderen Computer mithilfe von Broadcast-Paketen automatisch ermitteln können. Dann geben Sie ihnen die Möglichkeit, sich mit einer aussagekräftigen Adresse zu identifizieren, sodass Sie Befehle wie "telnet C8-60-00-CA-4B-9A" eingeben müssen.
Es stellt sich heraus, dass dies genau das ist, was IP tut - es ist eine Möglichkeit, sinnvolle Zahlen zu verwenden, um Hosts in einem Netzwerk zu adressieren, anstatt MAC-Adressen fest zu codieren. Fügen Sie DNS zusätzlich zu IP hinzu und geben Sie einen Befehl wie "telnet webserver" ein.
Konnte Ethernet keine IP-Adressen zum Senden von Nachrichten verwenden? Ich sage es nicht sollte, ich frage nur, ob es sich dafür hätte entscheiden können.
MAC-Adressen bestehen aus 6 Bytes an Informationen und IP-Adressen bestehen nur aus 4 Bytes. Sie können also keine 1-zu-1-Zuordnung vornehmen. Sie benötigen eine Möglichkeit, die MAC-Adresse (um das Paket einzugeben) anhand einer IP-Adresse zu ermitteln (die von der Software bereitgestellt wird, die mit einem anderen Host im Netzwerk kommunizieren möchte).
Ein (fester) Weg, dies zu tun, wäre, in jeden Rechner im Netzwerk zu gehen und dessen Hardware-MAC-Adresse so zu ändern, dass sie wie eine IP-Adresse aussieht, indem die oberen beiden Bytes Nullen sind (oder eine andere feste Zahl, die gleich ist für jeden Rechner im Netzwerk) und setzen Sie die unteren vier Bytes auf die "IP-Adresse", die sie im Netzwerk haben sollen. (Bei den meisten Netzwerkkarten können Sie die vom Hersteller zugewiesene MAC-Adresse ändern.)
Damit dies tatsächlich funktioniert, müssten Sie als Nächstes auch den Code in Ihrem Netzwerkstapel hacken, um dieses System tatsächlich zu verwenden. Sie würden im Grunde alles herausreißen, was mit ARP zu tun hat (die Methode, mit der IP-Adressen in MAC-Adressen übersetzt werden). Sie würden die Teile herausreißen, die IP-Header erstellen / lesen. Stattdessen ersetzen Sie alles durch den sehr einfachen Code, der bei einem an den Host zu sendenden IP-Paket unter der Adresse wxyz einen Ethernet-Frame mit der auf 00-00-wxyz festgelegten DEST-Adresse erstellt.
Sie müssen dem Empfänger eines Pakets auch anzeigen, für welches Protokoll (UDP, TCP) es bestimmt ist. Sie könnten dies wahrscheinlich irgendwo im Ethernet-Header vermerken, indem Sie ein vorhandenes Feld überschreiben. Verwenden Sie möglicherweise eines der beiden obersten Bytes der Quelladresse? Dies würde die Empfangsfähigkeit des Zielcomputers nicht beeinträchtigen, könnte jedoch einige Switches durcheinander bringen. Sie können das Protokoll auch an den Anfang oder das Ende des Ethernet-Frames setzen und die Nutzlast um eins erhöhen - aber das fängt an, nach einem IP-Header zu riechen.
Also, was würde dir diese ganze Arbeit kaufen?
Erstens würde es Ihnen den Overhead einer Suche in der ARP-Tabelle für jedes ausgehende Paket ersparen. Dies liegt wahrscheinlich in der Größenordnung von nur Mikrosekunden.
Sie sparen die Arbeit bei der Berechnung der IP-Header-Prüfsummen und den Speicher, der für deren Speicherung erforderlich ist. Dies ist bei moderner Hardware wahrscheinlich nicht von Bedeutung.
Sie sparen 16 Bytes in jedem Paket im Netzwerk, da es keine IP-Header geben würde. Dies kann sich je nach Anwendung summieren.
Der größte Vorteil wäre, dass Sie keine ARP-Anforderungen ausführen müssten. Das Senden eines Standard-IP-Pakets an einen neuen Host löst einen ARP-Austausch aus, der Millisekunden dauern kann und unvorhersehbar ist. Dies kann für einige Anwendungen, die sehr empfindlich auf Latenz und Jitter reagieren, ein enormer Gewinn sein.
Für einige sehr spezielle Anwendungen ist dies tatsächlich sinnvoll. Ich habe einmal mit einem Echtzeitsystem gearbeitet, bei dem nur UDP-Pakete für die gesamte Kommunikation zwischen Hosts gesendet wurden, und zwar aus dem einzigen Grund, dass diese ARP-Sequenzen nicht aktiviert wurden und unvorhersehbar Verzögerungen und Jitter verursachen. Ich habe auch einmal an einem ressourcenbeschränkten Embedded-System gearbeitet, bei dem UDP-Payloads direkt in IP-Paketen gesendet wurden (kein IP-Header), da die gesamte Komplexität und der Arbeitsspeicher eingespart wurden, die für die Implementierung des gesamten ARP- und Netzmasken- sowie zusätzlicher Prüfsummen erforderlich sind.