Odpowiedzi:
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ż:
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.
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 .
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.
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.
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