ARP

ARPとは

ARP(Address Resolution Protocol)は、IPアドレスから相手のMACアドレスを調べるプロトコルです。[[IPアドレスとサブネット]] が「どの機器に届けたいか」を表す論理的な住所なのに対し、[[イーサネット]] のフレームを実際に届けるにはハードウェア固有のMACアドレスが必要です。この2つの住所を対応づけるのがARPの役割です。

[[OSI参照モデル]] でいうと、ネットワーク層(レイヤ3)のIPアドレスとデータリンク層(レイヤ2)のMACアドレスの橋渡しにあたります。

動作の流れ

同じLAN内の 192.168.1.20 へ通信したいとき:

  1. 送信元が「192.168.1.20 を使っているのは誰?」というARP要求をLAN全体へブロードキャストする
  2. 該当するIPアドレスを持つ機器だけが「私です。MACアドレスは XX:XX:… です」とARP応答を送信元へ直接(ユニキャストで)返す
  3. 送信元は得られた対応をARPテーブル(キャッシュ)に一定時間保存し、次回以降は問い合わせを省略する

なお、宛先が別のネットワークの場合、ARPで調べるのは宛先そのものではなくデフォルトゲートウェイのMACアドレスです。フレームはまずルーターへ渡され、その先は [[ルーティング]] が担当します。

ARPテーブルの確認

ARPテーブルは Windows / macOS / Linux のいずれでも arp -a で確認できます。

arp -a
# ? (192.168.1.1) at a4:12:xx:xx:xx:xx on en0 ifscope [ethernet]
# ? (192.168.1.20) at 08:5b:xx:xx:xx:xx on en0 ifscope [ethernet]

「IPアドレスは合っているのに通信できない」トラブルで、古い対応が残ったARPキャッシュが原因になることがあり、切り分けの手がかりになります。

初学者向けポイント

  • ARPが働くのは同じLANの中だけ。ブロードキャストはルーターを越えないため、インターネットの向こう側のMACアドレスを調べることはない
  • [[IPv6]] にはARPがなく、ICMPv6の近隣探索(NDP)が同じ役割を担う
  • 偽のARP応答で通信を横取りするARPスプーフィングという攻撃がある。同一LAN内に信頼できない端末がいる環境(公衆Wi-Fiなど)が危険とされる理由の1つ

関連技術とのつながり

  • [[IPアドレスとサブネット]] — ARPはIPアドレスを入力としてMACアドレスを得る
  • [[イーサネット]] — 解決したMACアドレスはイーサネットフレームの宛先になる
  • [[LANとWAN]] — ARPのブロードキャストが届く範囲は同一LAN内に限られる
  • [[OSI参照モデル]] — レイヤ3とレイヤ2の間をつなぐ位置づけのプロトコル
Q: ARPの役割として正しいのはどれ?
- [x] IPアドレスから相手のMACアドレスを調べる
- [ ] ドメイン名からIPアドレスを調べる
- [ ] MACアドレスを機器に自動で割り当てる
解説: ARPはネットワーク層のIPアドレスとデータリンク層のMACアドレスを対応づけるプロトコルです。ドメイン名からIPアドレスを調べるのはDNSです。

Q: ARP要求の送り方として正しいのはどれ?
- [ ] 宛先の機器だけへユニキャストで送る
- [x] LAN全体へブロードキャストし、該当する機器だけが応答する
- [ ] ルーターを経由してインターネット全体へ問い合わせる
解説: 相手のMACアドレスがまだ分からないため、要求はLAN全体へブロードキャストします。応答は該当機器からユニキャストで返ります。

Q: 別のネットワーク宛に通信するとき、ARPで調べるMACアドレスはどれ?
- [ ] 宛先ホストのMACアドレス
- [x] デフォルトゲートウェイ(ルーター)のMACアドレス
- [ ] DNSサーバーのMACアドレス
解説: ブロードキャストはルーターを越えないため、ネットワーク外宛のフレームはまずデフォルトゲートウェイへ渡します。そのためARPで調べるのはルーターのMACアドレスです。