ssecutils
Network / Browser-native guide

MACアドレスとARPの仕組み

L2でパケットが届く仕組み、ARP Request/Reply、ARP spoofing、IPv6のNDPとの違いを整理します。

6Zero tracking reading surface

「IP アドレスがあれば届く」は半分正解

IP アドレスはインターネット全体を貫く論理的な住所ですが、実際にケーブルや電波の上をパケットが流れる時点では、別の住所が必要です。それが MAC アドレスです。

この記事では、L2(データリンク層)で何が起きているのか、なぜ MAC アドレスが必要なのか、そして IP→MAC の解決を担う ARP の仕組みを解説します。

MAC アドレスは「機器の固有番号」

MAC アドレス(Media Access Control address)は、ネットワーク機器のNIC(ネットワークインターフェイスカード)に焼き付けられた48bitの識別子です。出荷時に決まっており、原則変わりません(OS で擬似的に変更は可能)。

例: 00:1A:2B:3C:4D:5E
    └────┬────┘└────┬────┘
       OUI(製造元)  シリアル番号
       Apple, Cisco 等の識別     機器ごとに一意

前半 24bit は IEEE が管理する OUI(Organizationally Unique Identifier)で、メーカー固有。これを見れば「これは Apple 製品だな」「Cisco のルーターだな」と推測できます。

L2 と L3 の役割分担

IP(L3)と MAC(L2)の関係は次のように整理できます:

項目IP アドレス(L3)MAC アドレス(L2)
使われる範囲インターネット全体同一ネットワーク内のみ
長さ32bit (v4) / 128bit (v6)48bit
変更サブネット移動時に変わる原則固定
誰が決めるISP / 管理者 / DHCPNIC メーカー
192.168.1.1000:1A:2B:3C:4D:5E

パケットが LAN 内を流れるときは、IP ヘッダーで「最終目的地」、Ethernet(L2)ヘッダーで「次にこのパケットを物理的に渡す相手」を指定しています。ルーターを経由するたびに L2 アドレスは書き換えられ、L3 アドレスは変わりません。

ARP: IP から MAC を解決する

では「192.168.1.10 に送りたい」と思ったとき、その IP を持っている機器の MAC アドレスをどう知るか? ここで ARP(Address Resolution Protocol)が登場します。

PC(送信者)が同一 LAN 内の 192.168.1.10 に送りたい

1. ARP Request をブロードキャスト
   "192.168.1.10 さん、MAC アドレス教えて!"
   宛先 MAC: ff:ff:ff:ff:ff:ff(全員に届く)

2. 192.168.1.10 を持っている PC が応答(ARP Reply)
   "私のMACは 00:1A:2B:3C:4D:5E です"
   送信者だけにユニキャスト

3. 送信者は IP→MAC のマッピングを ARP テーブルにキャッシュ
   以降そのキャッシュを使って通信

Linux/macOS で arp -a、Windows で arp -a とコマンドを打つと、現在覚えている ARP テーブルが見られます。

ARP テーブルのキャッシュ

毎回 ARP するとブロードキャストが大量に流れるので、ARP テーブルにキャッシュされます。OS によって違いますが、通常 数分〜20分 程度で期限切れになり、再 ARP されます。

サーバーを別の物理マシンに切り替えた直後、ネットワーク的につながらない時間が生じることがあります。これは古い ARP キャッシュが残っているためで、しばらくすれば自然に解決するか、arp -d でキャッシュをクリアすれば即座に直ります。

セキュリティ問題: ARP スプーフィング

ARP には認証の仕組みが一切ありません。攻撃者が「192.168.1.1(ゲートウェイ)の MAC は私です」という偽の ARP Reply を流すと、被害者の通信が攻撃者に流れてしまいます。これを ARP スプーフィング / ARP ポイズニングと呼びます。

正常: PC ─→ ゲートウェイ ─→ Internet

攻撃: PC ─→ 攻撃者(MITM) ─→ ゲートウェイ ─→ Internet
          ↑ ARP Reply で偽装し、通信を中継しながら盗聴・改ざん

対策:

  • HTTPS / TLS: ARP スプーフィングされても暗号化されているので中身は読めない
  • 静的 ARP エントリ: 重要な機器の MAC を手動で固定(運用負荷大)
  • Dynamic ARP Inspection(DAI): 業務用スイッチの機能
  • VPN を使う: 公衆 Wi-Fi でとくに有効

IPv6 では ARP が違う

IPv6 では ARP は使われず、代わりに NDP(Neighbor Discovery Protocol)が同じ役割を担います。NDP は ICMPv6 上で動き、ARP より洗練された機能(プレフィックス通知、自動構成、近隣到達性検出)を持ちます。

MAC アドレスのプライバシー問題

MAC アドレスは原則固定なので、店舗の Wi-Fi 等を使うと「同じ人が来た」と追跡可能です。これを防ぐため、最近のスマホ・PC は MAC アドレスランダム化機能を持っています:

  • iOS: 設定 → Wi-Fi → 該当ネットワーク → プライベート Wi-Fi アドレス
  • Android: ネットワークごとにランダム化(標準)
  • Windows 10/11: ネットワーク設定 → 「ランダムなハードウェアアドレスを使う」

おわりに

日常では意識しない MAC アドレスと ARP ですが、トラブルシュートで arp -a の結果を読めるかどうかで切り分けの精度が大きく変わります。「同一 LAN 内の通信は MAC で動く、ルーターを越えるたびに MAC は書き換わる」という基本を押さえておくと、ネットワークの動きが立体的に理解できます。