3.2.4 ARP

MACアドレスの節で述べたように、MACアドレスが分かれば最低限の通信は 可能になります。従って、ここでのポイントは MACアドレスをどうやって 知るかという点にあります。ところが、先に学習したように、一つの ネットワークセグメント上のMACアドレスには系統性がありません。実際、 ベンダーアドレスは、ベンダーが違えば異なるのですから、ばらばらに導入 されたネットワークカードには何の系統性もないMACアドレスが振られて いることになります。勿論、人間が手でMACアドレスを登録することも考え られますが、あまりにも手間がかかりすぎます。ここでの問題は、自動的に 登録する点にあるのです。

このように、自動的に相手のMACアドレスを取得するためのプロトコルが ARP( Address Resolution Protocol)です。ARPは正確にはネットワーク層と データリンク層にまたがったプロトコルであると言えます(そういう階層分類を しているからです)。

さて、このARPでポイントになるのは、Ethernetの物理的な特徴です。それは、 相手は同じ銅線につながっている点にあります。ですから、叫べば、相手が そこにいれば必ず届くと考えて良いのです。ネットワーク上で「叫ぶ」に相当 するのが、先に出てきたブロードキャストです。ブロードキャストを受け取った 相手は、自分のMACアドレスを発信先に知らせるのです。非常に単純ですが、 大事な点は、世界中に対して叫ぶ訳にはいかないという点です。叫んでも良い という考え方は、逆に言えば、そうしても大して迷惑にはならないということを 前提としているからです。つまり、ブロードキャストは局地的であり、 狭い限定されたネットワークにのみ伝達されなければならない訳です。 これが、より高次のネットワーク通信階層が必要な理由なのです。

同時に、ここまで、「発信元」とか「相手」という言葉で説明して来ましたが、 何を以って「相手」とするのでしょうか(ARPで解決する前です)、また、どうやって その「相手」は同じネットワーク上に存在すると考えるのでしょうか。 この疑問に答えるには実はIPが必要です。最初に、ネットワーク層にまたがって いると言いましたが、この場合の相手とは、相手のIPのことを意味します。 また、このIPを使って、自分が通信相手と同じネットワークにいるかどうかを 判断できるようになっているのです。

このようにして、ARPで解決されたMACアドレスは、その対となるIPアドレスと 共にキャッシュに記憶されます。キャッシュはある一定時間ごとにクリアされ るようになっています。そうしなければ、ネットワークから取り外された ノードを認識できなくなってしまうからです。キャッシュにあるARPテーブルは Unixでも、Windows でも arp コマンドで知ることが出来ます。

> arp -a -n
? (10.16.164.33) at 00:00:39:0e:08:04 on fxp0 [ethernet]
? (10.16.164.110) at 00:90:cc:22:00:3a on fxp0 permanent [ethernet]
? (10.16.164.254) at 00:00:0c:04:df:01 on fxp0 [ethernet]

ここでオプション -a は ARPテーブルを表示するオプションで、-n はIPアドレスを 番号で表示するオプションです。Windows のコマンドでは -n オプションはあり ませんので、注意してください。ARPによって、MACアドレスが取得できなかった 場合には以下のような行が表示されます。

? (10.16.164.10) at (incomplete) on fxp0 [ethernet]

このような場合には、相手がつながっていない、またはケーブル、インターフェース にトラブルがある、相手がIPを取得できていない、もしくは相手の持つIPに関係 する情報に間違いがある等の理由が考えられます。



Noriyo Kanayama