1_導入(イントロ)
この記事ではARP(Address Resolution Protocol) の基本を図解とやさしい言葉で学びます。対象はネットワーク初心者や学生で、IPアドレスとMACアドレスの違い、ARPの動作、ARPテーブルの見方、異なるネットワークの機器への送信をカバーします。図を多用して直感的に理解できるように構成しており、実際に使えるコマンド例も掲載します。
2_ARPとは何か?
ARPは「IPアドレスから対応するMACアドレスを調べる仕組み」です。
ネットワーク上でデータを送るとき、DNSクエリにより宛先のIPアドレスは分かっていても、実際にデータを届けるには相手のMACアドレスが必要となります。
そこで送信側はブロードキャストで「このIPアドレスのMACアドレスを教えて!」と問いかけ、該当機器が自分のMACアドレスを返します。送信元機器は、入手したMACアドレスを宛先に設定して、データを送信します。


なるほど・・・IPアドレスだけでは通信が取れないのか・・・

IPアドレスとMACアドレスの関係については、別記事で解説しているので、前提となるイメージがついていない方は、そちらを参照してみてください
3_実際のARP通信の流れ
では、IPアドレスからMACアドレスをARP通信で取得して、実際に通信をするまでの流れを細かく見ていきましょう。
3-1_ARPキャッシュを確認(宛先IPが同じセグメントに属する場合)
PCなどの機器は、宛先IPアドレスと通信を行う際、まず機器内に保存されている ARPテーブルと呼ばれる「 IPアドレスとMACアドレスの対応表」を参照します。こちらは以前にARP通信を実施し、IPアドレスとMACアドレスの登録がある場合は、再度、ARP通信をすることなく、対象機器と通信を取ることが出来ます。

ARPテーブルの登録(エントリ)には 動的(自動で追加・期限あり)と 静的(手動で固定)の2種類があり、動的は期限がくるとARPテーブルから削除されます。

動的テーブルは自動で削除されてしまうのですか・・・その度にARP通信をしなくてはいけないと思うのですが、何か理由はあるのでしょか?

キャッシュがあることで同じ相手への通信は高速化されますが、古い情報が残ると通信障害の原因になるためです。例えばDHCPでIPアドレスが動的に変わるような環境だと、対応するMACアドレスも一定期間で変わるため、正しい相手方に届かない事象が発生します。
3-2_ARPリクエストとリプライ(宛先IPが同じセグメントに属する場合)
ARPテーブルに該当IPアドレスの登録がない場合、ARP通信を行いMACアドレスを入手します。
- 通信を取りたいIPアドレスについて、ARPテーブルに登録がないか確認
- ARPテーブルに登録がない場合、まず送信元機器は、下記情報を含めたデータ(フレーム)を、ブロードキャスト(同じネットワーク内の全機器宛てに送信)します。(=ARPリクエスト)
【主な情報】送信元機器のIPアドレス、送信元機器のMACアドレス、解決したいIPアドレス(ターゲットIPアドレス)】 - 同じネットワーク内の全機器が②の通信を受信し、ターゲットIPアドレスが自身のIPアドレスだった場合、自身のMACアドレスをパケットに含めて応答する。(=ARPリプライ)
※関係のない機器は、①の通信を受信しても特段応答はしません。

3-3_宛先IPが同じセグメントでない場合
宛先IPアドレスがそもそも同じセグメントでない場合、送信元の機器はデフォルトゲートウェイ(自身のネットワークの境界となっているL3機器【=ルータ等】)のIPアドレス に対して ARP を行います。流れとしては、以下になります。
- 送信元の機器はまず自分のルーティングテーブルを参照し、宛先IPアドレスが自分の機器から直接到達可能かどうかを判断します。
- 宛先が直接通信できるIPアドレスでなければ「次に送るべきルータ(next‑hop)」に該当するデフォルトゲートウェイ【=ルータ等】のIPアドレスを、ARP通信の対象とします。ただし、これまで解説したように、デフォルトゲートウェイのIPアドレスについてARPテーブルの登録があれば、ARPは行いません。
- 宛先IPアドレスは当初のまま、宛先MACアドレスをルータ(デフォルトゲートウェイ)にセットして、通信を行う。
- ルータは、受信したデータの宛先MACアドレスを、目的の機器のPCのMACアドレスに付け替えデータを転送する。※ルータは、目的の機器と同じセグメントのためMACアドレスを入手することが出来る。(ARP通信が可能)

4_ARP関係のwindowspoweshellコマンド
Windows 環境で ARP を確認・操作する際は WindowsPowerShell の Get-NetNeighbor が便利です。
4-1_実行結果サンプル

4-2_出力結果の解説
| 項目名 | 概要 | 主な値の例 | 意味(初心者向け) |
|---|---|---|---|
| ifIndex | ネットワークインターフェースを識別する番号 | 1 / 12 / 23 など | OS が内部で使う NIC の ID。どのインターフェースの ARP 情報かを判断するために使用。 |
| IPAddress | 近隣ノード(ARP/NDP 対象)の IP アドレス | 192.168.1.1 / fe80::1 など | ARP で解決したい相手の IP。IPv4/IPv6 の両方が表示される。 |
| LinkLayerAddress | MAC アドレス(ARP で解決された結果) | 00-11-22-33-44-55 / (空欄) | 解決済みなら MAC が表示。未解決(Incomplete)の場合は空欄になる。 |
| State | ARP/NDP の解決状態 | Reachable / Stale / Delay / Probe / Incomplete / Failed | 通信可能か、再確認中か、未解決かを示す。トラブルシュートで重要。 |
| PolicyStore | エントリがどこに保存されているか | ActiveStore / PersistentStore / Local / GroupPolicy | 動的学習(Active)、静的設定(Persistent)、GPO 配布(GroupPolicy)など設定の由来を示す。 |
4-2-1_stateの各値に関する補足
5_まとめ
ARPはローカルネットワークの「橋渡し」で、IPとMACを結びつける重要な仕組みです。ARPテーブルの理解、リクエスト/リプライの流れを覚えておくとネットワークの理解がより一層深まります。
(参考)よくある質問
- Q1ARPとは何ですか?なぜ必要なのですか?
- A1
ARP(Address Resolution Protocol)は、IPアドレスから対応するMACアドレスを調べるための仕組みです。 PCは通信相手のIPアドレスを知っていても、そのままではデータを届けられません。実際にフレームを送るにはMACアドレスが必要なため、ARPリクエストで「このIPのMACを教えて!」とネットワーク全体に問い合わせ、該当機器がARPリプライでMACアドレスを返します。これにより、送信元は正しい相手にデータを届けられるようになります。
- Q2ARPテーブル(ARPキャッシュ)はなぜ一定時間で消えるのですか?
- A2
ARPテーブルは「IPアドレスとMACアドレスの対応表」で、通信を高速化するために一時的に保存されます。しかし、IPアドレスがDHCPで変わったり、ネットワーク構成が変化したりすると、古いMACアドレスが残っていると通信が失敗する原因になります。そのため、動的エントリは一定時間(TTL)で自動的に削除され、必要に応じて再度ARP通信が行われます。これにより、常に最新のMACアドレスを使って通信できるようになります。
- Q3宛先IPが別セグメントの場合、なぜデフォルトゲートウェイにARPを行うのですか?
- A3
PCはまず自分のルーティングテーブルを確認し、宛先IPが同じネットワーク内かどうかを判断します。別セグメントの場合は直接通信できないため、次に送るべき相手(next hop)であるデフォルトゲートウェイのMACアドレスが必要になります。そのため、PCは「宛先IPのMAC」ではなく「デフォルトゲートウェイのMAC」をARPで取得します。これにより、PCはまずゲートウェイへフレームを送り、そこから先のネットワークへルータが転送してくれる仕組みになっています。


コメント