ARP とは — IP アドレスから MAC アドレスを引く仕組み

⏱ 約 6 分 view 156 like 0 LOG_DATE:2026-06-10
目次 / TOC

ARP (Address Resolution Protocol) は、同じネットワーク (同一サブネット) の中で 「この IP アドレスを持つ機器の MAC アドレスは何か?」を問い合わせるプロトコル。IP は L3 の論理アドレス、MAC は L2 の物理アドレスで、Ethernet は MAC アドレスでしかフレームを配れない。だから IP 通信のたびに、宛先 IP を MAC に翻訳する ARP が裏で走る。本稿では ARP の必要性 / 解決の流れ / キャッシュ / 同一サブネットに閉じる性質 / Gratuitous ARP / そして認証がない設計が生む ARP スプーフィングと防御までを扱う。

01

ARP とは — L3 と L2 の橋渡し #

通信相手を指すアドレスは、階層ごとに別物が使われる。アプリは「ホスト名」、IP 層は「IP アドレス」、Ethernet 層は「MAC アドレス」。送信元はアプリ名 → IP までは DNS で解決できるが、最後の IP → MAC をその場で埋めるのが ARP の役割。

▸ かみ砕いて言うと — 「部屋番号は分かるが、誰の机かは分からない」

IP アドレスは「会社の部屋番号」、MAC アドレスは「実際の机」。郵便 (フレーム) は最終的に机に置かないと届かない。「301 号室の担当者の机はどれ?」とフロア全体に大声で聞いて (Request)、本人が「私の机はこれです」と手を挙げる (Reply) — これが ARP。

02

なぜ必要か — Ethernet は MAC でしか配れない #

データを送るとき、IP パケットは Ethernet フレームに包まれて (カプセル化) 線に流れる。そのフレームのヘッダには宛先 MAC アドレスを書く欄があり、ここが埋まらないとスイッチはフレームをどのポートへ出せばよいか分からない。

使うアドレス解決手段
L7 アプリホスト名 (example.com)DNS
L3 ネットワークIP アドレス (192.168.1.1)ルーティング
L2 データリンクMAC アドレス (aa:bb:cc:..)ARP

つまり ARP は「IP は分かっているが MAC が空欄」という最後の 1 マスを埋めるためにある。

03

解決の流れ — Request はブロードキャスト、Reply はユニキャスト #

手順はシンプルで 2 往復もしない。「全員に聞く → 本人だけが答える」の 1 往復。

1. ARP Request(ブロードキャスト)
送信元が宛先 MAC を ff:ff:ff:ff:ff:ff(全員宛)にして「192.168.1.1 を持っているのは誰? 192.168.1.5 (= 私) まで教えて」をセグメント全体に投げる。同じスイッチ配下の全機器がこれを受け取る。
2. ARP Reply(ユニキャスト)
該当 IP を持つ本人だけが「192.168.1.1 は aa:bb:cc:dd:ee:ff です」と、質問者に直接返す。他の機器は黙る。
3. キャッシュして送信
得た IP↔MAC の対応を ARP テーブルに記録し、以後はそれを使う。フレームの宛先 MAC 欄が埋まり、ようやく通信が始まる。
04

ARP キャッシュ — 毎回は聞かない #

毎回ブロードキャストすると無駄なので、解決結果は数十秒〜数分キャッシュされる。中身は手元で確認できる。

ARP テーブルを見る
# Windows / 旧 Linux $ arp -a ? (192.168.1.1) at aa:bb:cc:dd:ee:ff [ether] on eth0 ? (192.168.1.20) at 11:22:33:44:55:66 [ether] on eth0

# 今どきの Linux (iproute2) $ ip neigh 192.168.1.1 dev eth0 lladdr aa:bb:cc:dd:ee:ff REACHABLE

REACHABLE / STALE といった状態は「最近通信して生きているか」を表す。エントリが古くなると再度 ARP で確認する。

05

同一サブネット内だけ — リモートはゲートウェイの MAC を引く #

ARP の最重要ポイント。ARP はブロードキャストなので、ルータを越えられない (= 同じサブネット内でしか効かない)。では別ネットワークの相手と話すときは?

答え: 宛先そのものの MAC ではなく、デフォルトゲートウェイ (ルータ) の MAC を ARP で引く。「遠くへの郵便はまず最寄りの郵便局へ」と同じで、フレームはいったんルータに渡され、ルータが次のホップへ転送していく。

▸ だから ping が通らないとき ARP を疑う

同一セグメントの相手に届かないときは、まず ip neigh で相手の MAC が解決できているかを見る。FAILEDINCOMPLETE なら L2 で届いていない(ケーブル・スイッチ・VLAN 不一致など)。リモート宛が全滅ならゲートウェイの ARP が解決できているかを確認する。

06

Gratuitous ARP — 誰も聞いていないのに答える #

Gratuitous ARP (GARP) は、要求がないのに自分の「IP↔MAC」を一方的にブロードキャストする特殊な ARP。主な用途は 3 つ。

  • IP 重複検知 — 起動時に「この IP は私が使う」と宣言し、他に同じ IP がいれば衝突を検知する。
  • フェイルオーバー — 冗長構成で待機系が昇格したとき、「この仮想 IP の MAC が変わった」と周知してスイッチの転送先を切り替えさせる (VRRP / keepalived など)。
  • ARP キャッシュ更新 — 周囲のテーブルを最新化する。

便利な一方で、この「言ったもの勝ち」の性質こそが次の攻撃の土台になる。

07

ARP スプーフィング — 認証がない設計の弱点 #

ARP には送信者を検証する仕組みが一切ない。Reply を受け取った側は、それが本物かを確かめずにキャッシュを書き換える。ここを突くのが ARP スプーフィング / ARP ポイズニング

1. 偽の Reply を撒く
攻撃者が被害者へ「ゲートウェイ (192.168.1.1) は私の MAC です」、ゲートウェイへ「被害者は私の MAC です」と偽 ARP を送り続ける。
2. 経路が攻撃者を通る
双方のキャッシュが汚染され、本来直接やり取りするトラフィックが攻撃者を経由するようになる (中間者 = MITM)。
3. 盗聴・改竄
平文を盗み見たり、セッションを乗っ取ったりする。arpspoof / ettercap / bettercap が代表的なツール。
▸ なぜ HTTPS が効くのか

ARP スプーフィングで経路を奪っても、通信が TLS で暗号化されていれば中身は読めず、証明書検証で改竄も弾かれる。「同じ LAN にいる相手は信用できない」前提(ゼロトラスト的発想)が、カフェや社内 LAN でも HTTPS が必須な理由。

08

防御 — ネットワーク側で偽 ARP を弾く #

対策仕組み適用先
DAI (Dynamic ARP Inspection)DHCP スヌーピングの台帳と照合し、IP↔MAC が一致しない ARP をスイッチが破棄業務スイッチ (最有力)
静的 ARP重要機器の IP↔MAC を手で固定し上書きを禁止サーバ・ゲートウェイ
ポートセキュリティポートごとに学習する MAC 数・値を制限アクセススイッチ
検知 (arpwatch 等)IP↔MAC の対応変化を監視し通知監視サーバ

根本的には「同一セグメントに信用できない端末を入れない」セグメント分割 (VLAN・[[vlan]]) と、上位レイヤの暗号化 (TLS) の二段構えが現実的。

09

まとめ — 押さえる 5 点 #

  • ARP は IP → MAC を解決する IPv4 の基盤。Ethernet は MAC でしか配れないため不可欠。
  • 流れは Request (ブロードキャスト) → Reply (ユニキャスト) → キャッシュ
  • 同一サブネット内だけ。リモート宛はゲートウェイの MAC を引く。
  • 認証がないため ARP スプーフィングで MITM が成立する。
  • 防御は DAI / 静的 ARP / ポートセキュリティ + 上位の TLS 暗号化
  • IPv6 には ARP はなく、NDP (ICMPv6 の近隣探索) が同じ役割を担う。
𝕏 ポスト B! はてブ