図1 サブネット・マスクの役割は何だろう? サブネット・マスクは自分自身が所属するネットワーク(サブネット)で利用されているIPアドレスの範囲を決める。
図1 サブネット・マスクの役割は何だろう? サブネット・マスクは自分自身が所属するネットワーク(サブネット)で利用されているIPアドレスの範囲を決める。
[画像のクリックで拡大表示]
図2 パソコンは相手にパケットを送出する前に同一サブネットに相手がいるかを確かめている パソコンはIPパケットを送出する前に,あて先が同一サブネット内かどうかを調べる。そのときに利用するのが,自分自身に割り当てられているIPアドレスとサブネット・マスク,およびあて先のIPアドレスである。
図2 パソコンは相手にパケットを送出する前に同一サブネットに相手がいるかを確かめている パソコンはIPパケットを送出する前に,あて先が同一サブネット内かどうかを調べる。そのときに利用するのが,自分自身に割り当てられているIPアドレスとサブネット・マスク,およびあて先のIPアドレスである。
[画像のクリックで拡大表示]
図3 サブネットの範囲などを変えたとき,どこまで通信できるか? 4台のパソコンにさまざまなIPアドレスとサブネット・マスクを割り当てて,それぞれのパソコン同士が通信できるかを調べてみよう。
図3 サブネットの範囲などを変えたとき,どこまで通信できるか? 4台のパソコンにさまざまなIPアドレスとサブネット・マスクを割り当てて,それぞれのパソコン同士が通信できるかを調べてみよう。
[画像のクリックで拡大表示]
表1 各パソコンとpingコマンドで通信できるかを調べた結果
表1 各パソコンとpingコマンドで通信できるかを調べた結果
[画像のクリックで拡大表示]
図4 PC1とPC2の間ではpingに成功した サブネット・マスクが異なっていても,ネットワーク・アドレスが同じなら通信できた。
図4 PC1とPC2の間ではpingに成功した サブネット・マスクが異なっていても,ネットワーク・アドレスが同じなら通信できた。
[画像のクリックで拡大表示]
図5 PC2とPC3の間ではpingに失敗した ARP応答はPC3から返ってきたが,pingの応答は返ってきていない。 PC3から見ると,PC2は同一ネットワークにいないからだ。
図5 PC2とPC3の間ではpingに失敗した ARP応答はPC3から返ってきたが,pingの応答は返ってきていない。 PC3から見ると,PC2は同一ネットワークにいないからだ。
[画像のクリックで拡大表示]


若手部員 貴子さん
  よくパソコンのネットワーク設定をするときに,サブネット・マスクを指定するわよね。あれって,どんな役割があるのかしら。  

若手部員 宇田くん
  「255.255.255.0」って呪文みたいなヤツだよね。役割を確認するために,間違った値をパソコンに割り当てたら,どうなるか調べてみようか。  


 今回はサブネット・マスクの役割を考えていこう。WindowsパソコンにさまざまなIPアドレスとサブネット・マスクを割り当てて,実際に通信できるかを調べてみる。ただ,その前に,少しサブネット・マスクについて確認しておこう。

■相手と直接通信できるか調べる

 IP通信の場合,通信相手が同じネットワーク内*だったら,IPパケットを直接届ける。しかし,相手が同一ネットワーク内にいない場合は,パケットをルーターに送り,ルーターがそのIPパケットを転送する。このルーターは,デフォルト・ゲートウエイ*と呼ばれている。

 例えば,IPアドレスが192.168.1.1,サブネット・マスクが255.255.255.0の送信元パソコンから見ると,IPアドレスが192.168.1.9の相手は同一ネットワークにいる(図1)。一方,172. 16.23.22の相手は,同一ネットワークにはいないのでルーターに転送してもらう。

 このときの処理で重要な役割を果たすのが,サブネット・マスクである。通信相手が同一ネットワーク内にいるかどうかを判断する材料にするのだ。

 もう少し詳しく見ると,送信元パソコンは,自分自身に割り当てられたIPアドレスとサブネット・マスクから,自分が所属しているネットワークで利用されているIPアドレスの範囲は192.168.1.1~192.168.1.254だと算出する*。そして送信元パソコンは,通信相手のIPアドレスがこの範囲内にあるかを調べて,同一ネットワークかどうかを判断するのである。

■パソコン内での実際の計算手順

宇田:サブネット・マスクは,自分がつながっているネットワークの範囲を決める大事な設定項目なんだと,先輩は言っていたよ。

貴子:範囲ってどういうこと?

宇田:IPアドレスが192.168.1.1で,サブネット・マスクが255.255.255.0のパソコンがつながるネットワークで利用されているIPアドレスの範囲は192.168.1.1~192.168.1.254になるんだ。だから,この範囲内のパソコンと通信するときはIPパケットを直接届けて,範囲外のときはルーターに転送してもらうんだ。

貴子:何気なく,パソコンに割り当てていたサブネット・マスクだけれど,意外と重要だったのね。でも,自分自身に割り当てられたIPアドレスとサブネット・マスクから,通信相手が同一ネットワーク内かどうかをどうやって計算しているのかしら。

宇田:えーっと,ちょっと待ってね。計算方法などは,TCP/IP関連書籍に解説されているはずだよ。

貴子:本にはIPアドレスやサブネット・マスクを2進数に直して,その論理積を計算するとあるわ。

宇田:論理積?

貴子:要は各ビットのかけ算のようよ。1×1=1,1×0=0,0×1=0だから,IPアドレスとサブネット・マスクの各ビット両方が1の場合だけ,論理積も1になるのよ。難しい用語を使わずに,かけ算だと解説してくれればいいのにね。

 もう少し詳しく見ていこう。パソコンは,まず自分自身がつながるネットワークのアドレス(ネットワーク・アドレス*)を計算する。計算方法は,貴子さんと宇田くんの会話にあったように,自分自身に割り当てられたIPアドレスとサブネット・マスクの論理積を計算することになる。図2の例では,自分自身のネットワーク・アドレスは192.168.1.0になる。

 次に,通信相手のネットワーク・アドレスを計算する。これは,相手のIPアドレスと自分自身に割り当てられたサブネット・マスクの論理積である。通信相手のサブネット・マスクではなく,自分自身に割り当てられたサブネット・マスクを使うところがミソだ。

 相手のネットワーク・アドレスを正しく算出するには,相手に割り当てられているサブネット・マスクと相手のIPアドレスの論理積を計算する必要がある。しかし,送信元からは相手に割り当てられているサブネット・マスクがわからない。

 そこで,自分自身に割り当てられているサブネット・マスクを使うのである。こうすると,本当のネットワーク・アドレスとは異なる値が算出されることがあるが,それでもかまわない。送信元パソコンは相手が自分自身のネットワーク内かどうかさえわかればよいので,自分のサブネット・マスクを使って相手のネットワーク・アドレスを計算する。

 そして,自分自身のネットワーク・アドレスと相手のネットワーク・アドレスを比較して,同じならIPパケットを直接相手に届け,異なればルーターに任せるのである。

■設定が異なるPC間で通信できるか

貴子:それじゃ,いろいろなIPアドレスとサブネット・マスクを割り当てたパソコンを用意して,実際に通信できるかテストしてみましょう。

宇田:1台のリピータ・ハブに4台のパソコンをつなごう(図3)。サブネット・マスクはPC1とPC3,PC2とPC4が同じになるようにしたよ。

貴子:じゃあ,ping*のテストをやってみましょう。私は,PC2とPC4は,サブネット・マスクとネットワーク・アドレスが同じだから通信できると思うわ。宇田くんはどう?

宇田:僕は,PC1 ,PC2,PC4の3台の組み合わせは,ネットワーク・アドレスが同じだから通信できると思うよ。PC3だけは,ほかとネットワーク・アドレスが違うから,ダメそうだ。

貴子:それじゃ,試してみましょう。テスト時にやりとりしたパケットもキャプチャ*しておくわね。

 pingテストの結果は表1のようになった。貴子さん,宇田くん,どちらの予想も少しずつはずれていた。では,それぞれのケースについて検証していこう。

貴子:PC2とPC4の間でしか通信できないと思っていたんだけれど,それ以外にも通信できる組み合わせがあったのね。意外だわ。

宇田:僕の予想もはずれたよ。PC3だけはネットワーク・アドレスが違うから,どのパソコンとも通信できないと思ったのに,PC4とは通信できているみたいだ。

貴子:テストのときにキャプチャしたパケットを一つひとつ見ながら検証してみましょう。

宇田:そうだね。

貴子:まずは,サブネット・マスクの値が違うPC1からPC2へ向けたpingテストは,どうだったのかしら。私は通信できないと予想したのに,pingテストはパスしているのよね。

宇田:キャプチャの結果を見ると,変わった部分はないみたいだ(図4)。最初にPC1からARP*要求が出ていて,これに対してPC2がARP応答を返信している。そして,このあとからpingのやりとりが始まっているよ。

貴子:そうね。本に書いてあったように,パソコン内部の処理も考えてみましょうよ。

宇田:そうだね。まずは,送信元のPC1の内部処理からだ。

貴子:PC1は,自分のIPアドレス(192.168.0.1)と自分のサブネット・マスク(255.255.255.0)から自分のネットワーク・アドレスを計算して,192.168.0.0を算出するでしょう。それから,相手のIPアドレス(192.168. 0.2)と自分のサブネット・マスク(255.255.255.0)から相手のネットワーク・アドレスを計算して192.168.0.0が求まるわね。この二つのネットワーク・アドレスは同じだから,PC1は相手のPC2も同じネットワーク上にいると判断したわけね。

宇田:それで,PC1はARPを送ったあとに,pingパケットを直接相手に送ったんだね。これを受信したPC2はどうなるんだろうか。

貴子:PC1と同じように考えれば,PC2は自分のネットワーク・アドレスを192.168.0.0だと計算し,相手も192.168.0.0だとわかるわ。

宇田:ということは,PC2からも直接PC1へping応答パケットを届けることになるんだ。要するに,算出されるネットワーク・アドレスが同じなら,問題ないんだ。

■同じネットワーク・アドレスのはずが・・・

宇田:同じネットワーク・アドレスなのに,PC1とPC4の通信は失敗しているよ。これは,どうしてなんだろう。

貴子:パケットをキャプチャした結果はどうなの?

宇田:キャプチャ画面には何も表示されていないよ。パケットがまったくやりとりされなかったんだよ。

貴子:じゃあ,送信元のPC1の内部処理はどうだったのかしら。

宇田:えっと,自分のネットワーク・アドレスは192.168.0.0だったよね。相手はIPアドレスが192.168.1.2で,自分のサブネット・マスクは255.255. 255.0だから,相手のネットワーク・アドレスは192.168.1.0だ。ネットワーク・アドレスが違うぞ。同じはずだったのに・・・。

貴子:あ,自分のサブネット・マスクを使って,相手のネットワーク・アドレスを計算したからよ。

■片方向からしか通信できない

宇田:PC2からPC3へのpingテストは,面白い結果が出ているよ。キャプチャ結果を見てごらん(図5)。

貴子:PC2からはping要求が出ているのに,PC3からの応答がないわね。

宇田:そうなんだ。PC2の内部処理を考えてみると,自分のIPアドレス(192.168.0.2)とサブネット・マスク(255.255.0.0)からネットワーク・アドレスは192.168.0.0になるね。相手は,192.168.1.1と255.255.0.0の論理積を計算すれば,同じ192.168.0.0だ。

貴子:PC2はPC3が同じネットワークにいると判断して,ARP要求を送ったわけね。対応するARP応答もPC3から,キチンと返ってきているわ。

宇田:この結果,ping要求をPC3へ送信したのに,PC3からは応答パケットが出ていないんだよ。

貴子:PC3から見ると,自分のネットワーク・アドレスは192.168.1.0(192.168.1.1×255.255.255.0)で,PC2は192.168.0.0(192.168.0.2×255.255.255.0)になるからよ。

宇田:つまりPC3は,PC2が同じネットワークにいないと判断したんだ。でも,ARP要求に対しては応答を返しているから,実際には直接通信できているのに…。

貴子:ARPのやりとりと,pingによるIPパケットのやりとりは,独立しているってことなんでしょう。

 貴子さんと宇田くんが検証してきたように,読者のみなさんも,ほかの組み合わせで,どう処理されたかを検証してみよう。そうすれば,サブネット・マスクの役割が実感できる。

■修正履歴
表1の記載に誤りがあったため,差し替えました。お詫びして訂正させていただきます。[2006/02/01 12:30]


寄稿者:ネットワークエンジニア集団 みずおか組

●水岡 祥二 NPOアイタック代表理事
●出口 雄一 株式会社タケキ IT教育事業部
●久保 幸夫 情報・通信エンジニア