ARPとは

ARP(Address Resolution Protocol)とはIPアドレスとMACアドレスを対応付けるためのプロトコルです。そして、IPアドレスとMACアドレスを対応付けることをアドレス解決と呼び、ARPというプロトコルの名前の由来です。

ARPはイーサネットでIPパケットを転送するときに必要不可欠な大事なプロトコルです。

なぜMACアドレスが必要か?

TCP/IPの通信では、IPアドレスで宛先を指定しているのですが、なぜ、MACアドレスも必要なのでしょうか?それは、IPパケットをイーサネットインタフェースから送り出すには、イーサネットヘッダを付加しなければいけないからです。

ネットワーク上に送り出されるデータがどんなものかを復習するには「TCP/IPでの通信の仕組み」をご覧ください。

IPヘッダにはIPアドレスが必要です。そして、イーサネットヘッダにはMACアドレスが必要です。送信元IPアドレスと送信元MACアドレスはパケットを送信する機器のものなのでわかります。そして、TCP/IPの通信では必ずIPアドレスを指定するので、宛先IPアドレスは指定されたものを使えばよいです。あとは宛先MACアドレスが必要です。宛先IPアドレスに対応するMACアドレスを求めるためにARPがあります。

図 ARPによるアドレス解決の概要
イーサネットインタフェースから送り出すときには、「0」「1」のデジタルデータを物理的な信号へ変換しています。

ARPの仕組み

ARPのアドレス解決の範囲は同じネットワーク内のIPアドレスです。イーサネットインタフェースで接続されているPCなどの機器がIPパケットを送信するために宛先IPアドレスを指定したときに、自動的にARPが行われます。ユーザはARPの動作について特に意識する必要はありませんが、ARPによってアドレス解決を行っているということはネットワークの仕組みを知る上でとても重要です。

ARPの動作の流れは、次のようになります。

  1. ARPリクエストでIPアドレスに対応するMACアドレスを問い合わせる
  2. 問い合わされたIPアドレスを持つホストがARPリプライでMACアドレスを教える
  3. アドレス解決したIPアドレスとMACアドレスの対応をARPキャッシュに保存する

なお、ARPリクエストおよびARPリプライは、IPヘッダは付加せずイーサネットヘッダで直接カプセル化されます。

図 ARPのカプセル化

1.ARPリクエストで問い合わせ

IPアドレスを指定してIPパケットをイーサネットインタフェースから送り出すときに、まずARPリクエストを送信します。ARPリクエストの中身は「このIPアドレスのMACアドレスを教えてください」というものです。

ARPリクエストは同じネットワーク上のすべてのホストが受信するようにブロードキャストで送ります。ARPのアドレス解決は同じネットワークの中だけなのは、ブロードキャストを利用するからです。ブロードキャストは違うネットワークには転送されません。

2.ARPリプライでMACアドレスを教える

問い合わせ対象のIPアドレスのホストがARPリプライを返します。ARPリプライの内容は問い合わせされたMACアドレスです。ARPリプライでもとのホストは目的のIPアドレスに対するMACアドレスを認識できるようになります。

なお、ARPリクエストはブロードキャストなので、同じネットワーク上のすべてのホストが受信しますが、問い合わせ対象のIPアドレス以外のホストはARPリクエストを受信しても破棄します。

問い合わせ対象ではないホストはARPリクエストをいったん受信してから、自身に関係ないと判断して破棄します。そのため、ARPリクエストに関係ないホストには若干の余計な負荷がかかります。

3.ARPキャシュの更新

IPパケットを送信するたびごとにARPのアドレス解決を行うのは効率よくありません。IPアドレスとMACアドレスの対応はそうそう頻繁に変わるものではありません。そこで、いったん解決したIPアドレスをMACアドレスの対応を一定時間ARPキャッシュに保存します。なお、ARPキャッシュは問い合わせしたホストと問い合わせされたホストの両方で更新します。

ARPキャッシュにIPアドレスとMACアドレスの対応が存在していれば、ARPリクエストとリプライで名前解決する手順をスキップできます。

ARPキャッシュ内の情報は時間が経つと削除されます。

以下の図は、ARPのアドレス解決の例です。PC1から同じネットワーク上のPC3(IPアドレス 192.168.1.3)へデータを送信するときに、PC3のMACアドレスを解決する様子を表しています。

図 ARPの動作

PC3のMACアドレスを解決できたら、イーサネットヘッダの宛先MACアドレスを指定して、イーサネットインタフェースをからPC3宛てのデータを送り出すことができます。

図 アドレス解決後のデータの送信

異なるネットワークへデータを転送するとき

ARPのアドレス解決は同じネットワーク上のIPアドレスに対してのみです。では、異なるネットワークへデータを転送するときには、どのようにMACアドレスを求めればよいのでしょうか?

異なるネットワークのIPアドレス宛てにデータを送るときには、まず、デフォルトゲートウェイに転送します。デフォルトゲートウェイとは、同じネットワーク上のルータのIPアドレスです。他のネットワークへの入口です。ルータによって複数のネットワークが相互接続されています。つまり、異なるネットワークは同じネットワーク上のルータの先にあります。異なるネットワークへのデータを送るときには、問い合わせのIPアドレスとしてデフォルトゲートウェイのIPアドレスでARPリクエストを送信します。デフォルトゲートウェイのルータがARPリプライを返して、送信元のホストはデフォルトゲートウェイのMACアドレスがわかるようになります。

図 異なるネットワークにデータを送るときのARP

デフォルトゲートウェイのIPアドレスに対するMACアドレスを解決すると、イーサネットヘッダでカプセル化して、データを送信します。イーサネットヘッダの宛先MACアドレスは、デフォルトゲートウェイのものです。ですが、宛先IPアドレスは最終的にデータを送り届けたいホストのものになります。

そして、デフォルトゲートウェイがデータを受信して、宛先IPアドレスに基づいてルーティングします。

図 異なるネットワークへデータを送信