Perché un pacchetto Wake-On-LAN contiene 16 duplicazioni dell'indirizzo MAC di destinazione?


16

Dalla pagina Web di Wireshark :

Il blocco MAC di destinazione contiene 16 duplicazioni dell'indirizzo IEEE della destinazione, senza interruzioni o interruzioni.

C'è un motivo specifico per le 16 duplicazioni?

Risposte:


29

Secondo me, il valore deve essere esattamente 16.

La Magic Packet Technology ( whitepaper , pubblicazione n. 20213) è stata sviluppata tra AMD e Hewlett Packard intorno al 1995. Da pagina 2:

"Poiché un controller Ethernet ha già un circuito di corrispondenza degli indirizzi incorporato ..." propongono di riutilizzarlo, aggiungendo un contatore "per contare i 16 duplicati dell'indirizzo IEEE".

Ritengono che WOL debba essere banale da aggiungere, lasciando aperta l'implementazione effettiva. Questo non sembra essere storicamente arbitrario ("Oh, 16 sembra abbastanza lungo"), perché:

  1. Costruisci su ciò che hai / su ciò che sai. Ad esempio, supponiamo che ci piacciano i poteri di 2 e quindi le cifre esadecimali. Convenientemente, una cifra esadecimale (4 bit) contiene valori positivi da 0 a 15. Il nostro processore controlla tutti i calcoli matematici e imposta un "flag" di overflow se proviamo ad aggiungere 1 a un valore già "max" (come 15). Perché è abbastanza comune, potremmo anche avere un'istruzione speciale per le condizioni di overflow, quindi in pseudocodice:

    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. Linee di segnale del chip. Il riferimento di AMD ai "circuiti" porta alla fine profonda, quindi tutto ciò che devi veramente sapere è che possiamo immaginare un semplice caso in cui un "bit impostato su 1" corrisponde a una tensione "alta" da qualche parte in un chip, visibile in un "pin".

Gli Arduinos sono un buon esempio: imposta un bit di memoria su 1 e Arduino imposta un pin di output "alto". Questa variazione di tensione viene spesso dimostrata guidando i LED, ma attraverso la magia dei transistor può attivare, interrompere o "riattivare" automaticamente altri circuiti o chip.

Assumiamo una rappresentazione esadecimale più naturale (due cifre esadecimali, come FF, spesso viste in IP, maschere e indirizzi MAC) e leghiamo "output pin 5" del nostro Arduino a "bit position 5" nel nostro contatore:

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.

Poiché la posizione della memoria è legata a quel pin, è elegante e tutto l'hardware: basta continuare ad aggiungere 1, non è necessario interferire con il codice del driver o dello sviluppatore del BIOS. Sei comunque solo un produttore di circuiti. Fornirai un perno che va in alto, per essere consumato dal silicio di altri chipmaker, che è quello che fanno tutti. Nel mondo reale è un po 'più complicato (ad esempio, la specifica ENC28J60 lo espone in dettagli terrificanti), ma questo è l'essenza.

Dopo questo, l'evidenza umana sembra più un effetto collaterale che l'obiettivo. Per i computer, dovrebbero essere sufficienti 4 copie del MAC, ma ora quel contatore non trabocca e non è più morto. Sembra quindi più probabile che l'obiettivo fosse implementarlo da quanti più progettisti di silicio, driver e BIOS possibili, e 16 offre a tutti la scelta tra "overflow" E segnalazione diretta, senza riprogettare e riorganizzare.

Nel ruolo del difensore del diavolo per la rilevazione umana, che dire del prossimo numero più alto con la stessa flessibilità: 256? Non funziona: il solo segmento di dati produce un pacchetto WOL che potrebbe essere più grande di un frame Ethernet ( al momento ).

Quindi per me questo significa che 16 è l'unico valore che può essere il segmento WOL .


1
Non dovresti avere anche una linea nel tuo pseudocodice per resettare il contatore, se non vedi l'indirizzo? Altrimenti con abbastanza tempo e rumore, alla fine ti sveglierai sempre.
Luca,

@Luke Sì. Inizialmente l'ho accontentato, ma durante la semplificazione l'ho rimosso per il bene del thread principale. Ho appena rivisitato (mi scuso per la risposta molto ritardata) e posso risolvere, ma non mi dispiace approvare le modifiche se questo è utile in rete per te.
ɯͽbρɯͽ

19

Sì. È semplice e la possibilità che qualcuno invii questi dati per errore è effettivamente zero.

Volete semplice perché un microcontrollore a basso consumo nella NIC deve essere in grado di guardare in modo permanente il traffico di rete Ethernet grezzo e agire se vede questo schema e non si desidera accendere i sistemi per caso perché un flusso di rete casuale data è il comando per accendere il sistema.


9

Penso che sia principalmente un modo per assicurarsi che solo un pacchetto magico possa effettivamente svegliare il computer. Poiché i pacchetti vengono analizzati per questa sequenza senza esaminare le intestazioni di protocollo (ad es. Indirizzi IP, numeri di porta), il pacchetto deve essere facilmente identificabile e il numero di falsi positivi prossimi allo zero. La probabilità che un protocollo di rete casuale stia inviando un pacchetto contenente 16 volte l'indirizzo MAC di un computer è vicina allo zero, ma la probabilità di un falso positivo è molto maggiore se ci fosse una sola ripetizione.


1
Con una sola ripetizione, la probabilità di un falso positivo sarebbe 1, poiché gli indirizzi MAC vengono inviati sempre via cavo, con ogni pacchetto.
Sven

@SvW in effetti, ma in questo caso non sono necessariamente preceduti da sei byte FF, anche se non ho menzionato questo punto.
Ale

5

16 perché la logica semplice è morta per contare fino a 16. Ripetere l'indirizzo MAC perché sul chip è già presente la logica di corrispondenza degli indirizzi. Libro bianco AMD

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.