通信用語の基礎知識 IPv4
戻る
発見!イイお店

ARP

辞書:通信用語の基礎知識 通信手順中編 (CPTRAN)
読み:アープ
外語:ARP: Address Resolution Protocol 英語
品詞:固有名詞
2006/01/12 作成
2008/06/11 更新

MACアドレス(Ethernetアドレス)とIPアドレスの関係などを管理するプロトコル。仕様はRFC 826(STD 37)に簡潔に書かれている。

機能

このプロトコルは、ハードウェアアドレスとその上位で動作するプロトコルアドレスの関係を管理するものである。

OSI参照モデルネットワーク層に属するプロトコルで、Ethernetの上に直接実装されている。

EtherType(Ethernetフレームタイプ番号)は0x0806である。

実際には様々なハードウェアアドレスやプロトコルアドレスに対応する汎用性の高いプロトコルであり、様々な環境で利用できる。但し、最もよく使われているのがEthernetでの利用で、MACアドレスとIPアドレスの関係管理である。

以降は、このEthernetでの利用を前提として解説する。

Ethernet

Ethernetでは、通信相手をMACアドレスで識別する。そのため、通信したいノードのIPアドレスが分かっていても、そのノードのMACアドレスが分からなければ通信できない。

そこで、IPアドレスからEthernetのMACアドレスを求めるためのプロトコルとしてARPがある。なお、IPアドレスからMACアドレスを求めることを「アドレス解決」と言う。

パケット構造

先頭より順番に、次の情報が格納される。

  • ハードウェアタイプ (ar$hrd) (2オクテット)
    • ARPHRD_ETHER (1) ‐ Ethernet
    • ARPHRD_IEEE802 (6) ‐ IEEE 802
    • ARPHRD_ARCNET (7)
    • ARPHRD_FRELAY (15) ‐ フレームリレー
    • ARPHRD_STRIP (23) ‐ Ricochet Starmode Radio
    • ARPHRD_IEEE1394 (24) ‐ IEEE 1394 (FireWire)
  • プロトコル (ar$pro) (2オクテット)
  • MACアドレス長 (ar$hln) (1オクテット)
  • IPアドレス長 (ar$pln) (1オクテット)
  • オペレーションコード (ar$op) (2オクテット)
    • ARPOP_REQUEST (1) ‐ ARP要求
    • ARPOP_REPLY (2) ‐ ARP応答
    • ARPOP_REVREQUEST (3) ‐ RARP要求
    • ARPOP_REVREPLY (4) ‐ RARP応答
    • ARPOP_INVREQUEST (8) ‐ Inverse ARP(IARP)要求
    • ARPOP_INVREPLY (9) ‐ Inverse ARP(IARP)応答
  • 送信元のMACアドレス (ar$sha)
  • 送信元のIPアドレス (ar$spa)
  • 宛先のMACアドレス (ar$tha)
  • 宛先のIPアドレス (ar$tpa)

オペレーションコードにあるRARPとIARPは、実際にはARPとは異なるプロトコルである。ARPの拡張であるため、参考までに記載した。

アドレス解決の手順

基本動作

基本的には要求を投げ、その応答を待つ。

オペレーティングシステム(OS)であれば、通常は下位層(デバイスドライバーなど)が処理している。この処理が必要に応じてARPパケットをブロードキャストし、その際、当該の機器が(あれば)応答を返すので、それを待つことになる。

機器としてARPを実装する場合、自分宛への解決要求かを確認し、もしそうであったら、パケットの所定の欄に自分のMACアドレスを入れ、質問主にユニキャストで返信する。

ARPの仕様を記載したRFCは古いため現在主流の書式と違って分かりづらいが、基本はこれだけである。

ARP要求の送信

ネットワークの実装で、送信時に未知のMACアドレスが必要になった場合、ARPの要求をネットワークに送信する。このパケットはブロードキャストで送信されるため、同じセグメント内にある全てのノードが受信できる。

この際、次の内容を設定して送信する。

  • ハードウェアタイプ(ar$hrd) ‐ Ethernetの場合は値1が使われる
  • プロトコル(ar$pro) ‐ 解決を要求するプロトコルを表わすEtherTypeIPv4アドレスなら0x0800
  • MACアドレス長(ar$hln) ‐ 通常は6
  • IPアドレス長(ar$pln) ‐ 通常は4
  • オペコード ‐ ARP要求はares_op$REQUEST(値は1)
  • 送信元のMACアドレス(ar$sha) ‐ 自分のMACアドレス
  • 送信元のIPアドレス(ar$spa) ‐ 自分のIPアドレス
  • 宛先のMACアドレス(ar$tha) ‐ ゼロで埋めておく(未定のため)
  • 宛先のIPアドレス(ar$tpa) ‐ アドレス解決を要求するIPアドレス

ARP要求の返信

ARP要求を受け取ったノードは、そのARP要求が自ノード宛かどうかを判断せねばならない。もし自ノード宛でなければ、そのARP要求パケットは、原則としてそのまま破棄する。

まず、ar$tpaが自分のIPアドレスと一致するかを確認し、一致すればARP応答を、その送信元に対して返信せねばならない。

このとき、次の手順が必要である。

  • 送信元と宛先のアドレスを交換する(送受信の方向が変わるため)
  • 返信する送信元のMACアドレス(ar$sha)欄には、IPアドレスに対応するMACアドレスを格納する
  • オペコード欄を、ares_op$REPLY(値は2)に書き換える

受信はブロードキャストだが、返信はユニキャストになる。

またこの応答の際には、要求元のIPアドレスとMACアドレスの対をARPテーブルに登録(または更新)する。

ARP応答の受信

ARP応答を受信したノードは、送信元のMACアドレス(ar$sha)を参照し、IPアドレスに対応するMACアドレスをARPテーブルに格納する。

これによりアドレス解決が達成され、更に、互いのノード同士で互いのIPアドレスとMACアドレスを得ることが出来る。

ARPテーブルの更新

ARPテーブルへの登録または更新は、ARP要求のパケットを受信した場合と、ARP応答のパケットを受信した場合にのみ行なわれる。

それ以外でも、IPアドレスとMACアドレスを対応付けられる情報を得る機会はあるが、登録はしない。

より詳細はARPテーブルの項を参照。

ARPの問題点等

ARPは、受け取ったパケットを、そっくりそのまま信じることを前提としたプロトコルである。

認証や暗号化は一切なく改竄は容易であり、もし改竄されればARPテーブルが不正に書き換わってしまう。つまり不正な経路を通過するように設定でき、通信の傍受などが可能となってしまう「ARPスプーフィング」と呼ばれる脆弱性がある。

本質的な解決法は現時点では見出されていない。

ARPと同様のアドレス解決プロトコルに、次のようなものがある。

コメントなどを投稿するフォームは、日本語対応時のみ表示されます


KisoDic通信用語の基礎知識検索システム WDIC Explorer Version 7.04a (27-May-2022)
Search System : Copyright © Mirai corporation
Dictionary : Copyright © WDIC Creators club