MACアドレスの検索は48ビットと6オクテットから始まりますが、ほぼすべての間違いは最初のオクテット内の2つのビットを無視することから生じます。I/Gビットはフレームがユニキャストかマルチキャストかを示します。U/Lビットはプレフィックスがグローバルに割り当てられているか、ローカルで管理されているかを示します。これを間違えると、ベンダー検索は自信満々にナンセンスを返します。
このガイドでは、バイトのレイアウト、人を悩ませるビット番号の付け方、現代のデバイスがアドレスをランダム化する理由、48ビットアドレスがIPv6リンクローカル用のEUI-64インターフェース識別子になる仕組み、そして検索ツールが推測ではなく表面化すべきエラーについて説明します。いかなるアドレスも実在のデバイスに属するとは主張しません。ここにあるツールは合成値を解析・生成するものです。
48ビットのレイアウト
MAC-48アドレスは6オクテット、48ビットで、通常は6組の16進数ペアとして表記されます。最初の3オクテットはIEEEが製造元に割り当てるOrganizationally Unique Identifier(OUI)です。最後の3オクテットはその製造元が割り当てますが、実際には多くのベンダーがシリアルやランダムなソースから導出しています。
16進数はテキスト形式では最上位桁を先頭に書きますが、IEEEは各オクテットを回線上では最下位ビットから送信します。この不一致こそが、最初のオクテットだけがビット番号の付け方で誰もが混乱する場所である理由です。標準でいうビット0は、文字列の左端のビットではなく、書かれた最初のオクテットの最下位ビットを意味します。
- 全長:48ビット、6オクテット、16進数12桁
- OUI:最初の24ビット、IEEEが割り当て
- NIC部分:最後の24ビット、OUI保有者が割り当て
- テキスト形式:各オクテット内では最上位ニブルが先頭
- 回線上の順序:各オクテットは最下位ビットから送信
最初のオクテット:I/GビットとU/Lビット
最初のオクテットの2つのビットが意味を持ちます。ビット0はIndividual/Groupビットで、0は1つのインターフェース向けのユニキャストアドレス、1はグループまたはマルチキャストアドレスを意味します。ビット1はUniversal/Localビットで、0はOUIの下でグローバルに管理されるアドレス、1は通常ソフトウェアによってローカルに割り当てられたアドレスを意味します。
16進数の1桁は4ビットなので、この2つのビットは常に最初のオクテットの最後の16進数桁にエンコードされます。そのため、ユニキャストアドレスでは最初のオクテットの2文字目が常に偶数、マルチキャストアドレスでは奇数になります。また、02、06、0A、0E、12などのパターンを持つローカル管理のユニキャストアドレスが、ランダム化されたWi-Fiアドレスの最初のオクテットとして現れる理由でもあります。
| 最初のオクテット | 2進数 | I/G | U/L | 意味 |
|---|---|---|---|---|
| 00 | 0000 0000 | 0 ユニキャスト | 0 グローバル | 通常のOUI割り当てインターフェース |
| 02 | 0000 0010 | 0 ユニキャスト | 1 ローカル | ローカル管理、多くの場合ランダム化 |
| 01 | 0000 0001 | 1 マルチキャスト | 0 グローバル | 標準のマルチキャストグループ |
| 03 | 0000 0011 | 1 マルチキャスト | 1 ローカル | ローカルスコープのマルチキャスト |
| 33 | 0011 0011 | 1 マルチキャスト | 1 ローカル | IPv6マルチキャストMAC、33:33プレフィックス |
| FF | 1111 1111 | 1 マルチキャスト | 1 ローカル | ブロードキャストフレーム |
OUI、EUI-48、グローバル/ローカルの区分
OUIは24ビットの割り当てです。U/Lビットが0の場合、最初の3オクテットは割り当て先を識別し、IEEEレジストリに対する検索は意味を持ちます。U/Lビットが1の場合、最初の3オクテットはデバイスまたはオペレーティングシステムが選んだものであり、プレフィックスがどれほどもっともらしく見えてもレジストリのエントリは存在し得ません。
IEEEはMA-Sレジストリの下で36ビットの割り当ても発行しており、これらは最初の24ビットを他の割り当て先と共有し、3番目のオクテットにさらに4ビットを追加します。最初の3オクテットだけを確認する検索では、それらのアドレスを誤った保有者に帰属させてしまいます。精度が重要な場合は、ベンダー名を信頼する前に割り当てサイズを確認してください。
- 24ビットMA-L:従来のOUI、3オクテット、最も一般的なケース
- 28ビットMA-M:24ビットブロックを他の割り当て先と共有
- 36ビットMA-S:24ビットブロックを共有し、3番目のオクテットに4ビットを追加
- U/Lビットが設定済み:レジストリは完全にスキップ、割り当て先は存在しない
ランダム化アドレスと、今検索が失敗する理由
現代のオペレーティングシステムはWi-Fiアドレスをローテーションします。iOSとmacOSはネットワークごとにプライベートアドレスを使用し、AndroidはSSIDごとにランダム化し、Windowsはランダムハードウェアアドレスを提供します。これらはすべてU/Lビットを設定しており、これはプレフィックスがベンダー割り当てではないという正直なシグナルです。このビットを無視する検索は、誰にも割り当てられたことのないプレフィックスに対してベンダー名を生成してしまいます。
ランダム化はネットワーク制御における前提も壊します。MACフィルタは認証ではありません。なぜなら、ほとんどのプラットフォームでアドレスはソフトウェアで設定されるからです。同じ性質により、MACアドレスは分析における安定したデバイス識別子として役に立ちません。製品がライセンスやデバイスレコードをMACアドレスでキー付けしている場合、アドレスをローテーションするすべてのネットワークで断片化し、簡単に偽装できてしまいます。
- ランダム化アドレス:U/Lビットが設定済み、プレフィックスはローカルで選択
- ネットワークごとのローテーションは、値が安定したデバイスIDではないことを意味する
- MACフィルタリングは簡単に回避でき、アクセス制御にはならない
- 仮想マシンやコンテナはローカルプレフィックスを継承または生成することが多い
- ベンダーレジストリを呼び出す前に、必ずビットを解析する
EUI-64とIPv6リンクローカルインターフェース識別子
EUI-64は48ビットアドレスを3つのステップで64ビットに変換します。OUIとNIC部分を分割し、その間にFF:FEを挿入し、U/Lビットを反転します。挿入により長さが16ビット増え、反転したビットは64ビット形式でもユニバーサル/ローカルの意味を一貫させます。そのため、結果はmodified EUI-64と呼ばれます。
結果は一般的にIPv6リンクローカルアドレスのインターフェース識別子として使用されます。これは常にfe80::/10に属し、接続する際には常にスコープIDなどのゾーンインデックスが必要です。プライバシー拡張はグローバルアドレスに対してこの識別子をランダムなものに置き換えますが、導出された形式はドキュメント、ラボ環境、デバイスインベントリには今も現れます。
| ステップ | 値 | 説明 |
|---|---|---|
| 開始MAC | 00:1A:2B:3C:4D:5E | 48ビットEUI-48 |
| FF:FEを挿入 | 00:1A:2B:FF:FE:3C:4D:5E | 64ビットEUI-64 |
| U/Lビットを反転 | 02:1A:2B:FF:FE:3C:4D:5E | 最初のオクテット00が02になる |
| IPv6としてフォーマット | fe80::21a:2bff:fe3c:4d5e | そのインターフェースIDを持つリンクローカル |
テキスト形式とその解析方法
同じ48ビットが少なくとも4つの表記で現れます。UnixとWindowsはコロン区切りのペアを使用します。Windowsはハイフンを使うこともあります。Ciscoは4桁の16進数を3つのグループに分け、ドットで区切ります。ツールによっては大文字、小文字で出力し、区切り文字を完全に削除するものもあります。パーサはこれらすべてを正規化し、正確に48ビットでないものは拒否すべきです。
正規化は比較には重要ですが、元の形式の保存には重要ではありません。小文字のコロン表記が最も移植性の高い正規形式です。12桁の16進数文字列をそのまま受け入れる場合は、それを明示してください。黙って受け入れると、ユーザーがMACアドレスではない16桁の16進数識別子を貼り付けてしまうからです。
| スタイル | 例 | 一般的なソース |
|---|---|---|
| コロン | 00:1a:2b:3c:4d:5e | Linux、macOS、ほとんどのAPI |
| ハイフン | 00-1a-2b-3c-4d-5e | Windows、一部のネットワーク機器 |
| Ciscoドット | 001a.2b3c.4d5e | IOSおよび関連CLI |
| ベア16進数 | 001a2b3c4d5e | ログやCSV、曖昧 |
| 大文字 | 00:1A:2B:3C:4D:5E | ドキュメント、ラベル |
検索が報告すべきエラー
優れた検索は、「これは不正な形式」「これはローカル管理」「このプレフィックスは有効だが割り当て先がローカルレジストリにない」を区別します。これら3つをすべて「不明」にまとめてしまうと、修正方法がまったく異なるため、呼び出し側の時間を無駄にします。
長さのエラーが最も一般的です。5オクテット、7オクテット、または64ビットのEUI-64を48ビットのフィールドに貼り付けた場合です。次に文字エラーで、通常はOCRによるゼロのOや1のIです。そして論理的なケースとして、マルチキャストアドレス、ブロードキャストアドレス、ローカル管理プレフィックスがあり、それぞれ構文的には有効で意味的に特殊です。
| 症状 | 原因 | 正しい処理 |
|---|---|---|
| 5オクテット | 切り詰められた貼り付け | 長さエラーで拒否 |
| OまたはIを含む | OCRまたは手動のタイプミス | 無効な16進数として拒否 |
| U/Lビットが設定済み | ランダム化またはローカル割り当て | レジストリをスキップ |
| I/Gビットが設定済み | グループアドレス | デバイスアドレスではない |
| FF:FF:FF:FF:FF:FF | ブロードキャスト | インターフェースアドレスとして拒否 |
| 16桁の16進数 | EUI-64が提供された | 拒否するか明示的に変換 |
衝突しないMACフィクスチャの生成
テストデータには、常にローカル管理のユニキャストアドレスを生成してください。最初のオクテットを02に設定し、I/Gビットをクリアに保ちます。この組み合わせはどのベンダーにも属さないことが保証されているため、フィクスチャが実在のデバイスと誤認されることは決してなく、検索ツールは製造元をでっち上げるのではなく、プレフィックスがローカルであると正しく報告します。
このサイトのMACツールは48ビット構造を操作し、実在のハードウェアを識別するとは主張しません。ビットを解析し、OUIをベンダーの保証ではなくビットとして表示し、EUI-64形式を導出できます。このサイトはBluetoothデバイスアドレスや、イーサネット形式のMACツール以外の48ビット識別子を生成せず、シリアル番号もまったく生成しないことに注意してください。
- 合成ユニキャストアドレスには最初のオクテットとして02を使用
- 実際のベンダーOUIとランダムなNIC部分を組み合わせて生成しない
- フィクスチャは文書化されたプレフィックスに保ち、検索可能にする
- テストでもMACアドレスを安定したデバイス識別子として使用しない
よくある質問
- 48ビット、6オクテットで、通常は6組の16進数ペアとして表記されます。EUI-64はFF:FEを挿入してU/Lビットを反転することで、同じ方式を64ビットに拡張します。
- その下位ビットがI/Gビットなので、2文字目が偶数ならユニキャスト、奇数ならマルチキャストです。その次のビットがU/Lビットで、02がローカル管理アドレスを示す理由です。
- アドレスがランダム化されている可能性が高いです。現代のオペレーティングシステムはプライベートWi-Fiアドレスに対してU/Lビットを設定し、ローカルプレフィックスにはベンダーが割り当てられていません。
- いいえ。ほとんどのプラットフォームでソフトウェアで設定され、スマートフォンやノートPCではネットワークごとにローテーションし、偽装も簡単です。ライセンスや分析のキーにしないでください。
- いいえ。構造とビットを解析するだけで、レジストリ検索はプレフィックスの割り当てを反映するだけで、デバイスが存在するかどうかはわかりません。このサイトはハードウェアを検証しません。
MACアドレスは何ビットですか?+
最初のオクテットの2文字目は何を教えてくれますか?+
ベンダー検索で自分のデバイスに何も返らないのはなぜですか?+
MACアドレスは信頼できるデバイス識別子ですか?+
ツールはMACアドレスが実在するか教えてくれますか?+
例は合成データです。生成された住所を本人確認、アカウント登録、配送に使用しないでください。