Wake-On-LANパケットにターゲットMACアドレスの重複が16個含まれているのはなぜですか?


16

WiresharkのWebページから:

ターゲットMACブロックには、ターゲットのIEEEアドレスの16の複製が含まれ、中断や中断はありません。

16の重複の特定の理由はありますか?

回答:


29

私の意見では、値は正確に16でなければなりません。

Magic Packet Technology(ホワイトペーパー、出版物#20213)は、1995年頃にAMDとHewlett Packardの間で開発されました。2ページ目から:

「イーサネットコントローラーには既にアドレスマッチング回路が組み込まれているので...」彼らは、「IEEEアドレスの16の重複をカウントアップするためにカウンターを追加して再利用することを提案します。

彼らは、実際の実装を広く公開したまま、WOLを追加するのは簡単なはずだと考えています。これは、歴史的にarbitrary意的ではないようです(「ああ、16は十分に長く見えます」)。

  1. あなたが持っているもの/あなたが知っているものの上に構築してください。例として、2のべき乗、したがって16進数が好きだと仮定しましょう。便利なことに、16進数(4ビット)は0〜15の正の値を保持します。プロセッサはすべての計算をチェックし、既に「最大」値(15など)に1を追加しようとすると、オーバーフロー「フラグ」を設定します。それは非常に一般的であるため、オーバーフロー条件のための特別な命令さえあるかもしれないので、擬似コードで:

    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に設定」がチップのどこかにある「高」電圧に対応する単純なケースを想像できることです。 "ピン"。

Arduinoが良い例です。メモリビットを1に設定し、Arduinoが出力ピンを「高」に設定します。この電圧変化は、LEDを駆動することでデモされることがよくありますが、トランジスタの魔法により、他の回路やチップを自動的に起動、中断、または「起動」することができます。

より自然な16進表現(IP、マスク、MACアドレスでよく見られるFFなどの2桁の16進数)を想定し、Arduinoの「出力ピン5」をカウンターの「ビット位置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仕様では、恐ろしいほど詳細にレイアウトされています)が、それが要点です。

この後、人間の自明性は目標よりも副作用のようです。コンピューターの場合、MACの4つのコピーで十分ですが、そのカウンターはオーバーフローせず、もはや単純ではありません。したがって、目標はできるだけ多くのシリコン、ドライバー、およびBIOSデザイナーによって実装することである可能性が高いようです。16では、再設計や改造を行うことなく、「オーバーフロー」またはダイレクトシグナリングを選択できます。

悪魔の擁護者である人間の検出を演じるなら、同じ柔軟性を持つ次の数値である256はどうでしょうか?それは機能しません。データセグメントだけでは、イーサネットフレーム(当時)よりも大きいWOLパケットが生成さます。

私にとってこれは、WOLセグメント取り得る唯一の値が16であることを意味します。


1
アドレスが表示されない場合、カウンタをリセットするための擬似コードに行を追加する必要はありませんか?それ以外の場合は、十分な時間とノイズがあれば、いつでも目覚めます。
ルーク14年

@ルークはい。私はもともとこれに対応しましたが、簡略化中にメインスレッドのために削除しました。再訪(応答が非常に遅れていることをおologiesびします)して修正できますが、ネットワーク内で役立つ場合は編集を承認しません。
ǝɲǝɲbρɯͽ

19

はい。簡単で、誰かがこのデータを誤って送信する可能性は事実上ゼロです。

NICの非常に低電力のマイクロコントローラーは、未加工のイーサネットネットワークトラフィックを永続的に監視し、このパターンが表示された場合に動作し、ランダムネットワークのストリームによりシステムを誤ってオンにしたくないため、シンプルにしたいdataは、システムをオンにするコマンドです。


9

これは主に、マジックパケットのみが実際にコンピューターをウェイクアップすることを確認する方法だと思います。プロトコルヘッダー(IPアドレス、ポート番号など)ずにパケットがこのシーケンスでスキャンされるため、パケットは簡単に識別でき、誤検知の数がゼロに近い必要があります。ランダムネットワークプロトコルがコンピューターのMACアドレスの16倍を含むパケットを送信する確率はゼロに近いですが、繰り返しが1回だけの場合、誤検知の可能性ははるかに高くなります。


1
1回の繰り返しで、MACアドレスはすべてのパケットで常にワイヤを介して送信されるため、誤検出の確率は1になります。
スヴェン

@SvWは確かですが、この場合、必ずしも6バイトのFFバイトが前に付いているわけではありません-この点については触れませんでした。
エール14年

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.