ARPとはIPアドレスからMACアドレスを得るためのプロトコルです。
ARPはIPv4で使われている技術でIPv6ではNeighbor Discovery Protocolが使われています。
ARP(アープ)
どこかにデータを送信する場合、IPアドレスが必要となります。
IPアドレスはDNSから得ることができます。
そこで得られたIPアドレスを送信したいところに伝送します。
LAN内でデータを送信するにはIPアドレスとMACアドレスが必要になります。
IPアドレスはDNSから入手したので次にMACアドレスを知る必要があります。
ここでARPを使います。
ARPのフォーマット
ARPはEthernetのフォーマットを使用することができます。
Ethernetフレームのデータ部にARPのデータを入れます。
ここで、他のデバイスでARPを使っていることを他の層、デバイスに知らせるためにtypeにARPであることを示す、「0x0806」を入れます。
そして、データ部には以下の内容を入れます。今回はEthernet、IPv4を使っているとします。
それぞれの役割は以下のようになっているものです。
ハードウェアタイプ
ハードウェアタイプは2バイト(16bit)で構成されています。
ここでは適切にデータを処理するためにどのネットワーク技術で使われているかを表すために使われています。
例えば、よく使われるものだと、Ethernetで1、IEEE802.11(Wi-Fi)で6が入っています。
実際に入っているものは二進数で書かれています。
プロトコルタイプ
プロトコルタイプは2バイトで構成されています。
ここでは3層のネットワーク層のプロトコルで何を使っているかの情報が入っています。
これはIPアドレスにはIPv4、かつて使われていたIPX、AppleTalk DDPのどれからMACアドレスを求めるのか知るためにあります。
なぜ、プロトコルが必要になるのかといえばIPv4、IPv6のフォーマットは違っており、ネットワークを効率的に処理するために分けています。
IPv4であれば0x0800、IPv6であれば0x86DDが使われています。
ハードウェア長
ハードウェア長は1バイトで構成されています。
基本的にデータリンク層のフレームのMACアドレスは6バイトで構成されていますが、昔の技術や軍事や宇宙など特定の場所ではセキュリティの観点上異なるMACアドレスの長さを使っている場合があります。
そのため、ARPであることをしっかりと認識させるためにMACアドレスの長さを知らせる必要があります。
基本的な用途であれば6を入れます。
プロトコルアドレス長
プロトコルアドレス長は1バイトで構成されています。
ここでは、プロトコルごとにアドレス長が異なることに対応するため、IPアドレスの長さを示しています。
現在使われているのはIPv4だけですが異なるIPアドレスの長さを持ったものに対応するために置かれています。
オペレーションコード
オペレーションコードは2バイトで構成されています。
ARPにはARP要求(送信側)とARP応答(受信側)が存在します。
そのため、送信側か受信側のどっちか判断する必要があります。
要求であれば1、応答であれば2を入れます。
送信元ハードウェアアドレス
送信元ハードウェアアドレスは6バイトで構成されています。
送信するためにはIPアドレスとMACアドレスが必要になります。
そのため、宛先のMACアドレスを教えてもらう際に自身のMACアドレスを相手側が知らなければ送り返すことができません。
だから、ここのフィールドで自身のMACアドレスを挿入しておきます。
※MACアドレスは一般的に16進数で表します。(例:AB-CD-EF-GH-12-34)
送信元プロトコルアドレス
送信元プロトコルアドレスは4バイトで構成されています。
MACアドレスと同様に送信するにはIPアドレスも必要となります。
そのため、このフィールドで自身のIPアドレスを挿入します。
宛先ハードウェアアドレス
宛先ハードウェアアドレスは6バイトで構成されています。
ここは、受信側で応答してもらうときにここのフィールドにMACアドレスを挿入してもらいます。
送信側ではまだ何も知らないのでMACアドレスを知らないという意味の00-00-00-00-00-00が挿入されています。
宛先プロトコルアドレス
宛先プロトコルアドレスは4バイトで構成されています。
ARPを使うときにはすでに相手のIPアドレスを知っていますが確認の意味があります。
また、RARPを使う場合IPアドレスが不明なのでここのフィールドを0.0.0.0にセットします。
ARPの動き
ここから上で見たARPのフォーマットを使ってARPの動きを説明していきます。
ARPを使うのは自分のIPアドレス・MACアドレス、相手のIPアドレスを知っている際に使うことができます。
まず、送信元ハードウェアアドレスを送信元MACアドレス、送信元プロトコルアドレスを送信元IPアドレス、宛先ハードウェアアドレスを「00-00-00-00-00-00-00」宛先プロトコルアドレスを相手のIPアドレスに設定します。オペレーションコードを1にして要求します。
そして、MACヘッダの送信元MACアドレスには送信元MACアドレス、宛先MACアドレスに「FF-FF-FF-FF-FF-FF」をセットします。
宛先MACアドレスで「FF-FF-FF-FF-FF-FF」をセットしているのでブロードキャストします。
ブロードキャストすると、宛先IPアドレスと自身のIPアドレスが一致しているデバイスはデータを処理して応答をします。
応答するデータは、送信元ハードウェアアドレスを受信側のMACアドレス、送信元プロトコルアドレスを受信側のIPアドレス、宛先ハードウェアアドレスを送信側から受信したデータのMACアドレス、宛先プロトコルアドレスに送信側から受信したデータのIPアドレスをセットし、送信側へデータを送り返します。
この送り返す操作をARP応答といいます。
これで相手のMACアドレスがわかったのでIPアドレスと合わせて相手にデータを送信することができます。
コメント