Address Resolution Protocol

操作範囲

ARPはリクエスト＝レスポンス・プロトコルであり、メッセージがリンク層プロトコルによってカプセル化される。単一のサブネットワークの内部のみで通信され、ルータを越えてルーティングされることはない。この特性のため、ARPはインターネットプロトコルスイートのリンク層に配置される。

動作

送信元は、送信元のIPアドレス・MACアドレスと送信先のIPアドレスを格納したARPリクエスト（送信先のMACアドレスはALL0）をブロードキャストで送信する。ARPリクエストを受信した各ノードは、格納された送信先IPアドレスが自身のIPアドレスと同一であれば、自身のMACアドレスを格納したARPリプライを送信元に返信する。

ARPキャッシュ

効率を上げるため、多くの機器では一度取得したIPアドレスとMACアドレス間のマッピング情報をARPテーブルにARPキャッシュとして保持する。BSD Unix に由来する TCP/IP スタックを実装した機器の多くは、タイムアウト値として 1200秒（20分）を採用している。また、Ciscoの機器ではタイムアウトのデフォルト値として14400秒（4時間）を採用している。キャッシュ情報はTCP/IPがサポートされたWindowsであればコマンドプロンプトから arp -a と入力すれば一覧が見られ、キャッシュ情報はハイフンで分割された6つの16進数で表示される。

ARPプローブ

ARPプローブ(ARP probe)とは、送信者IPアドレス(SPA)をALL0にしたARPリクエストである。この用語は、IPv4 Address Conflict Detection（IPv4アドレス競合検出）仕様( RFC 5227 )で使用されている。この仕様を実装しているホストは、IPv4アドレスの使用を開始する前に（手動設定、DHCP、またはその他の手段でIPアドレスを受信したかどうかにかかわらず）、ARPプローブパケットをブロードキャストで送信して、アドレスが既に使用中かどうかを確認する必要がある。

ARPアナウンスメント

ARPは、単純なアナウンスプロトコルとしても使用できる。これは、送信者のIPアドレスまたはMACアドレスが変更されたときに、他のホストのハードウェアアドレスのマッピングを更新するために使用される。このアナウンスメントはgratuitous ARP(GARP)メッセージとも呼ばれ、通常、送信先ハードウェアアドレス(THA)をALL0に設定し、送信元プロトコルアドレスを送信先プロトコルアドレスに格納した(TPA=SPA)ARPリクエストパケットであり、ブロードキャストで送信される。また、送信先アドレスと送信元アドレスの両方に送信元アドレスを格納(TPA=SPA、THA=SHA)したARPリプライをブロードキャストで送信したものもARPアナウンスメントとして使用される。
gratuitous ARPは、ARPリクエスト・ARPリプライのどちらも規格に規定されている正規の手法であるが、ARPリクエストを使用するほうが望ましい。デバイスによっては、どちらかのGARPを使用するように設定されているものもある。
ARPアナウンスは応答を求めることを目的としていない。パケットを受信した他のホストに対し、ARPテーブル内のキャッシュエントリを更新させることを目的としている。ARPの規格では、ARPテーブルがアドレスフィールドから更新される時のみオペレーションコードを解釈することと規定しているので、オペレーションコードは要求と応答のどちらでも良い。
多くのオペレーティングシステムは、起動時にGratuitous ARPを実行する。これは、仮に電源を落としている間にネットワークカードが変更されていた場合に、他のホストのARPキャッシュテーブルにIPアドレスと以前のMACアドレスとのマッピングが残っていると問題が起こるためである。

ARPメディエーション

ARPメディエーション(ARP mediation)とは、接続した回線で異なるアドレス解決プロトコルが使用されている場合（例えば、一方の端がイーサネットで、もう一方の端がフレームリレーであるような場合）、Virtual Private Wire Service(VPWS)を介してレイヤ2アドレスを解決するプロセスである。IPv4では、各プロバイダエッジ(PE)デバイスは、ローカルに接続されているカスタマエッジ(CE)デバイスのIPアドレスを検出し、そのIPアドレスを対応するリモートPEデバイスに配布する。その後、各PEデバイスは、リモートCEデバイスのIPアドレスとローカルPEデバイスのハードウェアアドレスを使用してローカルのARPリクエストに応答する。IPv6では、各PEデバイスはローカルとリモートの両方のCEデバイスのIPアドレスを検出し、次にローカルの近隣探索(ND)パケットと逆近隣探索(IND)パケットを代行受信し、それらをリモートPEデバイスに転送する。

Inverse ARP

Inverse Address Resolution Protocol（Inverse ARP、InARP）は、データリンク層（レイヤ2）アドレスから他のノードのネットワーク層アドレス（IPアドレスなど）を取得するために使用される。これは主にフレームリレー（DLCI）やATMで使用される。これらのネットワークでは、仮想回線のレイヤ2アドレスはレイヤ2シグナリングから取得されることがあり、その仮想回線を使用する前に対応するレイヤ3アドレスを使用できるようにする必要がある。
ARPはレイヤ3アドレスをレイヤ2アドレスに変換するので、InARPはその逆と表現することができる。InARPはARPのプロトコル拡張として実装されている。ARPと同じパケットフォーマットを使用するが、オペレーションコードは異なる。

Reverse ARP

Reverse Address Resolution Protocol（Reverse ARP、RARP）は、InARPと同様にレイヤ2アドレスをレイヤ3アドレスに変換するために使用する。ただし、InARPでは、要求側は別のノードのレイヤ3アドレスを照会するのに対し、RARPはアドレス設定の際に要求側自体のレイヤ3アドレスを取得するために使用される。RARPは現在ではほぼ使用されていない。RARPはBOOTPに置き換えられ、BOOTPも後にDHCPに置き換えられている。

ARPスプーフィングとプロキシARP

ARPにはネットワーク上のARPリプライを認証する方法がなく、ARPリプライは必要なレイヤ2アドレスを持つシステム以外のシステムから送信される可能性もある。プロキシARP(Proxy ARP)は、ネットワークの設計の一部として、他のネットワークにARP要求があった場合にルータがホストに代わって回答する仕組みであり、NAT環境下において使用される例が多い。これに対して、ARPスプーフィング(ARP spoofing)は、そのシステム宛てのデータを傍受する目的で、別のシステムのアドレスに対するARPリクエストに応答するものである。ARPスプーフィングを使用して、悪意のあるユーザがネットワーク上の他のユーザーに対して中間者攻撃やDoS攻撃を行う可能性がある。ARP自体にはこのような攻撃からの保護方法は提供されておらず、ARPスプーフィング攻撃を検出して対策するための様々なソフトウェアが存在する。

ARPの代替

それぞれのコンピュータは、レイヤ3アドレス（IPアドレスなど）とレイヤ2アドレス（イーサネットMACアドレスなど）のマッピングのデータベースを維持する。これは、主にローカルネットワークリンクからのARPパケットの受信によって維持されることから、このデータベースは一般に「ARPキャッシュ」と呼ばれる。伝統的には、静的な設定ファイルや一元管理されたリストなど、このテーブルを管理するために他の方法も使われていた。
少なくとも1980年代以降、ネットワーク接続のできるコンピュータは、このテーブルを表示したり操作したりするための'arp'というユーティリティを持っている。