Address Resolution Protocol (ARP) について
Address Resolution Protocol(ARP、アドレス解決プロトコル)は、ネットワーク通信において、
IPアドレスのような論理的なネットワーク層アドレスを、物理的な
データリンク層アドレス(MACアドレスなど)に変換するために使用される重要なプロトコルです。これにより、異なるネットワーク層と
データリンク層の技術が組み合わされた環境でも、デバイス間の通信が可能になります。
ARPの役割と位置づけ
ARPは、インターネットプロトコルスイートの中で、リンク層に位置づけられます。これは、ARPが単一のサブネットワーク内で通信を行い、ルータを越えてルーティングされない性質を持つためです。ARPは、
IPv4ネットワークにおけるアドレス解決に広く利用されており、
イーサネットや
無線LANなどの様々なネットワーク技術で実装されています。
ARPの動作
ARPは、リクエストとレスポンスのメカニズムに基づいて動作します。具体的には、以下の手順で
IPアドレスからMACアドレスを解決します。
1.
ARPリクエストの送信: 送信元のホストは、目的の
IPアドレスに対応するMACアドレスを知るために、ARPリクエストをブロードキャストで送信します。このリクエストには、送信元の
IPアドレスとMACアドレス、および目的の
IPアドレスが含まれます。
2.
ARPリプライの返信: ARPリクエストを受信した各ノードは、リクエスト内の目的
IPアドレスが自身の
IPアドレスと一致するかを確認します。一致する場合、そのノードは自身のMACアドレスを含むARPリプライを、送信元のホストに返信します。
このプロセスにより、送信元のホストは目的の
IPアドレスに対応するMACアドレスを知り、以後の通信で使用できるようになります。
ARP
パケットは、アドレス解決に必要な情報を伝えるためのシンプルな構造を持っています。主な構成要素は以下の通りです。
ハードウェアタイプ (HTYPE): 使用しているネットワークプロトコルの種類を示します。イーサネットの場合は1。
プロトコルタイプ (PTYPE): ARPリクエストが対象とするインターネットプロトコルを示します。
IPv4の場合は0x0800など。
ハードウェア長 (HLEN): ハードウェアアドレス(MACアドレス)の長さをオクテット単位で示します。イーサネットの場合は6。
プロトコル長 (PLEN): プロトコルアドレス(
IPアドレス)の長さをオクテット単位で示します。
IPv4の場合は4。
オペレーション: ARPパケットの操作コードを示します。1はリクエスト、2は返信。
送信元ハードウェアアドレス (SHA): ARPリクエストを送信したホストのMACアドレス。
送信元プロトコルアドレス (SPA): ARPリクエストを送信したホストのIPアドレス。
送信先ハードウェアアドレス (THA): 目的のホストのMACアドレス。ARPリクエストでは無視される。
送信先プロトコルアドレス (TPA): 目的のホストのIPアドレス。
ARPキャッシュ
効率的な通信のために、多くのデバイスはARPテーブルに、IPアドレスとMACアドレスのマッピング情報をARPキャッシュとして保存します。これにより、同一のIPアドレスに対するMACアドレスの解決を何度も行う必要がなくなります。ARPキャッシュには有効期限があり、一定時間経過すると情報は削除されます。
ARPプローブ
ARPプローブは、ホストがIPアドレスの使用を開始する前に、アドレスがネットワーク上で既に使われていないかを確認するために送信するARPリクエストです。送信元IPアドレスをALL0に設定したARPリクエストをブロードキャスト送信することで、アドレスの衝突を事前に検出します。
ARPアナウンスメント (Gratuitous ARP)
ARPアナウンスメント(Gratuitous ARP、GARP)は、ホストが自身のIPアドレスやMACアドレスの変更をネットワーク上の他のデバイスに通知するために使用されます。これにより、他のデバイスのARPキャッシュを最新の状態に保ち、通信のトラブルを防ぐことができます。ARPアナウンスメントは、ARPリクエストまたはARPリプライの形式で送信され、ブロードキャストされます。
ARPメディエーション
異なるアドレス解決プロトコルが使用されているネットワーク(例えば、イーサネットとフレームリレー)を接続する場合、ARPメディエーションが使用されます。これにより、異なるプロトコル間でのアドレス解決が可能となり、シームレスな通信を実現します。
Inverse ARP (InARP)
Inverse ARP (InARP)は、データリンク層アドレス(例えば、フレームリレーのDLCI)からネットワーク層アドレス(IPアドレス)を取得するために使用されるプロトコルです。ARPの逆の役割を果たすことから、InARPと呼ばれます。主にフレームリレーやATMのようなネットワークで使用されます。
Reverse ARP (RARP)
Reverse ARP (RARP)も、データリンク層アドレスからネットワーク層アドレスを取得するために使用されますが、InARPとは異なり、要求側自身のIPアドレスを取得するために使用されます。RARPは現在ではあまり使用されておらず、より高度なプロトコルであるBOOTPやDHCPに置き換えられています。
ARPスプーフィングとプロキシARP
ARPには、応答の認証メカニズムがないという脆弱性があります。このため、悪意のあるユーザが、偽のARP応答を送信し、通信を傍受する「ARPスプーフィング」を行う可能性があります。ARPスプーフィングは、中間者攻撃やDoS攻撃などの原因となることがあります。
一方、プロキシARPは、ルータが、他のネットワークのホストに代わってARP要求に応答する仕組みです。主にNAT環境で使用されます。
ARPの代替
各コンピュータは、IPアドレスとMACアドレスのマッピング情報をARPキャッシュとして保持しています。この情報は、主にネットワークからのARPパケットの受信によって更新されます。'arp'コマンドユーティリティを使用すると、このARPキャッシュの情報を表示したり、操作したりすることができます。
ARPスタッフィング
ユーザーインターフェースを持たない組み込みデバイスなどの初期設定において、ARPスタッフィングという手法が使われることがあります。これは、手動でデバイスのMACアドレスをARPテーブルに追加し、特別なパケットを送信することで、デバイスにIPアドレスを設定する方法です。しかし、ARPスタッフィングはセキュリティ上のリスクがあるため、通常はデバイスが正常に動作するようになったら無効にする必要があります。
標準文書
ARPに関する主な標準文書は以下の通りです。
RFC 826: Ethernet Address Resolution Protocol
RFC 903: Reverse Address Resolution Protocol
RFC 2390: Inverse Address Resolution Protocol
RFC 5227: IPv4 Address Conflict Detection
関連項目
ARPスプーフィング
Reverse address resolution protocol (RARP)
Gratuitous ARP
ブリッジ
レイヤ3スイッチ
近隣探索プロトコル
プロキシARP
まとめ
ARPは、ネットワーク通信における基本的なプロトコルであり、
IPアドレスとMACアドレスの対応付けを行う上で不可欠な役割を果たしています。しかし、ARPはセキュリティ上の脆弱性も抱えているため、適切な対策を講じる必要があります。ARPの理解を深めることは、ネットワーク管理やセキュリティ対策において非常に重要です。