Чому пакет Wake-On-LAN містить 16 копій цільової MAC-адреси?


Відповіді:


29

На мою думку, значення повинно бути рівно 16.

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

"Оскільки контролер Ethernet вже має вбудовану схему відповідності адрес ...", вони пропонують повторно використовувати його, додаючи лічильник "для підрахунку 16 дублювань адреси IEEE".

Вони вважають, що WOL слід тривіально додати, залишаючи фактичну реалізацію широко відкритою. Схоже, це не є довільно історичним ("О, 16 виглядає досить довго"), оскільки:

  1. Побудуйте на тому, що у вас є / що ви знаєте. Для прикладу припустимо, що нам подобаються потужності 2 і тому шістнадцяткові цифри. Зручно, що шістнадцятковий розряд (4 біти) містить позитивні значення від 0-15. Наш процесор перевіряє всю математику і встановлює "прапор" переповнення, якщо ми спробуємо додати 1 до вже "max" значення (наприклад, 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 .


1
Чи не маєте також у своєму псевдокоді рядок для скидання лічильника, якщо ви не бачите адреси? Інакше, маючи достатньо часу та шуму, ти з часом завжди прокинешся.
Лука

@Luke Так. Я спочатку це розмістив, але під час спрощення вилучив його заради основної нитки. Щойно я переглянув (вибачте за дуже запізнілу відповідь) і можу виправити, але я не проти затвердження змін, якщо це корисно для вас у мережі.
1515

19

Так. Це просто і шанс, що хтось випадково надішле ці дані, фактично дорівнює нулю.

Ви хочете просто, тому що дуже малопотужний мікроконтролер в NIC повинен мати можливість постійно дивитися сирий мережевий трафік і діяти, якщо він бачить цю схему, і ви не хочете включати системи випадково, тому що потік випадкової мережі Дані - це команда для включення системи.


9

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


1
При одному повторенні ймовірність помилкового позитиву була б 1, оскільки MAC-адреси надсилаються по дроті весь час, з кожним пакетом.
Sven

@SvW дійсно, але в цьому випадку вони не обов'язково мають префікс на шість байтів FF - хоча я не згадував цей момент.
Але

5

16, тому що це мертва легка логіка, яку можна нарахувати до 16. Повторення MAC-адреси, оскільки на мікросхемі вже є логіка відповідності адреси. Білий папір AMD

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.