Dlaczego pakiet Wake-On-LAN zawiera 16 duplikatów docelowego adresu MAC?

16

Ze strony Wireshark :

Blok docelowego adresu MAC zawiera 16 duplikatów adresu IEEE celu, bez przerw i przerw.

Czy istnieje jakiś konkretny powód 16 duplikatów?

4d4c
źródło

Odpowiedzi:

29

Moim zdaniem wartość musi wynosić dokładnie 16.

Magic Packet Technology ( oficjalny dokument , publikacja nr 20213) został opracowany między AMD a Hewlett Packard około 1995 roku. Od strony 2:

„Ponieważ kontroler Ethernet ma już wbudowany obwód dopasowywania adresów ...” proponują ponowne użycie, dodając licznik „w celu zliczenia 16 duplikatów adresu IEEE”.

Uważają, że dodanie WOL powinno być trywialne, pozostawiając rzeczywistą implementację szeroko otwartą. Nie wydaje się to historycznie arbitralne („Och, 16 wygląda wystarczająco długo”), ponieważ:

  1. Buduj na tym, co masz / co wiesz. Przykładowo, załóżmy, że podoba nam się moc 2, a zatem cyfry szesnastkowe. Dogodnie cyfra szesnastkowa (4 bity) przechowuje wartości dodatnie od 0-15. Nasz procesor sprawdza całą matematykę i ustawia „flagę” przepełnienia, jeśli spróbujemy dodać 1 do już „maksymalnej” wartości (np. 15). Ponieważ jest to dość powszechne, możemy nawet mieć specjalną instrukcję dotyczącą warunków przepełnienia, więc w pseudokodzie:

    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. Linie sygnałowe układu scalonego. Odniesienie AMD do „obwodu” prowadzi do głębokiego końca, więc naprawdę musisz wiedzieć, że możemy sobie wyobrazić prosty przypadek, w którym „bit ustawiony na 1” odpowiada „wysokiemu” napięciu gdzieś w układzie, widocznym na "kołek".

Arduino są dobrym przykładem: ustaw bit pamięci na 1, a Arduino ustawia pin wyjściowy na „wysoki”. Ta zmiana napięcia jest często demonstrowana przez napędzanie diod LED, ale dzięki magii tranzystorów może automatycznie aktywować, przerywać lub „budzić” inne obwody lub układy scalone.

Załóżmy bardziej naturalną reprezentację szesnastkową (dwie cyfry szesnastkowe, takie jak FF, często widoczne w adresie IP, maskach i adresach MAC) i powiązaj „pin wyjściowy 5” naszego Arduino z „bitową pozycją 5” w naszym liczniku:

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.

Ponieważ lokalizacja pamięci jest powiązana z tym pinem, jest elegancka i cały sprzęt: po prostu dodawaj 1, nie musisz ingerować w kod sterownika lub programisty BIOS. W każdym razie jesteś tylko twórcą obwodów. Dostaniesz szpilkę, która idzie wysoko, aby mogła zostać pochłonięta przez krzem innego producenta chipów, co robią wszyscy. W prawdziwym świecie jest to trochę bardziej skomplikowane (na przykład specyfikacja ENC28J60 określa to w przerażających szczegółach), ale to sedno.

Po tym ludzka oczywistość wydaje się bardziej efektem ubocznym niż celem. W przypadku komputerów wystarczą 4 kopie twojego MAC, ale teraz ten licznik się nie przepełni i nie jest już tak prosty. Wydaje się więc bardziej prawdopodobne, że celem było wdrożenie go przez jak największą liczbę projektantów układów krzemowych, sterowników i BIOS-ów, a 16 daje każdemu wybór pomiędzy „przepełnieniem” ORAZ bezpośrednią sygnalizacją, bez konieczności ponownej architektury i ponownego wprowadzania narzędzi.

Jako adwokat diabła zajmujący się wykrywaniem ludzi, co z kolejną wyższą liczbą z taką samą elastycznością: 256? To nie działa: sam segment danych wytwarza pakiet WOL większy niż ramka Ethernet ( w danym momencie ).

Dla mnie oznacza to, że 16 jest jedyną wartością, jaką może być segment WOL .

ǝɲǝɲbρɯͽ
źródło
1
Czy nie powinieneś mieć linii w swoim pseudokodzie, aby zresetować licznik, jeśli nie widzisz adresu? W przeciwnym razie, mając wystarczająco dużo czasu i hałasu, zawsze w końcu się obudzisz.
Łukasz
@Luke Tak. Początkowo go dostosowałem, ale podczas uproszczenia usunąłem go ze względu na główny wątek. Właśnie wróciłem (przepraszam za bardzo opóźnioną odpowiedź) i mogę to naprawić, ale nie mam nic przeciwko zatwierdzaniu zmian, jeśli jest to przydatne w sieci.
ɯͽbρɯͽ
19

Tak. To proste, a szansa, że ​​ktoś przypadkowo wyśle ​​te dane, wynosi zero.

Chcesz być prosty, ponieważ mikrokontroler o bardzo niskiej mocy w NIC musi być w stanie na stałe obserwować surowy ruch w sieci Ethernet i działać, jeśli zobaczy ten wzór i nie chcesz włączać systemów przez przypadek, ponieważ strumień losowej sieci dane to polecenie włączenia systemu.

Sven
źródło
9

Myślę, że jest to głównie sposób na upewnienie się, że tylko magiczny pakiet rzeczywiście obudzi komputer. Ponieważ pakiety są skanowane pod kątem tej sekwencji bez patrzenia na nagłówki protokołów (np. Adresy IP, numery portów), pakiet musi być łatwo identyfikowalny, a liczba fałszywych alarmów bliska zeru. Prawdopodobieństwo, że losowy protokół sieciowy wysyła pakiet zawierający 16-krotność adresu MAC komputera, jest bliskie zeru, ale prawdopodobieństwo fałszywie dodatniego jest znacznie większe, jeśli było tylko jedno powtórzenie.

Ale
źródło
1
Przy tylko jednym powtórzeniu prawdopodobieństwo fałszywie dodatniego wynosi 1, ponieważ adresy MAC są wysyłane cały czas za pośrednictwem drutu, z każdym pakietem.
Sven
@ SVW wprawdzie, ale w tym przypadku niekoniecznie poprzedza je sześć bajtów FF - chociaż nie wspomniałem o tym punkcie.
Ale
5

16, ponieważ logika nie jest łatwa do policzenia do 16. Powtarzanie adresu MAC, ponieważ na chipie jest już logika dopasowywania adresów. Biała księga AMD

richardb
źródło