6 バイトを真ん中で二分する
MAC アドレスは 48 ビットで、6 バイトとして表記されます。先頭 3 バイトは組織固有識別子(OUI)で、IEEE が製造者に販売するブロックです。後半 3 バイトはその製造者が割り当て、自社が作る各インターフェースを一意にします。ベンダー検索の根拠はこの分割にあります。特定しているのは機器ではなく、「その番号帯を購入したのは誰か」です。
ここから見落とされがちな帰結が生まれます。判明するベンダーはネットワークチップセットの製造者であり、必ずしも筐体にロゴを載せた企業ではありません。ノート PC ではしばしば無線チップのメーカーが表示され、仮想マシンでは仮想化レイヤーがアドレスを生成するためハイパーバイザーが表示されます。
表記は純粋に見た目の問題です。コロン区切りのバイト対、ハイフン区切りのバイト対、Cisco の 4 桁 3 組、区切りなし 16 進は、いずれも同じ 48 ビットを表します。ベンダーや OS が表示方法で足並みを揃えていないため、表記変換が頻出の雑務になっています。
意味を変える 2 つのビット
先頭バイトの下から 2 番目のビットが、ユニバーサル/ローカルのフラグです。0 なら IEEE 割り当てブロック由来であり、ベンダー検索に意味があります。1 ならローカルで決めたアドレスで、どのレジストリにも収録されません。見つからないのは想定どおりの結果であり、データの欠落ではありません。
このビットこそ、最近のスマートフォンやノート PC で「ベンダー不明」になる理由です。ランダム MAC アドレスは現在 Wi-Fi スキャンでは既定、接続時にも多く使われ、製造者まで遡られたりネットワークをまたいで紐付けられたりしないよう、意図的にローカルビットを立てます。ローカル管理アドレスを見たら、プライバシー目的のランダム化が最有力の説明です。
先頭バイトの最下位ビットはユニキャスト/マルチキャストのフラグです。0 なら単一のインターフェース宛、1 ならグループ宛を意味します。48 ビットすべてが 1 のブロードキャストアドレスは、その極端な例にすぎません。機器のアドレスのつもりでマルチキャストビットが立っていたら、ハードウェアではなくプロトコル用アドレスを見ている可能性が高いでしょう。
MAC から IPv6 へ、そしてなぜ廃れたか
ここに表示される修正 EUI-64 は、かつてハードウェアから IPv6 アドレスを組み立てていた方式です。MAC の中央に FF と FE を挿入し、ユニバーサル/ローカルビットを反転させて 64 ビットのインターフェース識別子を作り、ネットワークプレフィックスに連結します。
正しく動作し、完全に決定的です。そしてそれこそが問題でした。この方式で作られたアドレスは、接続するあらゆるネットワークにハードウェア由来の同一性を持ち込み、場所をまたいだ通信の相関を可能にします。RFC 8981 のプライバシー拡張と RFC 7217 の安定かつ不透明な識別子がこの慣行を置き換え、現代のシステムは既定で MAC からアドレスを導出しません。
それでもこの変換を理解する価値はあります。fe80:: のリンクローカルアドレスが読めるようになるのはまさにこの知識のおかげです。インターフェース識別子の中央に FF FE のパターンが見えれば、MAC から導出されたと一目で分かり、元のハードウェアアドレスを復元できます。
自社実装です。ベンダー名は公開されている IEEE MA-L レジストリに基づき、静的ファイルとしてブラウザが一度だけダウンロードします。検索はローカルで実行され、アドレスがどこかへ送信されることはありません。