ARP(Address Resolution Protocol)

ARP(Address Resolution Protocol)はIPアドレス(レイヤー3のアドレス)からMACアドレス(レイヤー2のアドレス)を求めるためのプロトコルです。TCP/IPの階層モデルでは、インターネット層に位置づけられています。(OSI参照モデルではネットワーク層とデータリンク層にまたがっています。)

IPは、「IPアドレス」で送信元や宛先を認識しています。一方で、イーサネットや無線LANでは「MACアドレス」で送信元や宛先を認識しています。

これらの情報は、各プロトコルヘッダにカプセル化されて、ネットワーク上に送信されます。
しかし、宛先MACアドレスまでユーザーが指定して通信を行うのは、負担が大きすぎます。
このため、TCP/IPでは、「宛先IPアドレス」に対応したMACアドレスを動的に調べるために、ARPが提供されています。

例えば、あるコンピュータから別のコンピュータに通信しようとした際、IPヘッダには「宛先IPアドレス」が格納されます。この「宛先IPアドレス」を元に「次の受信先のMACアドレス」を調査してくれるのがARPです。

ARPパケットキャプチャ時の様子

上図のパケットでは、送信元のコンピュータが「10.0.0.254は誰ですか?」というパケット(1番目のパケット)を全員に送信(ブロードキャスト)しています。このパケットを受けとったコンピュータは自分とは違うIPアドレスであれば、このパケットを破棄します。IPアドレスが10.0.0.254のコンピュータは、自身のMACアドレスを返します。

上図では2番目パケットがARP応答にあたります。応答パケットには「10.0.0.254のMACアドレスは00:1a:a2:5a:3b:4aです」というシンプルな内容が格納されています。

なお、ARPによる問い合わせは通信時に必ず毎回行われるのではなく、一度問い合わせた結果を一定時間、ARPテーブルと呼ばれる領域にキャッシュされます。

WindowsでARPテーブルを確認するには以下のコマンドを実行します。

> arp  -a
インターフェイス: 172.16.0.5 --- 0xc
  インターネット アドレス      物理アドレス      種類
  172.16.0.100          00-24-a5-a5-1a-35     動的
  172.16.0.254          00-24-a5-f0-fc-e4     動的
  172.16.0.255          ff-ff-ff-ff-ff-ff     静的
  224.0.0.22            01-00-5e-00-00-16     静的
  224.0.0.251           01-00-5e-00-00-fb     静的
  224.0.0.252           01-00-5e-00-00-fc     静的
  239.255.255.250       01-00-5e-7f-ff-fa     静的
  255.255.255.255       ff-ff-ff-ff-ff-ff     静的

ARPの利用用途

前述のとおりARPはIPアドレスからMACアドレスを求めることが本来の利用目的ですが、それ以外にも様々な用途で使われています。

IPアドレスの重複確認

DHCPなどでIPアドレスを自動割り当てする際、そのIPアドレスが既に使用されていないかを確認しますが、その際にもARPは利用されます。これから割り当てようとするIPアドレスに対してARP要求パケットを送信することで、そのIPアドレスを使用しているホストがないかを確認します。応答が返ってこれば既に使われており、応答が返ってこなければまだ誰も使用していないIPアドレスと判断するわけです。
このような自分自身のIPアドレスや使用予定のIPアドレスを設定して送信するARP要求パケットのことをGratuitous ARP(GARP)(読み方:グラチュータスアープ、ジーアープ)と呼びます。

ネットワーク監視

IPアドレスを基にネットワークの生存確認を行う場合、通常はpingを使用します。しかし、同一ネットワーク内で単に応答があるかどうかを確認したいときには、ARPを生存確認に使うことあります。
監視対象の機器に対してARP要求パケットを送り、応答が返れば、その機器は動作していると確認できます。

ネットワーク機器のフェールオーバー発生通知

ネットワーク機器を冗長化(アクティブ-スタンバイ構成)している場合、主系で障害が発生し、副系へ切り替わった(フェールオーバーした)場合、IPアドレスはそのままでMACアドレスだけ変わることになります。
その場合、ホスト(パソコン等)との間にあるスイッチングハブなどにMACアドレスが変わったことを教え、学習させる、つまり、スイッチングハブのMACアドレステーブル(MACアドレスとインターフェースポートが対応付けられた表)更新する必要があります。

ARPはそのための手段としても使われます。
ARP要求パケットを送信し、その送信元MACアドレスをスイッチに学習させることで、MACアドレステーブルを更新することができます。

実際、ネットワーク機器冗長化のためのプロトコルであるVRRPでは、ネットワーク機器が切り替わった場合、スイッチングハブの更新のために、Gratuious ARPを送ってアドレステーブルを書き換えます。

Gratuitous ARPは、通信するタイミングではなく、自らが積極的に相手に自身のIPアドレスを周知するために使われるARPと言えます。