ネットマスク
Last Modified: Tue Dec 27 00:06:02 JST 2011

マスク

2進数に慣れ親しんでいる人ならば、マスクとは何かすぐに分かると思う。 が、そんな人がたくさんいるとは思えないので、まずそれから説明しよう。

2進数の AND 演算には面白い効果がある。 たとえば「10101010」と「11110000」の AND を計算してみよう。

    10101010
AND 11110000
------------
    10100000

答えはちょうど、「10101010」という元の数の上位4ビットだけが、ザルの目を通って出てきたように見える。 ちょうど「11110000」という数の 1 の部分が、穴をあけた窓のような役割をして、元のデータをフィルタリングしているのだ。 このような効果を狙った演算をマスキングと呼び、穴の役割をするデータをマスクパターンとか単にマスクと呼んでいる。 マスキングは、データの中から一部を取り出すときに役立つ手法で、ごく基本的なプログラミングテクニックのひとつだし、オペレーションにおいても使うことがある (umask というコマンドがあったりする)。

IP アドレス

IP アドレスについてもおさらいしておこう。

普通、IP アドレスといえば 192.168.52.97 のような、4つの数字をピリオドで繋いだものを言う。 実は IP アドレスの実体は32ビット(4バイト)のデータで、前述のアドレスならば「11000000 10101000 00110100 01100001」となる。

IP アドレスは、各ホストごとに別のものさえ割り当ててあれば、どんな値でもよいというわけではない。 まずネットワーク部とホスト部という、2つのブロックに分かれていることを理解しなければならない。 よく Class C のアドレスが254個といった表現を耳にするが、これはネットワーク部が24ビット、ホスト部が8ビットの IP アドレスのブロックのことを指している。

<---------network--------> <-host->
11000000 10101000 00110100 01100001

同じネットワーク部を持つということは、各ホストが同一ネットワークに所属していることを意味する。 「192.168.52.97」と「192.168.52.103」は同じネットワーク部を持つので同一ネットワーク内だが、「192.168.54.103」は別のネットワークに属しているということが分かる。

サブネット

Class C では254個までのホストを区別できるが、仮にネットワーク内にホストが3台しかないと、残りの251個のアドレスは無駄になってしまう。 そういう無駄を省くため、クラスに縛られない自由な長さのネットワーク部を設定できる仕組みが考え出された。 それがサブネットだ。 たとえばサブネット部に28ビット割り当てると、次のようになる。

                               host
<---------network-------------><-->
11000000 10101000 00110100 01100001

これだとホスト部には4ビット残ることになる。 4ビットといえば16個分のアドレスだ (しかし0と15は予約されているので、実際に使えるのは14個だけだ)。 このように定めると、「192.168.52.97」と「192.168.52.103」は同一サブネットだが、「192.168.52.93」は別のサブネットということになる。 10進数で書くと見分けられないが、2進数で書けば簡単だ。

192.168.52.93  - 11000000 10101000 00110100 01011101
192.168.52.97  - 11000000 10101000 00110100 01100001
192.168.52.103 - 11000000 10101000 00110100 01100111

ネットマスク

Class A とか Class C のような、ネットワーク部の長さが決まっているアドレスグループについては、アドレスを見ればどこで切ればいいのかすぐわかるので問題ない。 しかしサブネットは、手がかりがないとどこで切っていいのか分からない。 その手がかりというのがネットマスクなのだ。 ネットマスクを使って IP アドレスをマスクすると、残るのがサブネットアドレスというわけである。 28ビットのネットマスクは、最初の28ビットが1、残りの4ビットが0となっている。

address 11000000 10101000 00110100 01100001
netmask 11111111 11111111 11111111 11110000
-------------------------------------------
        11000000 10101000 00110100 01100000

マスクによって得たサブネットアドレスを比較すれば、2つのアドレスが同一ネット内か否かが決定できるわけだ。

ネットマスクは、IP アドレス同様10進数で書かれることが多い。 28ビットマスクなら、それは「255.255.255.240」となる。 一方、ネットワークアドレスと共に「192.168.52.96/28」のように、ビット数を書く場合もある。 いずれにしても、10進数で書くと切目がどこなのかよく分からないのは仕方がない。

こうして内部か外部かを判断した後どうするのかについては、ルーティングの項を参照してほしい(工事中)。


[back to index]