MACアドレス

MACアドレスは、ネットワークインターフェースカード(NIC)に割り当てられたユニークな識別子です。通常、48ビットの長さを持ち、16進数で表現されます。MACアドレスは、データリンク層(OSIモデルの第2層)で使用され、同一ネットワーク内のデバイス間での通信に利用されます。

MACアドレスの構造

MACアドレスは48ビットで構成されており、前半24ビット、後半24ビットに分けて構成されています。 MACアドレスは、有線(イーサーネット)や無線(Wi-Fi)、Bluetoothなど、さまざまなネットワークインターフェースで使用されます。

このアドレスはデータリンク上での『識別』のために使われるため、重複が起きないように管理されています。 48ビットでの重複の心配はあると思いますが、同一ネットワーク内に極端に端末(数万台など)が存在しない限りまず重複は起きないでしょうし、ネットワーク管理者もそこまでフラットに大量の機材を配置するようなことはしません。よってい重複は考えないでください(1敗)。

  • 最初の24ビット

    • OUI(Organizationally Unique Identifier)

      • ただし現在はOUIではなくMA-Lと呼ばれたりします

        • MAC Address Block Large

        • Largeとあるように、MiddleとSmallもあります(要は区画の大きさ)

    • ベンダーが製造したNICを識別するための部分

    • この番号を使って、NICのベンダー(製造元)を知ることができます[1]

  • 後ろの24ビット

    • NICのシリアル番号

    • ベンダーが製造したNICを識別するための部分

    • ベンダーが自由に設定できる部分

  • 表記上の注意

    • 一般に、00:11:22:33:44:55のように『コロンを使ってバイト毎に記述』する形式が使われます

    • その一方で、00-11-22-33-44-55のように『ハイフンを使ってバイト毎に記述』する形式もあります

      • Windowsホストではこの形式が使われることがあります

    • Windows以外では大半がコロン形式(勝手に呼称)を使っているようです

メーカーごとにOUIの範囲が決まっていますが、後半24ビットはメーカー内で自由に決められるます。 よって、同じOUIを持つNICでも、後半24ビットが異なっています(都合上24ビット=1677万通りのNICが作れます)。

注釈

実際のところ、OUIの中でのアドレス空間の表現でMA-L(M,S)が出てくるような状況のため、普通にOUIで通じます。

実際のMACアドレスの使われ方

  • ベンダと先頭24ビットは1対1ではない

    • 大きいメーカーの場合、1677万個では当然足りないため、複数のOUI(MA-L)を保有することになります

    • IntelやApple、その他ネットワーク専業ベンダーやメーカーが該当

    • たとえばApple

      • AppleはOUI(MA-L)をいっぱい持っている

      • 00:03:93

      • 00:05:02

      • 00:0A:27 その他いろいろ

    • たとえばIntel

      • IntelもOUI(MA-L)をいっぱい持っている

        • 00:02:B3

        • 00:03:47

        • 00:04:23 その他いろいろ

  • ベンダー部分の2ビットについて

    • I/Gビット(先頭1ビット)

      • 0:ユニキャスト(1対1の通信向け)

      • 1:マルチキャスト(1対Nの通信向け)

    • U/Lビット(次の1ビット)

      • 0:グローバル(IEEEによる管理下にあるもの)

      • 1:ローカル(IEEEによる管理下にないもの)

    • たとえばAppleのもつ00:03:93の場合(先頭が00、すなわち0b00000000)

      • 『先頭』はネットワークでの通信上、最下位ビットがから数えられます

      • 先頭ビットは0なのでユニキャスト(1対1)

      • 次のビットも0なのでグローバル(IEEE管理下のユニーク性)

    • そういう意味ではベンダーユニークは(残りの)22ビットで表現されますが、I/GおよびU/L含めて発行されるため、24ビットと考えてかまいません

  • 一時的なMACアドレス

    • セキュリティやプライバシーの観点から、メーカー設定のMACアドレスを使いたくない場合がある

    • そこでOS側で一時的なMACアドレスを生成し、イーサネットチップなどが本来のMACアドレスの代わりとして使うことがあります

    • I/Gビットを0にして、U/Lビットを1にすることで、残り46ビットを適当に生成して使うことができます

    • 02:A1:B2:C3:D4:E5は該当します

      • 02(=0b00000010)は先頭ビットが0なのでユニキャスト(1対1)

      • 次のビットが1なのでローカル(IEEE管理下にないもの)

      • その後の46ビットは適当な値

    • WindowsやmacOS、AndroidやiOSなどのOSでは、状況によってはこのような一時アドレスを本来のMACアドレスの代わりに設定することがあります

      • 1日ごとに変化させるなどしています

      • 公衆無線アクセスポイントなどでの追跡防止などで使われていたりします

      • 逆に自宅や学校・企業内で使うとトラブルになるため本来のMACアドレスを使うようにしましょう

注釈

なお筆者(佐藤)は学生時代、研究室で偶然某メーカー(今では名前が変わっています)のイーサネットチップで『重複した』事がありました。その結果、研究室内で通信がうまく行かなくなってしまい、隣の研究室とアダプタを交換(物理)して対応しました。

あくまでデータリンク上は『同一ネットワーク』での重複さえ避けられればいいので、このような運用で対応可能ですが、非常に稀な経験と言えます。