ARP【Address Resolution Protocol】

広告

広告

ARPとは

最終更新
2004-04-22T00:00:00+09:00
この記事のURI参照
http://www.7key.jp/nw/tcpip/ip/arp.html#arp

ARPは【Address Resolution Protocol】の略で、アドレス解決プロトコルと訳されます。MACアドレスのページで少し触れましたが、復習しておきましょう。TCP/IPの世界では、MACアドレスを調べるためにIPアドレスを使用するということでした。もう少し詳しく解説しますと、パケットにはそのパケットの宛先(送信先IPアドレス)が書いてあるのですが、この宛先が通用するのは TCP/IP の世界(ネットワーク層)だけです。Ethernetの世界(データリンク層以下)では、このIPアドレスは通用しないので、Ethernetの世界で通用するアドレスに変換してやる必要が出てくるのです。その、IPアドレスからMACアドレスへの変換を実現するためのプロトコルがARPなのです。補足すれば、TCP/IPの世界とEternetの世界を結びつける役目を担っているのがデータリンク層となります。

ARPの仕組み

最終更新
2004-04-22T00:00:00+09:00
この記事のURI参照
http://www.7key.jp/nw/tcpip/ip/arp.html#structure

仕組みと言うほどARPの考え方は難しくありません。Ethernetの世界では送った信号は全員に届きます。ARPはこの性質を利用しているにすぎないのです。Ethernetを大きな部屋、ノード(各ネットワーク端末)を人間と考えれば分かりやすいでしょう。更に、パケットを便箋、フレームを封筒、宛先IPアドレスを宛名、宛先MACアドレスを宛先住所と考えて下さい(例なのに少し複雑すぎますか・・・同じ部屋で宛先住所ってのも・・・)。まず、ネットワーク層以上の層で便箋(パケット)を作ります。そして今からその便箋を目当ての人に送るのですが、ここで、目当ての人の名前(IPアドレス)は分かっているのですが、宛先住所(MACアドレス)が分かりません。分からないのでとりあえず大声で聞くのです。

「○○さん(192.168.1.11)、住所(MACアドレス)を教えて下さい!」

のような感じで。同じ部屋にそれぞれの人(各ネットワーク端末)がいるのですが、「○○さん」以外の人はその問いかけを無視します。しかし「○○さん」だけは、

「私の住所(MACアドレス)は××ですよ!」

と返事をしてくれます。こういった仕組みで住所を聞き出し、便箋(パケット)を封筒(フレーム)に入れて手紙を送るのです。

しかし、ネットワークの世界では大声を出すわけにもいきませんのでブロードキャストアドレスを使います。とは言いましても、IPアドレスブロードキャストアドレスではありません。MACアドレスのブロードキャストアドレスを使用するのです。MACフレームの宛先MACアドレスに全ての値が1のMACアドレスをセットすれば、全てのノードに対してARPリクエストが届きます。ここで、データリンク層の復習にはなりますが、MACフレームの構造を思い出して下さい。

フィールド名称長さ(ビット)説明
プリアンブル561と0の28回繰り返し
SFD810101011
宛先MACアドレス48パケットを届ける相手のMACアドレス
送信元MACアドレス48このパケットを送信した側のMACアドレス
タイプ16使用するプロトコルの種類
IP プロトコルでは0800、ARP プロトコルでは0806を使用する。
データ46-1500-
FCS32トレイラ

上記表にARPリクエストを当てはめると、まず宛先MACアドレスに、ブロードキャストアドレスが書き込まれます。もちろん、送信元MACアドレスはARPリクエストを送る端末(自分自身)のMACアドレスです(正確にはLANアダプタ等に振られたアドレスですが、とりあえずわかり易く端末のMACアドレスという表現を使用します)。そして、タイプには「0x0806(2054)」が書き込まれ、「データの中にARPパケットを格納しています」と言うことを表しています。そして肝心なARPパケットですが、下記の表のようなものがネットワーク層のARPにて作られます。

フィールド名称長さ(ビット)説明
ハードウェアタイプ16 ARPは複数のデータリンク層のプロトコルに対応しています。 例えば、Eternetであれば、「1」の値が書き込まれます。
プロトコルタイプ16 どのようなアドレスを使ってMACアドレスを調べるのかを書き込みます。 今回の説明のように、IPアドレスを使用する場合は「2048」の値が書き込まれます。
ハードウェアアドレス長8 調査を行うハードウェアのアドレス長をバイト単位で書き込みます。 MACアドレスは48ビット→6バイトなので、ここには「6」の値が書き込まれます。
プロトコルアドレス長8 プロトコルタイプで示したアドレスの長さをバイト単位で書き込みます。 IPv4では32ビット→4バイトなので、ここには「4」の値が書き込まれます。
オペレーションコード16 リクエストなのかレスポンス(返答)なのかを書き込みます。 リクエストの場合は「1」、レスポンスの場合は「2」の値が書き込まれます。
送信元ハードウェアアドレス48 このパケットを作成した端末のMACアドレスを書き込みます。
送信元プロトコルアドレス32 このパケットを作成した端末のIPアドレスを書き込みます。
宛先ハードウェアアドレス48 パケットの宛先MACアドレスを書き込みます。 ただし、リクエストの場合には宛先が分からないので「0」が書き込まれます。 (ここはブロードキャストアドレスではありません。)
宛先プロトコルアドレス32 パケットの宛先IPアドレスを書き込みます。

ただし、上表での値は全て10進数にしてありますが、実際には2進数で書き込まれます。このようなMACフレームを全端末について送信し、フレームを受け取った端末は自分宛かどうかを「宛先プロトコルアドレス」を見て判断するのです。ただし、このARPパケットを送信するのは、同一ネットワーク内(一つのルータ以下で繋がっているネットワークと解釈して下さい)のみです。詳しくは「ルーティングテーブルの話」「ルータの話」で触れるつもりですので、今回はさわりだけ。各端末にはルーティングテーブルと言われる経路表をメモリ領域に持っています。ある端末からある端末にパケットを送信する際、この経路表を見て、まずどこにパケットを送信しなければならないのかを判断するのです。早い話が、自ネットワーク内に送信先端末が無い場合に、パケットの中継端末(ルータ)に向けてこのパケットを送信するのです。ルータは受け取ったMACフレームからパケットを取り出し、次の送信先を記入したMACフレームの中にパケットを格納してデータを送信するのです。

ARPテーブル

最終更新
2004-04-22T00:00:00+09:00
この記事のURI参照
http://www.7key.jp/nw/tcpip/ip/arp.html#arptable

ARPの仕組みは大体分かっていただけたでしょうか。データを送信する際には、大声でとりあえずMACアドレスを全員に聞いて、返ってきた返事を元にデータを送り出すと、色々難しいことも書きましたが要約すればこんな感じです。しかし、データを送るたびにこんなことをしていますと、ARPのリクエストとレスポンスだけでネットワークがダウンしてしまいます。そのために考案されたのが、LANスイッチARPテーブルです。LANスイッチについては別途解説しますので、そちらを参考にして下さい。ここで主に話をするのはARPテーブルについてです。聞きなれない単語ですが、簡単に説明しますとMACアドレスとIPアドレスの対応表のことで、各端末のメモリ内にあります。ARPレスポンスが返ってきた際に、一度教えてもらったMACアドレスを、IPアドレスと対にしてこのARPテーブルに記録します。そうすることにより、何回も同じことを聞く必要がなくなり、2回目からはこのARPテーブルを参照して宛先IPアドレスに対応するMACアドレスを調べるのです。(「ARPコマンド」も参照下さい)

広告

Copyright (C) 2003-2007 七鍵 key@do.ai 初版:2004年04月22日 最終更新:2007年01月10日