Por que um pacote Wake-On-LAN contém 16 duplicações do endereço MAC de destino?

16

Na página da Web do Wireshark :

The Target MAC block contains 16 duplications of the IEEE address of the target, with no breaks or interruptions.

Existe algum motivo específico para as 16 duplicações?

    
por ton1c 02.10.2014 / 00:00

4 respostas

29

Na minha opinião, o valor tem que ser exatamente 16.

A Magic Packet Technology ( whitepaper , publicação # 20213) foi desenvolvido entre a AMD e Hewlett Packard por volta de 1995. A partir da página 2:

"Since an Ethernet controller already has built-in address matching circuitry..." they propose reusing it, adding a counter "to count up the 16 duplications of the IEEE address".

Eles raciocinam que o WOL deve ser trivial, deixando a implementação real em aberto. Isso não parece ser historicamente arbitrário ("Oh, 16 parece longo o suficiente"), porque:

  1. Construa o que você tem / o que você sabe. Por exemplo, vamos supor que gostamos de potências de 2 e, portanto, dígitos hexadecimais. Convenientemente, um dígito hexadecimal (4 bits) contém valores positivos de 0 a 15. Nosso processador verifica todas as contas e define um "sinalizador" de estouro se tentarmos adicionar 1 a um valor já "máximo" (como 15). Porque isso é muito comum, podemos até ter uma instrução especial para condições de estouro, então no pseudocódigo:

    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. Linhas de sinal de chip. A referência da AMD a "circuitos" leva ao fim profundo, então tudo que você precisa saber é que podemos imaginar um caso simples em que um "bit definido como 1" corresponde a uma voltagem "alta" em algum lugar em um chip, visível em um "PIN".

Arduinos são um bom exemplo: configure um bit de memória para 1 e o Arduino define um pino de saída como "alto". Esta mudança de voltagem é frequentemente demonstrada através da condução de LEDs, mas através da magia dos transistores ela pode ativar, interromper ou "acordar" automaticamente outros circuitos ou chips.

Vamos supor uma representação hexagonal mais natural (dois dígitos hexadecimais, como FF, frequentemente vistos em IP, máscaras e endereços MAC) e amarre o "pino de saída 5" do nosso Arduino à "posição de bit 5" em nosso contador:

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.

Como o local da memória está ligado a esse pino, é elegante e todo o hardware: continue adicionando 1, sem necessidade de interferir no código do driver ou do desenvolvedor do BIOS. Você é apenas um fabricante de circuitos. Você vai fornecer um pino que vai alto, para ser consumido pelo silício de outro fabricante de chips, que é o que todo mundo está fazendo. No mundo real, é um pouco mais complicado (por exemplo, a especificação ENC28J60 expõe em detalhes horripilantes), mas essa é a essência.

Depois disso, a obviedade humana parece mais um efeito colateral do que a meta. Para computadores, 4 cópias do seu MAC devem ser suficientes, mas agora esse contador não vai transbordar e não é mais simples. Portanto, parece mais provável que o objetivo seja implementá-lo com o maior número possível de projetistas de silício, driver e BIOS, e 16 dá a todos a opção de "transbordar" E sinalização direta, sem reformular e reorganizar.

Jogando o advogado do diabo para detecção humana, que tal o próximo número mais alto com a mesma flexibilidade: 256? Isso não funciona: o segmento de dados sozinho produz um pacote WOL que é maior que um quadro Ethernet ( at o tempo poderia ser.

Então, para mim, isso significa que 16 é o único valor que o segmento WOL pode ser

.     
por 02.10.2014 / 08:46
18

Sim. É simples e a chance de alguém enviar esses dados acidentalmente é efetivamente zero.

Você quer simples, porque um microcontrolador de baixa potência na NIC precisa ser capaz de observar permanentemente o tráfego da rede Ethernet e agir se ele vir esse padrão e você não quiser ativar os sistemas por acidente, porque um fluxo de dados de rede aleatórios é o comando para ligar o sistema.

    
por 02.10.2014 / 00:12
9

Acho que é principalmente uma maneira de garantir que apenas um pacote mágico acorde o computador. Como os pacotes são verificados para esta sequência sem olhar para quaisquer cabeçalhos de protocolo (por exemplo, endereços IP, números de porta), o pacote precisa ser facilmente identificável e o número de falsos positivos próximo a zero. A probabilidade de um protocolo de rede aleatório enviar um pacote contendo 16 vezes o endereço MAC de um computador é próxima de zero, mas a chance de um falso positivo é muito maior se houvesse apenas uma única repetição.

    
por 02.10.2014 / 00:14
5

16 porque é uma lógica fácil de contar até 16. Repetindo o endereço MAC porque já existe lógica de correspondência de endereço no chip. Documento técnico da AMD

    
por 02.10.2014 / 00:19