アドレス解決プロトコル(ARP)は、インターネット層アドレス(通常はIPv4アドレス)に関連付けられたMACアドレスなどのリンク層アドレスを検出するための通信プロトコルです。インターネットプロトコルスイートの一部であるこのプロトコルは、インターネット標準規格STD 37であるRFC 826によって1982年に定義されました。
ARPは、IPアドレスに関連付けられたMACアドレスを取得するためのプロトコルを提供することで、ホストが例えばローカルネットワーク内の別のノードにIPv4パケットを送信できるようにします。ホストはターゲットノードのIPアドレスを含む要求をブロードキャストし、そのIPアドレスを持つノードは自身のMACアドレスで応答します。
ARPは、 IPv4、Chaosnet、DECnet 、 IEEE 802規格を使用したXerox PARC Universal Packet (PUP) 、FDDI、X.25、フレームリレー、非同期転送モード(ATM)など、ネットワーク層とデータリンク層の技術の多くの組み合わせで実装されています。
インターネットプロトコルバージョン6 (IPv6)ネットワークでは、ARPの機能は近隣探索プロトコル(NDP)によって提供されます。
アドレス解決プロトコルは、要求応答型のプロトコルです。そのメッセージは、リンク層プロトコルによって直接カプセル化されます。単一のサブネットワークの境界内で通信され、ルーティングは行われません。
アドレス解決プロトコル(ARP)は、1つのアドレス解決要求または応答を含むシンプルなメッセージ形式を使用します。パケットは、基盤となるネットワークのデータリンク層で生のペイロードとして伝送されます。イーサネットの場合、 ARPフレームを識別するためにEtherType値0x0806 が使用されます。
ARPメッセージのサイズは、リンク層とネットワーク層のアドレスサイズによって決まります。メッセージヘッダーには、各層で使用されているネットワークの種類と、それぞれのアドレスサイズが指定されます。メッセージヘッダーは、要求(1)と応答(2)の操作コードで完成します。パケットのペイロードは、送信側ホストと受信側ホストのハードウェアアドレスとプロトコルアドレスの4つのアドレスで構成されます。
ARPパケットの主なパケット構造を以下の表に示します。この表は、イーサネット上で動作するIPv4ネットワークの場合を例にしたものです。このシナリオでは、パケットは送信側ハードウェアアドレス(SHA)と宛先ハードウェアアドレス(THA)に48ビットのフィールドを持ち、対応する送信側プロトコルアドレス(SPA)と宛先プロトコルアドレス(TPA)に32ビットのフィールドを持ちます。この場合のARPパケットのサイズは28バイトです。
ARPパラメータ値は標準化されており、インターネット割り当て番号機関(IANA)によって管理されています。[ 1 ]
ARPのEtherTypeは0x0806です。これは、ペイロードがARPパケットである場合にイーサネットフレームヘッダーに表示され、このカプセル化されたARPパケット内に表示されるPTYPEと混同しないように注意が必要です。
ARP がインターネット プロトコル スイートおよびOSI モデル内でどのような位置づけにあるかは、混乱や議論の的となる場合がある。RFC 826では、ARP をリンク層に位置づけ、インターネット層などの「上位層」について問い合わせるツールとして特徴づけている。[ 3 ] RFC 1122もリンク層のセクションで ARP について論じている。[ 4 ] Richard Stevens は ARP を OSI のデータ リンク層に位置づけているが[ 5 ]、新しい版ではネットワーク層に関連付けたり、中間的な OSI 層 2.5 を導入したりしている。[ 6 ]
2台のコンピュータAとBは、ゲートウェイやルーターを介さずに同じローカルエリアネットワークに接続されています。Aは、BのIPアドレスである192.168.0.55に送信するパケットを持っています。
AはパケットをBに送信する前に、ブロードキャストMACアドレスFF:FF:FF:FF:FF:FFで宛先を指定し、IPアドレス192.168.0.55を持つノードからの応答を要求するARP要求メッセージをブロードキャストします。ネットワーク上のすべてのノードがこのメッセージを受信しますが、要求されたIPアドレスを持っているBのみが応答します。Bは自身のMACアドレスを含むARP応答メッセージで応答し、Aはそれを受信します。AはBのMACアドレスで宛先を指定し、リンク上でデータパケットを送信します。
通常、ネットワークノードは、 IPアドレスとMACアドレスを関連付けるルックアップキャッシュを保持します。この例では、Aがルックアップをキャッシュしていれば、ARP要求をブロードキャストする必要はありません。また、Bが要求を受信した際に、ルックアップをAにキャッシュすることで、 Bが後でAにパケットを送信する必要がある場合、MACアドレスをルックアップするためにARPを使用する必要がなくなります。最後に、AがARP応答を受信した際に、同じIPアドレス宛の今後のメッセージのためにルックアップをキャッシュすることができます。[ 7 ]
IPv4 におけるARPプローブは、プローブ元のホストの SHA、すべて 0 の SPA、すべて 0 の THA、およびプローブ対象の IPv4 アドレスに設定された TPA で構成される ARP リクエストです。ネットワーク上のいずれかのホストが、その IPv4 アドレス (TPA 内) を自身のアドレスとみなす場合、プローブに対して (プローブ元のホストの SHA を介して) 応答し、アドレスの競合が発生していることをプローブ元のホストに通知します。逆に、その IPv4 アドレスを自身のアドレスとみなすホストが存在しない場合は、応答はありません。このようなプローブを複数回、わずかな遅延を伴って送信しても、いずれのホストからも応答がない場合、競合は発生していないと合理的に判断できます。元のプローブ パケットには有効な SHA/SPA も有効な THA/TPA も含まれていないため、ホストがそのパケットを使用して問題のあるデータでキャッシュを更新するリスクはありません。 IPv4 アドレス(手動設定、DHCP、またはその他の手段で取得したアドレス)の使用を開始する前に、この仕様を実装するホストは、ARP プローブ パケットをブロードキャストして、そのアドレスが既に使用されているかどうかをテストする必要があります。[ 8 ] [ 9 ]
ARPは、単純なアナウンスプロトコルとしても使用できます。これは、送信者のIPアドレスまたはMACアドレスが変更されたときに、他のホストのハードウェアアドレスのマッピングを更新するのに役立ちます。このようなアナウンスは、GARP(Gratuitous ARP )メッセージとも呼ばれ、通常はターゲットフィールドにSPA(TPA=SPA)を含み、THAをゼロに設定したARPリクエストとしてブロードキャストされます。別の方法として、送信者のSHAとSPAをターゲットフィールドに複製したARP応答(TPA=SPA、THA=SHA)をブロードキャストすることもできます。
ARP要求アナウンスとARP応答アナウンスはどちらも標準ベースの方法ですが、 [ 10 ] : §4.6 ARP要求方式が推奨されます。[ 11 ] : §3一部のデバイスは、これら2種類のアナウンスのいずれかを使用するように構成できます。[ 12 ]
ARPアナウンスは応答を要求することを目的とするものではなく、パケットを受信した他のホストのARPテーブル内のキャッシュされたエントリを更新するものです。アナウンスの操作コードは要求または応答のいずれかであり、ARP標準では、アドレスフィールドからARPテーブルが更新された後にのみ操作コードが処理されると規定されています。[ 13 ] [ 10 ] : §4.6 [ 14 ] : §4.4.1
多くのオペレーティングシステムは、起動時にARPアナウンスを発行します。これは、例えばネットワークカードが最近交換された(IPアドレスとMACアドレスのマッピングが変更された)にもかかわらず、他のホストがARPキャッシュに古いマッピングを保持している場合に発生する問題を解決するのに役立ちます。
ARPアナウンスは、一部のネットワークインターフェースで受信トラフィックの負荷分散を行うためにも使用されます。ネットワークカードのチームにおいては、受信パケットを受け取るべきチーム内の異なるMACアドレスをアナウンスするために使用されます。
ZeroconfプロトコルではARPアナウンスを使用して、他のIPアドレス設定が利用できないインターフェースにリンクローカルアドレスを自動的に割り当てることができます。アナウンスは、ホストが選択したアドレスがネットワークリンク上の他のホストによって使用されていないことを確認するために使用されます。[ 15 ]
この機能はサイバーセキュリティの観点から危険です。攻撃者は、サブネット内の他のホストに関する情報を取得し、ARPキャッシュ(ARPスプーフィング)に、例えばデフォルトゲートウェイのIPアドレスに攻撃者のMACアドレスを関連付けたエントリを保存することで、外部ネットワークへのすべてのトラフィックを傍受することが可能になります。
ARP メディエーションとは、接続された回線で異なる解決プロトコルが使用されている場合(例えば、一方の端がEthernetで、もう一方の端がFrame Relay の場合)、仮想プライベートワイヤサービス(VPWS) を介してレイヤ 2 アドレスを解決するプロセスを指します。 IPv4では、各プロバイダエッジ(PE) デバイスがローカルに接続されたカスタマーエッジ(CE) デバイスの IP アドレスを検出し、その IP アドレスを対応するリモート PE デバイスに配布します。その後、各 PE デバイスは、リモート CE デバイスの IP アドレスとローカル PE デバイスのハードウェア アドレスを使用してローカル ARP 要求に応答します。IPv6では、各 PE デバイスがローカルおよびリモート CE デバイスの両方の IP アドレスを検出し、ローカルのNeighbor Discovery (ND) およびInverse Neighbor Discovery (IND) パケットを傍受して、リモート PE デバイスに転送します。[ 16 ]
逆アドレス解決プロトコル(Inverse ARPまたはInARP)は、データリンク層(レイヤ2)アドレスから他のノードのネットワーク層アドレス(例えばIPアドレス)を取得するために使用されます。ARPはレイヤ3アドレスをレイヤ2アドレスに変換するため、InARPはその逆と表現できます。また、InARPはARPのプロトコル拡張として実装されており、ARPと同じパケット形式を使用しますが、動作コードは異なります。
InARPは主にフレームリレー(DLCI )およびATMネットワークで使用され、仮想回線のレイヤ2アドレスはレイヤ2シグナリングから取得される場合があり、それらの仮想回線を使用する前に対応するレイヤ3アドレスが利用可能である必要があります。[ 17 ]
リバースアドレス解決プロトコル(Reverse ARPまたはRARP)は、InARPと同様に、レイヤ2アドレスをレイヤ3アドレスに変換します。ただし、InARPでは要求ステーションが別のノードのレイヤ3アドレスを照会するのに対し、RARPはアドレス構成のために要求ステーション自身のレイヤ3アドレスを取得するために使用されます。RARPは廃止されており、BOOTPに置き換えられ、その後DHCP( Dynamic Host Configuration Protocol)に置き換えられました。[ 18 ]

ARP はネットワーク上で ARP 応答を認証する方法を提供しないため、ARP 応答は必要なレイヤ 2 アドレスを持つシステム以外のシステムから送信される可能性があります。ARPプロキシは、通常、ダイヤルアップ インターネット サービスなどのネットワーク設計の一部として、トラフィックを転送する別のシステムに代わって ARP 要求に応答するシステムです。対照的に、ARPスプーフィングでは、応答システム、つまりスプーファーが、別のシステムのアドレスに対する要求に応答し、そのシステム宛てのデータを傍受します。悪意のあるユーザーは、ARP スプーフィングを使用して、ネットワーク上の他のユーザーに対して中間者攻撃またはサービス拒否攻撃を実行する可能性があります。ARP 自体はこのような攻撃から保護する方法を提供していませんが、ARP スプーフィング攻撃を検出および実行するさまざまなソフトウェアが存在します。[ 19 ]
コンピュータは、アクティブなプロトコルを使用する代わりに、既知のアドレスのリストを保持する場合があります。この方法では、各コンピュータはレイヤ 3アドレス ( IP アドレスなど) とレイヤ 2アドレス (イーサネットMAC アドレスなど) のマッピングのデータベースを保持します。このデータは主にローカル ネットワーク リンクからの ARP パケットを解釈することによって保持されます。そのため、これはARP キャッシュと呼ばれることがよくあります。少なくとも 1980 年代以降、[ 20 ]ネットワーク コンピュータには、このデータベースを照会または操作するためのarpと呼ばれるユーティリティがあります。[ 21 ] [ 22 ] [ 23 ]
歴史的には、静的構成ファイル[ 24 ]や中央管理リストなど、アドレス間のマッピングを維持するために他の方法が使用されていました。
ユーザーインターフェースを持たないネットワークカメラ[ 25 ]やネットワーク配電装置[ 26 ]などの組み込みシステムは、いわゆるARPスタッフィングを使用して初期ネットワーク接続を行うことができますが、これはARPが関与していないため誤称です。
ARPスタッフィングは次のように行われます。
このようなデバイスは通常、デバイスが正常に動作し始めたらこのプロセスを無効にする方法を備えている。なぜなら、この機能があると攻撃に対して脆弱になる可能性があるからだ。
ARP 応答パケットではなく ARP 要求パケットを使用して実行されるのはなぜですか?
[...] ARP パケットが生成されますが、[...] OPCODE タイプは REQUEST ではなく REPLY です。