MACアドレス
MAC Address ・ まっくあどれす
ネットワークの口ごとに付く48ビットの識別子。同じLANの中でフレームを届ける宛先。
✦ 30秒で試す — 航海宛先がはっきり書いてあるのに、全員に配ってしまうAがDへ10回送るうちに、スイッチはDの居場所を覚える?予想してみる概要
MACアドレス(Media Access Control address)は、ネットワーク機器のインターフェース1つ1つに割り当てられた48ビットの識別子です。aa:bb:cc:dd:ee:ff のようにコロン区切りの16進数12桁で表記され、パソコンの有線LANポート、Wi-Fiチップ、スマートフォン、ルータのポートなど、ネットワークにつながる「口」ごとに1つずつ持っています。1台のノートPCでも、有線とWi-Fiで別のMACアドレスを持つわけです。
「物理アドレス」とも呼ばれる通り、伝統的には製造時にハードウェアへ書き込まれる、世界で一意な番号として設計されました。IPアドレスがネットワーク管理者の采配で付け替えられる「論理的な住所」であるのに対し、MACアドレスは機器そのものに紐づく「個体の名前」に近い存在です。EthernetやWi-Fiが同じネットワークの中でフレーム(データを運ぶ単位)を届けるとき、宛先の指定に使われるのはIPアドレスではなくこのMACアドレスです。
Wi-Fiの接続トラブルでルータの管理画面を眺めるとき、MACアドレスフィルタリングを設定するとき、あるいはDHCPで特定の機器に決まったIPアドレスを払い出すとき — ネットワークの現場作業では頻繁に顔を出す語彙です。
なぜ生まれたか
MACアドレスの起源は、1970年代にゼロックスのパロアルト研究所で生まれたEthernetにあります。初期のEthernetは1本の同軸ケーブルを全機器で共有する構造で、誰かが送信した信号は、つながっている全員に届いてしまいます。そのため「このフレームは誰宛か」を各機器が自分で判別できるよう、フレームの先頭に宛先の識別子を書き込む必要がありました。これがMACアドレスの出発点です。受け取った機器は宛先を見て、自分宛でなければ黙って捨てます。
このとき設計者たちは、識別子の管理を現場に委ねない道を選びました。アドレスの前半を IEEE(電気電子学会)がメーカーごとに割り当て、後半をメーカーが製品ごとに採番する二段構えにしたのです。これにより、機器は工場出荷の時点で世界一意のアドレスを持ち、ネットワークにつないだ瞬間から設定なしで他の機器と区別できます。「つなげば動く」というLANの手軽さは、この事前割り当ての仕組みに支えられています。なお、当時まだTCP/IPは普及しておらず、MACアドレスはIPアドレスより先に存在していました。後から来たIPの世界との橋渡しには、ARPという別のプロトコルが用意されることになります。
詳細
構造 — OUIとシリアル番号、意味を持つ2つのビット
48ビットのMACアドレスは前半24ビットと後半24ビットに分かれます。前半はOUI(Organizationally Unique Identifier)と呼ばれ、IEEEがメーカーに割り当てるベンダー識別子です。後半はそのメーカーが製品ごとに一意になるよう採番します。このためMACアドレスの前半を調べると製造元が分かり、ネットワーク調査で「この見知らぬ機器はどこのメーカーか」を推定する手がかりになります。
先頭バイトの下位2ビットには、上の図のように意味が持たされています。1つは「1台宛(ユニキャスト)か、グループ宛(マルチキャスト)か」を示すビットで、全ビットが1の ff:ff:ff:ff:ff:ff は「全員宛」のブロードキャストアドレスです。もう1つは「工場出荷のグローバルアドレスか、ソフトウェアが設定したローカルアドレスか」を示すビットで、後述するランダム化ではこのビットを立てた値を使います。
L2の配送 — スイッチは送信元を見て学び、分からなければあふれさせる
MACアドレスの主戦場は、OSI参照モデルでいうレイヤ2(データリンク層)、つまり同じネットワークの中の配送です。初期の共有ケーブルや、その後のハブ(リピータハブ)は、届いた信号を全ポートへそのまま流すだけでした。全員が全員のフレームを受け取り、自分宛でないものを捨てる仕組みなので、台数が増えるほど回線は混み、他人宛のフレームも覗けてしまいます。
これを変えたのがスイッチ(スイッチングハブ、ブリッジ)です。スイッチはフレームを受け取るたびに送信元のMACアドレスを見て、「このポートの先にこのMACアドレスの機器がいる」という対応をMACアドレステーブルに書き込みます。次に宛先のMACアドレスを表で引き、見つかればそのポートにだけ転送します。見つからないとき、つまり宛先がまだ一度も送信していない機器のときは、どこにいるか分からないので、受け取ったポート以外の全ポートへフレームをあふれさせます。これをフラッディングと呼びます。宛先の機器が返事をすれば、そのときに送信元として学習されるので、以後の往復は宛先のポートだけを流れます。ブロードキャスト宛のフレームは、学習の有無にかかわらず常に全ポートへ流れます。
学習した行には寿命(多くの機器で既定300秒)があり、しばらく送信のない機器の行は消えます。機器をつなぎ替えても、表が古いまま残り続けないための工夫です。この「送信元で学び、宛先で引き、分からなければあふれさせる」という3つの動きを、下の部品で確かめてください。フレームを宛先のホストへドラッグすると、スイッチの表が1行ずつ埋まっていきます。ハブに切り替えると、無関係なホストにまで届くようすを比べられます。
金の輪のついたフレームを、宛先にしたいホストへドラッグしてください(タップでおまかせ)。スイッチの表がどう埋まり、フレームがどこへ流れるかを見ます。ホストを押すと送り手が替わります。
学習の仕組みには、表が有限であることからくる弱点もあります。偽の送信元MACアドレスを付けたフレームを大量に送りつけて表をあふれさせると、スイッチは新しい機器を学習できなくなり、フラッディングを続けます。ハブと同じ状態に戻るので、攻撃者は他人宛のフレームを受け取れるようになります(MACフラッディング攻撃)。業務用のスイッチには、1ポートで学習するMACアドレスの数を制限するポートセキュリティの機能があります。
IPアドレスとの役割分担
「住所が2種類あるのはなぜか」は初学者が必ず抱く疑問です。整理すると、IPアドレスは世界中を横断する経路選択(ルーティング)のための階層的な住所で、「どのネットワークの、どのホストか」を表します。一方MACアドレスには地理的・組織的な階層がなく、スイッチの表のように「どのポートの先にいるか」を1台ずつ覚えるしかありません。世界中の機器を1台ずつ覚えることはできないので、MACアドレスは隣り合う機器の間でフレームを受け渡す一区間ごとの宛先にしか使えないのです。
郵便にたとえるなら、IPアドレスは封筒に書かれた最終的な届け先住所、MACアドレスは配送の各区間で荷物を手渡す「次の担当者の名前」です。パケットがルータを越えるたびに宛先・送信元のMACアドレスは区間ごとに書き換わりますが、IPアドレスは端から端まで変わりません。この2層の分業を実際につなぐのが、IPアドレスからMACアドレスを調べるARPです。また、DHCPがIPアドレスを配るときに相手を見分ける手がかりもMACアドレスです。ルータの設定画面で「このMACアドレスにはいつもこのIPアドレスを割り当てる」という予約ができるのはこのためです。
MACアドレスランダム化 — 一意性が招いたプライバシー問題
「世界一意で変わらない識別子」という設計は、スマートフォンの時代に思わぬ副作用を生みました。Wi-Fi機器は接続先を探すために自分のMACアドレスを含む信号を発しており、これを店舗や街頭で収集すれば、個人の行動を端末単位で追跡できてしまうのです。この対策として、iOS 14 以降や Android 10 以降では、Wi-Fi の接続先ネットワークごとに別のランダムなMACアドレスを名乗るのが既定になっています。前述の「ローカルアドレス」のビットを立てた値です。既定ではネットワークごとに値が固定され、同じ Wi-Fi に再接続すれば同じ値を使います。一定期間ごとに値を変える設定を持つOSもありますが、既定の動作ではありません。
これは利用者のプライバシーを守る一方、「MACアドレスで機器を識別する」前提の運用とぶつかります。ネットワークごとに値が違うので、ある Wi-Fi で登録したMACアドレスは別の Wi-Fi では通用しませんし、ランダム化の設定を切り替えたり、値を変える設定にしたりすると、MACアドレスフィルタリングやDHCPの予約が「同じ端末なのに別人に見える」ため効かなくなります。そもそもMACアドレスはソフトウェアで自由に書き換えられる(ランダム化自体がその証明です)以上、MACアドレスフィルタリングはセキュリティ対策としては気休めに過ぎません。「物理アドレス」という名前に反して、今日のMACアドレスは必ずしも物理的でも不変でもない — この変化ごと押さえておくと、実務での混乱を避けられます。
試問
4台のホスト(A〜D)が1台のスイッチにつながり、スイッチの MAC アドレステーブルはまだ空です。金の輪のフレームを宛先のホストへドラッグすると送れて、ホストを押すと送り手が替わります(受け取った側は自動で次の送り手になります)。
金の輪のついたフレームを、宛先にしたいホストへドラッグしてください(タップでおまかせ)。スイッチの表がどう埋まり、フレームがどこへ流れるかを見ます。ホストを押すと送り手が替わります。
