Почему пакет Wake-On-LAN содержит 16 дубликатов целевого MAC-адреса?

Ответы:

29

На мой взгляд, значение должно быть ровно 16.

Технология Magic Packet ( технический документ , публикация № 20213) была разработана между AMD и Hewlett Packard примерно в 1995 году. Со страницы 2:

«Поскольку контроллер Ethernet уже имеет встроенную схему согласования адресов ...», они предлагают использовать ее повторно, добавив счетчик «для подсчета 16 дубликатов адреса IEEE».

Они полагают, что WOL должен быть тривиальным для добавления, оставляя фактическую реализацию широко открытой. Это не кажется исторически произвольным («О, 16 выглядит достаточно длинным»), потому что:

  1. Основывайтесь на том, что у вас есть / что вы знаете. В качестве примера, давайте предположим, что нам нравятся степени 2 и, следовательно, шестнадцатеричные цифры. Обычно шестнадцатеричная цифра (4 бита) содержит положительные значения от 0 до 15. Наш процессор проверяет всю математику и устанавливает «флаг» переполнения, если мы пытаемся добавить 1 к уже «максимальному» значению (например, 15). Поскольку это довольно часто, у нас может даже быть специальная инструкция для условий переполнения, поэтому в псевдокоде:

    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. Сигнальные линии чипа. Ссылка AMD на «схемотехнику» ведет к глубокому концу, поэтому все, что вам действительно нужно знать, - это представить себе простой случай, когда «бит, установленный в 1», соответствует «высокому» напряжению где-то в микросхеме, видимой на "штырь".

Хороший пример - Arduinos: установите бит памяти на 1, а Arduino установит «высокий» выходной вывод. Это изменение напряжения часто отражается за счет управления светодиодами, но благодаря магии транзисторов оно может автоматически активировать, прерывать или «пробуждать» другие схемы или микросхемы.

Давайте предположим более естественное шестнадцатеричное представление (две шестнадцатеричные цифры, такие как FF, часто встречающиеся в IP, масках и MAC-адресах) и свяжем «выходной вывод 5» нашего Arduino с «битовой позицией 5» в нашем счетчике:

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.

Поскольку область памяти привязана к этому выводу, она элегантна и имеет все аппаратное обеспечение: просто продолжайте добавлять 1, не нужно вмешиваться в код драйвера или BIOS разработчика. В любом случае, ты просто создатель схем. Вы предоставите булавку, которая идет высоко, которая будет потребляться кремнием другого производителя микросхемы, что и делает каждый. В реальном мире все немного сложнее (например, спецификация ENC28J60 излагает это в ужасающих деталях), но это суть.

После этого очевидность человека кажется скорее побочным эффектом, чем целью. Для компьютеров должно хватить 4 копий вашего MAC, но теперь этот счетчик не будет переполнен, и он больше не будет простым. Таким образом, представляется более вероятным, что цель состояла в том, чтобы реализовать его как можно большим количеством разработчиков кремниевых систем, драйверов и BIOS, и 16 предоставляет каждому возможность выбора между «переполнением» и прямой передачей сигналов, без повторной архитектуры и переоборудования.

Играя за защитника дьявола за обнаружение человека, как насчет следующего более высокого числа с той же гибкостью: 256? Это не работает: один сегмент данных создает пакет WOL, который больше, чем кадр Ethernet ( в то время ).

Так что для меня это означает, что 16 - это единственное значение, которым может быть сегмент WOL .

ǝɲǝɲbρɯͽ
источник
1
Разве у вас не должно быть строки в псевдокоде для сброса счетчика, если вы не видите адрес? В противном случае, при наличии достаточного количества времени и шума, вы всегда в конце концов проснетесь.
Люк
@ Люк Да. Я изначально учел это, но во время упрощения удалил его ради основного потока. Я только что повторно (извиняюсь за очень задержанный ответ) и могу исправить, но я не против одобрения изменений, если это полезно для вас в сети.
ǝɲǝɲbρɯͽ
19

Да. Это просто, и вероятность того, что кто-то случайно отправит эти данные, практически равна нулю.

Вы хотите просто, потому что очень маломощный микроконтроллер в NIC должен иметь возможность постоянно наблюдать трафик необработанной сети Ethernet и действовать, если он видит этот шаблон, и вы не хотите включать системы случайно, потому что поток случайной сети Данные - это команда для включения системы.

Свен
источник
9

Я думаю, что это в основном способ убедиться, что только волшебный пакет действительно разбудит компьютер. Поскольку пакеты сканируются на эту последовательность, не просматривая заголовки протокола (например, IP-адреса, номера портов), пакет должен быть легко идентифицируемым, а количество ложных срабатываний близко к нулю. Вероятность того, что случайный сетевой протокол отправляет пакет, содержащий 16-кратный MAC-адрес компьютера, близка к нулю, но вероятность ложного срабатывания намного выше, если был только один повтор.

эль
источник
1
При одном повторении вероятность ложного срабатывания будет равна 1, поскольку MAC-адреса отправляются по проводам постоянно, с каждым пакетом.
Свен
@SvW действительно, но в этом случае они не обязательно имеют префикс 6 байтов FF - хотя я не упомянул об этом.
Ale
5

16, потому что это очень простая логика, чтобы сосчитать до 16. Повторение MAC-адреса, потому что на чипе уже есть логика сопоставления адресов. AMD белая бумага

richardb
источник