Address Resolution Protocol

Address Resolution Protocol は、与えられたインターネット層アドレスに対応するリンク層アドレスを発見するために使用される通信プロトコルである。この対応付けは、インターネット・プロトコル・スイートにおける重要な機能である。ARPは、1982年に 826}} で定義され、その後 5227}}, 5494}} により内容のエンハンスが行われている。

ARPは、ネットワーク層技術とデータリンク層技術の様々な組み合わせで実装されている。IEEE 802標準を使用したIPv4、Chaosnet、DECnet、PARC Universal Packet、および、FDDI、X.25、フレームリレー、ATMなどである。IEEE 802.3およびIEEE 802.11上のIPv4が最も一般的な使用法である。

IPv6ネットワークでは、ARPの機能はICMPv6の近隣探索プロトコルによって提供される。

1. 操作範囲
-------

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

2. パケット構造
---------

ARPは、1つのアドレスのみの解決要求または応答を含む単純なメッセージフォーマットを使用する。ARPメッセージのサイズは、リンク層とネットワーク層のアドレスサイズによって異なる。メッセージヘッダで、各層で使用されているネットワークの種類とそれぞれのアドレスのサイズを指定する。メッセージヘッダには、要求と応答のどちらかであるかを示すオペレーションコードが含まれる。パケットのペイロードは、送信側ホストと受信側ホストそれぞれのハードウェアアドレスとプロトコルアドレス、計4つのアドレスで構成されている

イーサネット上で実行されているIPv4ネットワークの場合のARPパケットの構造を次の表に示す。この例では、パケットには送信元ハードウェアアドレスと送信先ハードウェアアドレス用の48ビットフィールドと、対応する送信元プロトコルアドレスと送信先プロトコルアドレス用の32ビットフィールドがある。この場合のARPパケットサイズは28バイトである。

 ハードウェアタイプ : ネットワークプロトコルの種類。イーサネットの場合は1。 プロトコルタイプ : ARPリクエスト要求が意図するインターネットプロトコル。IPv4の場合、0x0800以降の値。使用される値は、EtherTypeのものを流用する。 ハードウェア長 : オクテットによるハードウェアアドレスの長さ。イーサネットアドレスのサイズは6。 プロトコル長 : 上位層のプロトコルが使用するオクテットによるアドレス。IPv4のアドレスサイズは4。 オペレーション : 送信者が実行している動作。1は要求、2は返信。 送信元ハードウェアアドレス : 送信側のメディアアドレス。ARPリクエストでは、要求を送信するホストのアドレスを示す。ARP応答では、要求が探していたホストのアドレスを示す。スイッチはMACアドレスを学習するが、このフィールドに注意を払っていないことに注意が必要である。ARP PDUは、イーサネットフレームにカプセル化され、データリンク層のデバイスが調べる。 送信元プロトコルアドレス : 送信元のインターネットワークアドレス。 送信先ハードウェアアドレス : 受信側のメディアアドレス。ARPリクエストでは、このフィールドは無視する。ARP応答では、このフィールドは、ARPリクエストを送信したホストのアドレスを示す。 送信先プロトコルアドレス : 送信先のインターネットワークアドレス。ARPプロトコルのパラメータ値は Internet Assigned Numbers Authority  によって標準化され、維持されている.。

ARPのEtherTypeは0x0806である。これは、イーサネットヘッダ内で使用されてペイロードがARPパケットであることを示すものであり、カプセル化されるARPパケット内に含まれるPTYPEとは別である。

3. 動作
-----

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

3.1. ARPキャッシュ
-------------

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

4. ARPプローブ
----------

ARPプローブとは、送信者IPアドレスをALL0にしたARPリクエストである。この用語は、IPv4 Address Conflict Detection仕様で使用されている。この仕様を実装しているホストは、IPv4アドレスの使用を開始する前に、ARPプローブパケットをブロードキャストで送信して、アドレスが既に使用中かどうかを確認する必要がある。

5. ARPアナウンスメント
--------------

ARPは、単純なアナウンスプロトコルとしても使用できる。これは、送信者のIPアドレスまたはMACアドレスが変更されたときに、他のホストのハードウェアアドレスのマッピングを更新するために使用される。このアナウンスメントはgratuitous ARPメッセージとも呼ばれ、通常、送信先ハードウェアアドレスをALL0に設定し、送信元プロトコルアドレスを送信先プロトコルアドレスに格納したARPリクエストパケットであり、ブロードキャストで送信される。また、送信先アドレスと送信元アドレスの両方に送信元アドレスを格納したARPリプライをブロードキャストで送信したものもARPアナウンスメントとして使用される。

gratuitous ARPは、ARPリクエスト・ARPリプライのどちらも規格に規定されている正規の手法であるが、ARPリクエストを使用するほうが望ましい。デバイスによっては、どちらかのGARPを使用するように設定されているものもある。

ARPアナウンスは応答を求めることを目的としていない。パケットを受信した他のホストに対し、ARPテーブル内のキャッシュエントリを更新させることを目的としている。ARPの規格では、ARPテーブルがアドレスフィールドから更新される時のみオペレーションコードを解釈することと規定しているので、オペレーションコードは要求と応答のどちらでも良い。

多くのオペレーティングシステムは、起動時にGratuitous ARPを実行する。これは、仮に電源を落としている間にネットワークカードが変更されていた場合に、他のホストのARPキャッシュテーブルにIPアドレスと以前のMACアドレスとのマッピングが残っていると問題が起こるためである。

6. ARPメディエーション
--------------

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

7. Inverse ARP
--------------

Inverse Address Resolution Protocolは、データリンク層アドレスから他のノードのネットワーク層アドレスを取得するために使用される。これは主にフレームリレーやATMで使用される。これらのネットワークでは、仮想回線のレイヤ2アドレスはレイヤ2シグナリングから取得されることがあり、その仮想回線を使用する前に対応するレイヤ3アドレスを使用できるようにする必要がある。

ARPはレイヤ3アドレスをレイヤ2アドレスに変換するので、InARPはその逆と表現することができる。InARPはARPのプロトコル拡張として実装されている。ARPと同じパケットフォーマットを使用するが、オペレーションコードは異なる。

8. Reverse ARP
--------------

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

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

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

10. ARPの代替
----------

それぞれのコンピュータは、レイヤ3アドレスとレイヤ2アドレスのマッピングのデータベースを維持する。これは、主にローカルネットワークリンクからのARPパケットの受信によって維持されることから、このデータベースは一般に「ARPキャッシュ」と呼ばれる。伝統的には、静的な設定ファイルや一元管理されたリストなど、このテーブルを管理するために他の方法も使われていた。

少なくとも1980年代以降、ネットワーク接続のできるコンピュータは、このテーブルを表示したり操作したりするための'arp'というユーティリティを持っている。

11. ARPスタッフィング
--------------

ネットワークカメラやネットワーク配電装置などのユーザインタフェースのない組み込みシステムでは、「ARPスタッフィング」を使って初期ネットワーク接続を行うことができる。ただし、この仕組みはARPは関係ないので、これは不適切な名称である。

ARPスタッフィングは、コンシューマデバイスのネットワーク管理、特にイーサネットデバイスのIPアドレスの割り当てにおける以下のような問題の解決策である。

ユーザは、DHCPなどのアドレス割り当てプロトコルを制御することができない。
デバイスは、それを設定するためのユーザーインターフェースを持っていない。
適切なIPアドレスがないため、ユーザのコンピュータは通信ができない。採用された解決策は以下の通りである。

ユーザのコンピュータは、アドレステーブルに手動で入力されたIPアドレスを持っている。
コンピュータは特殊なパケットをデバイスに送信する。通常は、デフォルト以外のサイズのpingパケットである。
デバイスはこのIPアドレスを採用する。
その後、ユーザはtelnetやWebプロトコルで通信して設定を完了する。ARPスタッフィングを使用するデバイスは通常、攻撃に対して脆弱であるため、デバイスが正常に動作しているときはこのプロセスを無効にする。

12. 標準文書
--------

826}} - Ethernet Address Resolution Protocol, Internet Standard STD 37.
903}} - Reverse Address Resolution Protocol, Internet Standard STD 38.
2390}} - Inverse Address Resolution Protocol, draft standard
5227}} - IPv4 Address Conflict Detection, proposed standard

13. 関連項目
--------

ARPスプーフィング
Reverse address resolution protocol - MACアドレスからIPアドレスに変換するプロトコル
Gratuitous ARP - ARPパケットの送信元ホスト自身のIPアドレスに対するARP
ブリッジ
レイヤ3スイッチ
近隣探索プロトコル
プロキシARP - ルーターなどが代理でIPアドレスを回答する仕組み

14. 脚注
------

15. 外部リンク
---------

[1] 
[2] 
[4]
[5]
[6]
[7]
[8]