【アドレスとは】
LANの世界では、各デバイスのアドレスが2種類あります。
それは 「MACアドレス」 と 「IPアドレス」 と呼ばれています。
MACアドレス
イーサネットのコントローラが持つ物理的なアドレスで世界で唯一になるように
なっている6バイトのバイナリアドレスです。
機器製造時に固定的に付与されます。
IPアドレス
機器ごとに持つ論理的なアドレスで、LANに接続されたときに自動付与するか、
設定することで与えられます。
4バイトから構成されていて、世界で唯一になるべきものですが、4バイトでは
アドレス空間が不足していて唯一にできないので、いろいろ工夫しながら使わ
れています。
これを16バイトに拡張したものが"IPv6"と呼ばれる方式で、これなら世界で
唯一のアドレス付与が可能になります。I
このPv6が、インターネットを含めて、これからの主流になろうとしています。
【アドレス解決とは】
LAN上で通信を行う際には、物理レベルつまりイーサネット通信のレベルでは
MACアドレスを使い、アプリケーションのレベルでは、アドレスとしてIPアドレスを
使います。
MACアドレスは機器固有で製造時に付与されるので固定的に持っていますが、
IPアドレスは後から付与されるものなので、実際に通信する時には、両アドレスの
対応付けが必要となります。
つまり、各デバイスがイーサネット通信レベルで行う通信はMACアドレスで行われ、
アプリケーションソフトウェアのレベルではIPアドレスで相手を指定します。
従って相手を特定するには、MACアドレスとIPアドレスの対応付けをして、指定した
相手と間違いなく通信ができるようにしなければなりません。
このような対応付けを行うことを「アドレス解決」と呼んでいます。
このアドレス解決には「ARP」と「RARP」と呼ばれるプロトコルを使います。
ARP : Address Resolution Protocol
IPアドレスからMACアドレスを求めるプロトコル
RARP: Reverse Address Resolution Protocol
MACアドレスからIPアドレスを求めるプロトコルですが
最近はこれの代わりにDHCPというプロトコルが使われるので実用的に
使われることは無くなっています。
【ARPプロトコルのシーケンス】
ARPプロトコルを使ってアドレス変換をする手順は下図のようになります。
まず全てのホストには、ARPキャッシュと呼ばれるアドレス帳があって、ここに
MACアドレスとIPアドレスの対応表が書かれています。
最初に送信を開始するホスト(PC-1)は自分のARPキャッシュの中をチェックして
送信する相手のIPアドレスが登録されているかどうかを確認します。
登録されていれば、そのアドレスを使ってすぐ通信が出来ますが、登録されて
いない時には、IPアドレスからMACアドレスを求めるため、ARP要求をブロード
キャストアドレスを使って送信します。
このARP要求はすべてのステーションが受信し、指定されたIPアドレスが一致
自分のIPアドレスと一致したホスト(PC-2)だけが、ARP応答を送信元(PC-1)に
向けて返します。
この応答を受け取ったPC-1は、その応答に含まれているMACアドレスを使って
送りたいデータを相手に出力します。
そして、ARPキャッシュに新たにそのIPアドレスとMACアドレスの対応表を追加
します。これで次に同じ相手に送信するときには、ARP要求を発行しなくても
すぐアドレスが判ります。これでネットワークに流れるフレームを減らして余計な
トラフィックが増えることを防いでいます。
【ARPプロトコルのデータフォーマット】
ARPプロトコルのフレームフォーマットは下図のように要求と応答でフォーマットは
同じですが内容が一部異なっています。
最初に送信元がARP要求する時には、ARPフレーム内の宛先MACアドレスは
不明なので、全て00Hとしておき、イーサネットヘッダの宛先MACを全てFFHとして、
ブロードキャストアドレスで全てのステーションに向けて送信します。
これを受信した全てのステーションでは、ARPフレーム内の宛先IPアドレスを
チェックして、自分のIPと同じだったら、送信元に対してARP応答を返します。
その時、自分のMACアドレスとIPアドレスをARPフレームの中に書き込んで応答
します。当然イーサネットヘッダの送信元MACアドレスも自分のMACアドレスとします。
送信元は、このARP応答として返って来たデータから、受信側つまり相手のMAC
アドレスを取り出せば、指定したIPアドレスを持つ相手のMACアドレスを得たことに
なり、アドレス変換が出来たことになります。
この後は、ARPキャッシュにこのIPアドレスとMACアドレスの対応表を保持しておき、
これでアドレス解決を行うようにして、毎回の送信の度にARP要求が送信されて、
LAN上のトラフィックが増えることを防いでいます。