図解でわかる ARP 入門 ~IPアドレスからMACアドレスを取得して通信する流れを分かりやすく解説~

ARPの全体イメージ:IPアドレスからMACアドレスを取得して通信する流れを示す図 ネットワーク
ARPの全体イメージ:IPアドレスからMACアドレスを取得して通信する流れを示す図

1_導入(イントロ)

この記事ではARP(Address Resolution Protocol) の基本を図解とやさしい言葉で学びます。対象はネットワーク初心者や学生で、IPアドレスMACアドレスの違い、ARPの動作、ARPテーブルの見方、異なるネットワークの機器への送信をカバーします。図を多用して直感的に理解できるように構成しており、実際に使えるコマンド例も掲載します。

2_ARPとは何か?

ARPは「IPアドレスから対応するMACアドレスを調べる仕組み」です。
ネットワーク上でデータを送るとき、DNSクエリにより宛先のIPアドレスは分かっていても、実際にデータを届けるには相手のMACアドレスが必要となります。
そこで送信側はブロードキャストで「このIPアドレスのMACアドレスを教えて!」と問いかけ、該当機器が自分のMACアドレスを返します。送信元機器は、入手したMACアドレスを宛先に設定して、データを送信します。

ARP通信の全体フローを示す図。PCがARPリクエストをブロードキャストし、該当機器がARPリプライでMACを返す流れを可視化。
図解1_ARP通信全体図
バグ太郎
バグ太郎

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

∞-CPU
∞-CPU

IPアドレスとMACアドレスの関係については、別記事で解説しているので、前提となるイメージがついていない方は、そちらを参照してみてください

3_実際のARP通信の流れ

では、IPアドレスからMACアドレスをARP通信で取得して、実際に通信をするまでの流れを細かく見ていきましょう。

3-1_ARPキャッシュを確認(宛先IPが同じセグメントに属する場合)

PCなどの機器は、宛先IPアドレスと通信を行う際、まず機器内に保存されている ARPテーブルと呼ばれる「 IPアドレスとMACアドレスの対応表」を参照します。こちらは以前にARP通信を実施し、IPアドレスとMACアドレスの登録がある場合は、再度、ARP通信をすることなく、対象機器と通信を取ることが出来ます。

ARPテーブルの例を示す図。IPとMACの対応表、動的エントリと静的エントリの違い、TTLによる更新のイメージ。
図解2_ARP通信(ARPテーブルの確認)

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

バグ太郎
バグ太郎

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

∞-CPU
∞-CPU

キャッシュがあることで同じ相手への通信は高速化されますが、古い情報が残ると通信障害の原因になるためです。例えばDHCPでIPアドレスが動的に変わるような環境だと、対応するMACアドレスも一定期間で変わるため、正しい相手方に届かない事象が発生します。

3-2_ARPリクエストとリプライ(宛先IPが同じセグメントに属する場合)

ARPテーブルに該当IPアドレスの登録がない場合、ARP通信を行いMACアドレスを入手します。

  • 通信を取りたいIPアドレスについて、ARPテーブルに登録がないか確認
  • ARPテーブルに登録がない場合、まず送信元機器は、下記情報を含めたデータ(フレーム)を、ブロードキャスト(同じネットワーク内の全機器宛てに送信)します。(=ARPリクエスト
    【主な情報】送信元機器のIPアドレス、送信元機器のMACアドレス、解決したいIPアドレス(ターゲットIPアドレス)
  • 同じネットワーク内の全機器が②の通信を受信し、ターゲットIPアドレスが自身のIPアドレスだった場合、自身のMACアドレスをパケットに含めて応答する。(=ARPリプライ
    ※関係のない機器は、①の通信を受信しても特段応答はしません。
ARPリクエストのブロードキャストと該当ホストのユニキャスト応答を示す図。パケットに含まれる主要フィールドの概略も表示。
図解3_ARP通信(ARPリクエスト~ARPリプライ)

3-3_宛先IPが同じセグメントでない場合

宛先IPアドレスがそもそも同じセグメントでない場合、送信元の機器はデフォルトゲートウェイ(自身のネットワークの境界となっているL3機器【=ルータ等】)のIPアドレス に対して ARP を行います。流れとしては、以下になります。

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

4_ARP関係のwindowspoweshellコマンド

Windows 環境で ARP を確認・操作する際は WindowsPowerShell Get-NetNeighbor が便利です。

4-1_実行結果サンプル

Get‑NetNeighbor の出力例を視覚化した図。IPとMAC、State列(Reachable/Stale/Incomplete)などの見方を示す。
図解5_ARP通信(WindowsPowershell~Get-NetNeighbor実行結果)

4-2_出力結果の解説

項目名概要主な値の例意味(初心者向け)
ifIndexネットワークインターフェースを識別する番号1 / 12 / 23 などOS が内部で使う NIC の ID。どのインターフェースの ARP 情報かを判断するために使用。
IPAddress近隣ノード(ARP/NDP 対象)の IP アドレス192.168.1.1 / fe80::1 などARP で解決したい相手の IP。IPv4/IPv6 の両方が表示される。
LinkLayerAddressMAC アドレス(ARP で解決された結果)00-11-22-33-44-55 / (空欄)解決済みなら MAC が表示。未解決(Incomplete)の場合は空欄になる。
StateARP/NDP の解決状態Reachable / Stale / Delay / Probe / Incomplete / Failed通信可能か、再確認中か、未解決かを示す。トラブルシュートで重要。
PolicyStoreエントリがどこに保存されているかActiveStore / PersistentStore / Local / GroupPolicy動的学習(Active)、静的設定(Persistent)、GPO 配布(GroupPolicy)など設定の由来を示す。

4-2-1_stateの各値に関する補足

  • Reachable(到達可能)
    直近の通信で MAC アドレスが確認できている状態
    ARP 再送は不要で、そのまま通信可能
  • Stale(古い)
    以前は到達できたが、一定時間通信がなく「最新か不明
    次の通信時に必要なら再確認(ARP)を行う
  • Delay(遅延確認中)
    Stale の相手に対し、すぐには ARP を送らず「少し様子を見る」状態
  • Probe(再確認中)
    相手の MAC を再確認するため ARP を送信している状態
  • Incomplete(未解決)
    ARP リクエストを送ったが、まだ応答がない状態
  • Failed(失敗)
    ARP を複数回試したが応答が得られなかった状態

5_まとめ

 ARPはローカルネットワークの「橋渡し」で、IPとMACを結びつける重要な仕組みです。ARPテーブルの理解、リクエスト/リプライの流れを覚えておくとネットワークの理解がより一層深まります。

(参考)よくある質問

Q1
ARPとは何ですか?なぜ必要なのですか?
A1

ARP(Address Resolution Protocol)は、IPアドレスから対応するMACアドレスを調べるための仕組みです。 PCは通信相手のIPアドレスを知っていても、そのままではデータを届けられません。実際にフレームを送るにはMACアドレスが必要なため、ARPリクエストで「このIPのMACを教えて!」とネットワーク全体に問い合わせ、該当機器がARPリプライでMACアドレスを返します。これにより、送信元は正しい相手にデータを届けられるようになります。

Q2
ARPテーブル(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はまずゲートウェイへフレームを送り、そこから先のネットワークへルータが転送してくれる仕組みになっています。

コメント

タイトルとURLをコピーしました