目標のIPアドレスの機器にIPパケットを送るためには、そのパケットを入れるフレームを作らければ
なりません(データリンク層の仕事です)。
そして、フレームの送り先となるホストのMACアドレスが分からないと、フレームを作れません。
このIPアドレスからMACアドレスを調べる時に使われるデータリンク層のプロトコルがARP(アープと呼びます。)です。
ブロードキャストを使うので、同一ネットワーク内にあるホストのMACアドレスしか調べることができません。
MACアドレスはARPテーブルを参照して求めますが、ARPテーブルにない場合は、ARPで調べることになります。
ARPは、Address Resolution Protocolの略で、
IPアドレスからMACアドレスを調べる時に使われるデータリンク層のプロトコルです。
一度調べると、
IPアドレスとMACアドレスの表(→ARPテーブルと呼びます)に登録されますが、
ある時間が経過すると消去されるようになっています。
(それにより、マシンの交換などでネットワークの接続状態が変っても対応できるようになっています。)
ARPテーブルを参照したり、テーブルへの追加や削除するコマンドがARPの名前で 用意されています。以下は-aのオプションでテーブルを表示させている実行例です。
Z:\>arp -a Interface: 192.168.0.33 --- 0x2 Internet Address Physical Address Type 192.168.0.1 00-e0-00-66-f4-db dynamic 192.168.0.22 00-07-40-dc-f0-31 dynamic 192.168.0.73 00-08-0d-7b-5a-32 dynamic 192.168.0.77 00-11-2f-6e-53-9a dynamic Z:\>
イーサネットのデータリンク層でも、ブロードキャスト通信とユニキャスト通信があります。
あて先MACアドレスをオール1(FF:FF:FF:FF:FF:FF)にしてフレームを送信すると、それはブロードキャスト送信となります。
この場合は、同じイーサネット・セグメントに接続されているすべてのコンピュータがこのフレームを受け取ることになります。
(IPレベルでブロードキャスト通信を行うと、イーサネット・レベルでもブロードキャスト通信になる。)
ARPの要求パケットは、このイーサネットのブロードキャストを利用します。
つまり直接に繋がっている全てのノードに伝達されます。ですが、MACアドレスを要求されたコンピュータのみがARPの応答パケットを返仕組みになっています。
この時に自身のMACアドレスを送り元アドレスをセットして応答することで、MACアドレスが伝わる仕組みになっています。
なお調べたいIPアドレスがそのネットワーク内に存在しない場合、どのノードも応答しないので、その場合のMACアドレスは解決できません。
イーサーネットではIPパケットをフレームと呼ぶ電気信号のかたまりに入れて運びます。
TCPプロトコルのプログラム(JavaのSocket利用)で、目的のホストへ接続する過程を以下に示します。
どのようにフレームが作られるかが示してあります。
(下記クリックボタンが消えるまで説明のアニメーションがあります)
上記でわかるように、接続先のIPのホストへフレームを届けるために、
ARPで、
IPアドレスからMACアドレスを調べています。
それをMACフレームの
あて先MACアドレスに使って送出します。
なお、このARPによる問い合わせは毎回行われるものではありません。一度調べると、
IPアドレスとMACアドレスの表(ARPテーブル)が作られます。表に存在する場合は、その表のMACアドレスが使われて
MACフレームが作られます。