図4 ARPのしくみ
TCP/IPマシンがイーサネットで通信するときは,IP通信に先立ってARP(address resolution protocol)を実行する。

ヒントはARPの振る舞いにある

 実験結果の謎解きの前に,この実験で2台のコンピュータがどう振る舞ったかを見ておこう。

 TCP/IPマシンがイーサネットで通信するとき,IP通信に先立って通信相手のイーサネット・アドレス(MACアドレス)を調べる。これはARP(アープ)と呼ぶプロトコルで実行する(図4[拡大表示])。

 まず送信元がLAN全体にARP要求を送る。ARP要求には通信相手のIPアドレスを書き込んでおく。すると相手マシンは,自分のMACアドレスを書き込んだARP応答を返信する。送信元はこれを受け取り,あて先マシンのMACアドレスを入手する。

ARPの範囲がサブネットの範囲

 では,通信相手が自分のLANにいるかどうかは,どうやって判断するのだろう。通信相手のIPアドレスを見ると,それがわかるのだろうか。

 ここで登場するのがサブネット・マスクだ。サブネット・マスクは,IPアドレスからそのIPアドレスが所属するサブネットのアドレス「ネットワーク・アドレス」(ネットワーク番号とも呼ぶ)を見つけるための付加情報。サブネットとはルーターが区切るIPネットワークの単位のことで,LANの場合はARPが届く範囲となる。サブネット・マスクがあると,相手が自分のサブネットにいるかどうか判断できる。

 判断の手順は次のようになる。

図5 ネットワーク・アドレスの計算方法
IPアドレスとサブネット・マスクと組み合わせると,自分が所属するサブネットのネットワーク・アドレスがわかる。サブネット・マスクの代わりに,ネットワーク部のビット数を表記する方法もある。
 まず,自分のサブネットのネットワーク・アドレスを求める。IPアドレスが192.168.4.20,サブネット・マスクが255.255.255.240である例で考えてみる。このサブネット・マスクは,「先頭28ビット分がネットワーク部です」という意味だ。ネットワーク・アドレスは192.168.4.16となる(図5[拡大表示])。

 今度は相手先IPアドレスを調べる。相手先が192.168.4.40だとしよう。もし自分のサブネットにいるなら,ネットワーク・アドレスは192.168.4.16になるはず。早速,計算してみよう。192.168.4.40の最後の8ビット「0010 1000」(10進数で40)のうち,うしろの4ビットをゼロにすればいい。「0010 0000」は10進数で32となるので,ネットワーク・アドレスは「192.168 .4.32」だ。これは192.168.4.16と違う。つまり,192.168.4.20のマシンは,192.168.4.40が自分のサブネットにいないと判断する。

 もう気づいたかもしれないが,この説明は実験1の種明かし。実験1ではどちらのマシンも相手先マシンが自分のサブネットにいないと判断したのだ。どちらのマシンも,デフォルト・ゲートウエイに送信しようとする。ところがデフォルト・ゲートウエイの値が設定されていなかったため,ARPを送出できない。この結果,「到達不可能である」と表示するのである。