Pourquoi un paquet Wake-On-LAN contient 16 duplications de l'adresse MAC cible?

16

Depuis la page Web de Wireshark :

Le bloc MAC cible contient 16 duplications de l'adresse IEEE de la cible, sans interruption ni interruption.

Y a-t-il une raison spécifique pour les 16 doublons?

4d4c
la source

Réponses:

29

À mon avis, la valeur doit être exactement 16.

Magic Packet Technology ( livre blanc , publication # 20213) a été développé entre AMD et Hewlett Packard vers 1995. À partir de la page 2:

"Puisqu'un contrôleur Ethernet a déjà un circuit intégré de correspondance d'adresses ..." ils proposent de le réutiliser, en ajoutant un compteur "pour compter les 16 duplications de l'adresse IEEE".

Ils pensent que WOL devrait être trivial à ajouter, tout en laissant l'implémentation réelle grande ouverte. Cela ne semble pas être historiquement arbitraire ("Oh, 16 semble assez long"), car:

  1. Développez ce que vous avez / ce que vous savez. Par exemple, supposons que nous aimons les puissances de 2 et donc les chiffres hexadécimaux. Idéalement, un chiffre hexadécimal (4 bits) contient des valeurs positives de 0 à 15. Notre processeur vérifie toutes les mathématiques et définit un "indicateur" de débordement si nous essayons d'ajouter 1 à une valeur déjà "max" (comme 15). Parce que c'est assez courant, nous pouvons même avoir une instruction spéciale pour les conditions de débordement, donc en pseudocode:

    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. Puce lignes de signal. La référence d'AMD aux «circuits» mène à l'extrémité profonde, donc tout ce que vous devez vraiment savoir est que nous pouvons imaginer un cas simple où un «bit réglé à 1» correspond à une tension «élevée» quelque part dans une puce, visible à un "épingle".

Les Arduinos en sont un bon exemple: définissez un bit de mémoire sur 1 et Arduino définit une broche de sortie sur «haut». Ce changement de tension est souvent démontré par la commande de LED, mais grâce à la magie des transistors, il peut automatiquement activer, interrompre ou "réveiller" d'autres circuits ou puces.

Supposons une représentation hexadécimale plus naturelle (deux chiffres hexadécimaux, comme FF, souvent vus dans IP, les masques et les adresses MAC) et lions la "broche de sortie 5" de notre Arduino à la "position de bit 5" dans notre compteur:

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.

Parce que l'emplacement de la mémoire est lié à cette broche, il est élégant et tout matériel: continuez à ajouter 1, pas besoin d'interférer avec le code du pilote ou du développeur du BIOS. De toute façon, vous n'êtes qu'un fabricant de circuits. Vous fournirez une épingle qui va haut, à consommer par le silicium d'un autre fabricant de puces, ce que tout le monde fait. Dans le monde réel, c'est un peu plus compliqué (par exemple, la spécification ENC28J60 le présente avec des détails horribles), mais c'est l'essentiel.

Après cela, l'évidence humaine semble plus un effet secondaire que l'objectif. Pour les ordinateurs, 4 copies de votre MAC devraient suffire, mais maintenant ce compteur ne va pas déborder et ce n'est plus simple. Il semble donc plus probable que l'objectif était de le faire implémenter par autant de concepteurs de silicium, de pilotes et de BIOS que possible, et 16 donne à chacun le choix entre "débordement" ET signalisation directe, sans ré-architecture ni réoutillage.

Jouant l'avocat du diable pour la détection humaine, qu'en est-il du prochain nombre supérieur avec la même flexibilité: 256? Cela ne fonctionne pas: le segment de données produit à lui seul un paquet WOL qui est plus grand qu'une trame Ethernet ( à l'époque ).

Donc pour moi, cela signifie que 16 est la seule valeur que le segment WOL puisse être.

ǝɲǝɲbρɯͽ
la source
1
Ne devriez-vous pas également avoir une ligne dans votre pseudocode pour réinitialiser le compteur, si vous ne voyez pas l'adresse? Sinon, avec suffisamment de temps et de bruit, vous finirez toujours par vous réveiller.
Luke
@Luke Oui. À l'origine, j'ai accepté cela, mais lors de la simplification, je l'ai supprimé pour le fil principal. Je viens de revoir (excuses pour la réponse très retardée) et je peux corriger, mais cela ne me dérange pas d'approuver les modifications si cela est utile en réseau pour vous.
ǝɲǝɲbρɯͽ
19

Oui. C'est simple et la chance que quelqu'un envoie ces données accidentellement est effectivement nulle.

Vous voulez simple, car un microcontrôleur de très faible puissance dans la carte réseau doit pouvoir surveiller en permanence le trafic réseau brut Ethernet et agir s'il voit ce modèle et vous ne voulez pas allumer les systèmes par accident, car un flux de réseau aléatoire data est la commande pour allumer le système.

Sven
la source
9

Je pense que c'est principalement un moyen de s'assurer que seul un paquet magique réveillera réellement l'ordinateur. Comme les paquets sont analysés pour cette séquence sans regarder les en-têtes de protocole (par exemple, les adresses IP, les numéros de port), le paquet doit être facilement identifiable et le nombre de faux positifs proche de zéro. La probabilité qu'un protocole réseau aléatoire envoie un paquet contenant 16 fois l'adresse MAC d'un ordinateur est proche de zéro, mais le risque de faux positif est beaucoup plus élevé s'il n'y avait qu'une seule répétition.

Ale
la source
1
Avec une seule répétition, la probabilité d'un faux positif serait de 1, car les adresses MAC sont envoyées en permanence sur le câble, avec chaque paquet.
Sven
@SvW en effet, mais dans ce cas, ils ne sont pas nécessairement préfixés par six octets FF - même si je n'ai pas mentionné ce point.
Ale
5

16 parce que c'est une logique morte de compter jusqu'à 16. Répéter l'adresse MAC car il y a déjà une logique de correspondance d'adresse sur la puce. Livre blanc AMD

richardb
la source