Warum enthält ein Wake-On-LAN-Paket 16 Duplikate der Ziel-MAC-Adresse?

16

Von der Wireshark-Webseite :

Der Ziel-MAC-Block enthält 16 Duplikate der IEEE-Adresse des Ziels ohne Unterbrechungen oder Unterbrechungen.

Gibt es einen bestimmten Grund für die 16 Duplikationen?

4d4c
quelle

Antworten:

29

Meiner Meinung nach muss der Wert genau 16 sein.

Magic Packet Technology ( Whitepaper , Veröffentlichung Nr. 20213) wurde zwischen AMD und Hewlett Packard um 1995 entwickelt. Ab Seite 2:

"Da ein Ethernet-Controller bereits über eine integrierte Adressanpassungsschaltung verfügt ..." Sie schlagen vor, diese wiederzuverwenden und einen Zähler hinzuzufügen, "um die 16 Duplikate der IEEE-Adresse zu zählen".

Sie begründen, dass es trivial sein sollte, WOL hinzuzufügen, während die tatsächliche Implementierung offen bleibt. Dies scheint historisch nicht willkürlich zu sein ("Oh, 16 sieht lang genug aus"), weil:

  1. Bauen Sie auf dem auf, was Sie haben / was Sie wissen. Nehmen wir zum Beispiel an, wir mögen Potenzen von 2 und daher hexadezimale Ziffern. Praktischerweise enthält eine hexadezimale Ziffer (4 Bits) positive Werte von 0-15. Unser Prozessor prüft alle Berechnungen und setzt ein Überlauf-Flag, wenn wir versuchen, 1 zu einem bereits "maximalen" Wert (wie 15) hinzuzufügen. Da dies ziemlich häufig vorkommt, haben wir möglicherweise sogar eine spezielle Anweisung für Überlaufbedingungen, also im Pseudocode:

    Initialize a single counter that holds values from 0-15.
    Set it to 0.
    Watch the network. When I see the signal:
    Loop:
      Do I see my address at the right spot?
      Yes: Add 1 to counter.
        Did I just overflow? (15+1 = 0?)
        Yes: Jump out of loop to "wake up" code.
    ...otherwise
    Loop again.
    
  2. Chip-Signalleitungen. AMDs Verweis auf "Schaltkreise" führt zum tiefen Ende. Sie müssen also nur wissen, dass wir uns einen einfachen Fall vorstellen können, in dem ein "auf 1 gesetztes Bit" einer "hohen" Spannung irgendwo in einem Chip entspricht, die an a sichtbar ist "Stift".

Arduinos sind ein gutes Beispiel: Setzen Sie ein Speicherbit auf 1, und Arduino setzt einen Ausgangspin auf "hoch". Diese Spannungsänderung wird oft durch das Ansteuern von LEDs verhindert, aber durch die Magie von Transistoren können andere Schaltkreise oder Chips automatisch aktiviert, unterbrochen oder "aufgeweckt" werden.

Nehmen wir eine natürlichere hexadezimale Darstellung an (zwei hexadezimale Ziffern, wie FF, die häufig in IP-, Masken- und MAC-Adressen vorkommen) und verknüpfen Sie "Ausgangspin 5" unseres Arduino mit "Bitposition 5" in unserem Zähler:

Memory      Value  Event
0000 0000   00     Nothing, so keep adding 1...
0000 1111   0F     Nothing, but add 1...
0001 0000   10     Arduino pin 5 high. New voltage interrupts other circuits.

Da der Speicherort an diesen Pin gebunden ist, ist er elegant und die gesamte Hardware: Fügen Sie einfach immer 1 hinzu, ohne dass der Treiber- oder BIOS-Entwicklercode gestört werden muss. Sie sind sowieso nur ein Schaltungshersteller. Sie werden einen Pin bereitstellen, der hoch geht und von dem Silizium anderer Chiphersteller verbraucht wird, was jeder tut. In der realen Welt ist es etwas komplizierter (zum Beispiel die ENC28J60-Spezifikation legt es in schrecklichen Details dar), aber das ist das Wesentliche.

Danach scheint die menschliche Offensichtlichkeit eher ein Nebeneffekt als das Ziel zu sein. Für Computer sollten 4 Kopien Ihres MAC ausreichen, aber jetzt läuft dieser Zähler nicht mehr über und es ist nicht mehr so ​​einfach. Daher scheint es wahrscheinlicher, dass das Ziel darin bestand, es von möglichst vielen Silizium-, Treiber- und BIOS-Designern implementieren zu lassen, und 16 gibt jedem die Wahl zwischen "Überlauf" UND direkter Signalisierung, ohne Umbau und Umrüstung.

Was ist mit der nächsthöheren Zahl mit der gleichen Flexibilität: 256? Das funktioniert nicht: Das Datensegment allein erzeugt ein WOL-Paket, das ( zu diesem Zeitpunkt ) größer als ein Ethernet-Frame sein könnte.

Für mich bedeutet dies, dass 16 der einzige Wert ist, den das WOL-Segment annehmen kann .

ǝɲǝɲbρɯͽ
quelle
1
Sollten Sie nicht auch eine Zeile in Ihrem Pseudocode haben, um den Zähler zurückzusetzen, wenn Sie die Adresse nicht sehen? Ansonsten wachst du mit genügend Zeit und Lärm immer irgendwann auf.
Luke
@ Luke Ja. Ich habe das ursprünglich berücksichtigt, es aber während der Vereinfachung aus Gründen des Hauptthreads entfernt. Ich habe gerade nachgesehen (entschuldige mich für die sehr verspätete Antwort) und kann das Problem beheben, aber es macht mir nichts aus, Änderungen zu genehmigen, wenn dies für Sie im Netzwerk nützlich ist.
16.
19

Ja. Es ist einfach und die Wahrscheinlichkeit, dass jemand diese Daten versehentlich sendet, ist praktisch Null.

Sie möchten einfach, weil ein Mikrocontroller mit sehr geringem Stromverbrauch in der NIC in der Lage sein muss, den unformatierten Ethernet-Netzwerkverkehr permanent zu überwachen und zu handeln, wenn er dieses Muster erkennt, und Sie nicht aus Versehen Systeme einschalten möchten, weil ein Strom zufälliger Netzwerke vorliegt data ist der Befehl zum Einschalten des Systems.

Sven
quelle
9

Ich denke, dass es hauptsächlich eine Möglichkeit ist, sicherzustellen, dass nur ein magisches Paket den Computer tatsächlich aufweckt. Da die Pakete nach dieser Sequenz durchsucht werden, ohne auf Protokollheader (z. B. IP-Adressen, Portnummern) zu achten, muss das Paket leicht zu identifizieren sein und die Anzahl der Fehlalarme muss nahe Null liegen. Die Wahrscheinlichkeit, dass ein zufälliges Netzwerkprotokoll ein Paket sendet, das das 16-fache der MAC-Adresse eines Computers enthält, liegt nahe bei Null, aber die Wahrscheinlichkeit eines falschen Positivs ist viel höher, wenn es nur eine einzige Wiederholung gab.

Ale
quelle
1
Mit nur einer Wiederholung wäre die Wahrscheinlichkeit eines falschen Positivs 1, da MAC-Adressen mit jedem Paket die ganze Zeit über die Leitung gesendet werden.
Sven
@SvW in der Tat, aber in diesem Fall werden ihnen nicht unbedingt sechs FF-Bytes vorangestellt - obwohl ich diesen Punkt nicht erwähnt habe.
Ale
5

16, weil es kinderleicht ist, bis 16 zu zählen. Wiederholen der MAC-Adresse, da der Chip bereits über eine Adressanpassungslogik verfügt. AMD-Whitepaper

richardb
quelle