ARPとは
ARP(Address Resolution Protocol:アドレス解決プロトコル)とは、IPアドレス(IPv4)からOSI参照モデルのデータリンク層で使用するMACアドレスを取得するためのプロトコルです。
スポンサーリンク
インターネット上で通信を行うためには、IPアドレスとMACアドレスが必要です。
上記のイメージ例の通り、IPアドレスは最終地点の宛先を指定していますが、MACアドレスは次の宛先を指定しています。
IPアドレスは、コンピュータの位置を特定するためのインターネット上の住所、それに対してMACアドレスは、隣接するコンピュータ間の通信を可能とするために必要な情報です。そのため、インターネット上で通信を行うためには、IPアドレスとMACアドレスが必要なのです。
そして、ARPは送信先のIPアドレスは分かるが、MACアドレスが分からないという時に使用されるプロトコルです。
ポイント
ARPとは、IPアドレスからMACアドレスを取得するためのプロトコル
ARPの流れ
ARP(Address Resolution Protocol)の仕組みは非常にシンプルです。「ARPリクエスト」と「ARPリプライ」と呼ばれる2種類のパケットを使用して、IPアドレスからMACアドレスを取得します。
ARPリクエスト
上記例で「PC1」は「PC3」にデータを送信しようとしています。しかし「PC3」のIPアドレスは分かるが、MACアドレスが分かっていません。そこで「PC1」は「ARPリクエスト」を送信します。
ARPリクエストとは「このIPアドレスが割り振られているコンピュータのMACアドレスを教えて」という内容のパケットです。
ARPリクエストは、ブロードキャストであり同じセグメント内の全コンピュータに送信されます。
ARPリクエスト時のARPパケットは以下のように設定されます。送信先のMACアドレスを取得したいので、送信先MACアドレスは未設定とします。
送信元MACアドレス | 送信元IPアドレス | 送信先MACアドレス | 送信先IPアドレス |
PC1のMACアドレス | PC1のIPアドレス | 未設定(00-00-00-00-00-00) | PC3のIPアドレス |
ARPリプライ
ARPリプライとは、ARPリクエストに対する応答です。上記例では「PC3」が「PC1」に対してARPリプライのパケットを送信しています。
ARPリクエストを受信した各コンピュータは、格納された送信先IPアドレスが自身のIPアドレスと同一であるかを確認し一致している場合、自身のMACアドレスを格納したARPリプライを送信元に返信します。
ARPリプライ時のARPパケットは以下のように設定されます。
送信元MACアドレス | 送信元IPアドレス | 送信先MACアドレス | 送信先IPアドレス |
PC3のMACアドレス | PC3のIPアドレス | PC1のMACアドレス | PC1のIPアドレス |
ARPキャッシュ
一度「ARPリクエスト」と「ARPリプライ」のやり取りが行われた場合、一定時間の間、ARPテーブルにARPキャッシュとして保持されます。
ARPキャッシュとして保持する理由は、効率を上げることです。ARPキャッシュにIPアドレスとMACアドレスの対応表を保持することで、次回からはARPキャッシュを利用してMACアドレスを求めることができます。
スポンサーリンク
ARPパケット
ARPパケットの内容は次の通りです。
項目名 | ビット | 説明 |
ハードウェアタイプ (Hardware Type) | 16 bit | ハードウェアの種類。イーサネットの場合は「0x0001」が設定される。 |
プロトコルタイプ (Protocol Type) | 16 bit | プロトコルの種類。IPv4の場合「0x0800」以降の値が設定される |
ハードウェア長 (Hardware Length) | 8 bit | MACアドレスの長さを表す。イーサネットの場合は「6」が設定される |
プロトコル長 (Protocol Length) | 8 bit | IPアドレスの長さを表す。IPv4の場合は「4」が設定される |
オペレーション(Operation) | 16 bit | ARPの動作の種類を表すためのコード(1:ARPリクエスト、2:ARPリプライ) |
送信元MACアドレス (Sender MAC address) | 48 bit | 送信元のMACアドレス |
送信元IPアドレス (Sender IP address) | 32 bit | 送信元のIPアドレス |
送信先MACアドレス (Target MAC address) | 48 bit | 送信先のMACアドレス。ARPリクエストの場合は 「00-00-00-00-00-00」 の値が入る。 |
送信先IPアドレス (Target IP address) | 32 bit | 送信先のIPアドレス。この情報が自分のものであった場合、受信したノードはARPリプライを返す。 |