Назад | Перейти на главную страницу

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

Из Веб-страница Wireshark:

Блок целевого MAC-адреса содержит 16 копий IEEE-адреса целевого объекта без разрывов и прерываний.

Есть ли конкретная причина для 16 дублирований?

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

Волшебная пакетная технология (белая бумага, публикация № 20213) была разработана AMD и Hewlett Packard примерно в 1995 г. Со страницы 2:

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

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

  1. Основывайтесь на том, что у вас есть / что вы знаете. Например, предположим, что нам нравятся степени двойки и, следовательно, шестнадцатеричные цифры. Для удобства шестнадцатеричная цифра (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. жестяная банка быть.

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

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

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

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