IPアドレスは単なる32bitの数値なので、2つのパートから成り立っているといわれてもIPアドレスの数値だけでは、どこがネットワーク・アドレス部で、どこがホスト・アドレス部かを判断することはできないだろう。そこで登場するのが「ネットマスク(net mask)」もしくは「サブネットマスク(subnet mask)」と呼ばれる、やはり32bit幅の数値である。IPアドレスを語るときには、必ずといっていいほど、このネットマスクの値も考慮しなければならない。例えば冒頭のWindows 2000におけるIPアドレスの例でも、IPアドレスのすぐ下には、「サブネット マスク」の値が同時に表示されていたのを思い出していただきたい。この数値こそが、ネットワーク・アドレスとホスト・アドレスを分離するための鍵となる数値なのである。一般的には、IPアドレスをセットする場合は、必ずこのネットマスク値も同時にセットしなければならない。DHCPなどでIPアドレスを自動配布している場合は、やはりDHCPサーバが同時にネットマスク値も配布しているはずである。先ほど、同じネットワークに属しているホストは同じネットワーク値を共有していると述べたが、同時に同じネットマスク値も共有しているはずである。もし異なっていると、さまざまなトラブルが発生することになる。
ネットマスクとは、簡単にいえば、IPアドレスからネットワーク・アドレス部を抽出するためのマスク値である。具体的にいえば、論理演算における「AND演算(論理積演算)」を行うためのマスク用の数値である。2進数におけるAND演算とは、具体的には次のようなものであり、マスク値のbitが0ならば出力は(入力値にかかわらず)常に0だが、bitが1ならば、出力には入力と同じ値が現れる。
入力値 | マスク値 | 出力値 | 備考 |
---|---|---|---|
0 | 0 | 0 | 入力値にかかわらず出力は常に0 |
1 | 0 | 0 | |
0 | 1 | 0 | 入力値がそのまま出力値として取り出せる |
1 | 1 | 1 | |
AND演算 AND(アンド)演算とは、2つの入力が1ならば出力が1となるが、それ以外の場合は0となる演算のこと。もう少し分かりやすくいうと、マスク値のbitが0ならば出力は0だが、bitが1ならば、出力には入力と同じ値が現れる演算のこと。マスク値を反転(1と0を入れ換える)してから、入力値とAND演算をすると、逆に、マスク値が0の場合に入力値がそのまま取り出され、マスク値が1の場合には出力は常に0になる。 |
AND演算には2つの入力があるが、マスク値が0ならば入力値は無視されて、出力は0になる。しかしマスク値が1ならば、入力がそのまま出力として現れる。このAND演算はコンピュータにおける基本演算であり、加算や減算などと同じくらい高速に(たいていの場合は1クロックで)処理できるので、データの一部を取り出すためによく使われる(マスク処理などと呼ばれる)。このようなAND演算を使ったIPアドレスの処理は、(人間にとっては分かりにくいかもしれないが)コンピュータにとっては非常に都合のよい方法である。
IPアドレスからネットワーク・アドレス部分を取り出したり、ホスト・アドレス部だけを取り出したりするには、このネットマスクとIPアドレスのAND演算を行えばよい。具体的には、以下のようになっている。つまり、IPアドレスとネットマスクをそのままAND演算すれば、ネットワーク・アドレスが取り出され、ネットマスクの値が0の部分だけを取り出すと(実際には、ネットマスクの値をすべて1と0を反転し、その結果と、IPアドレスをAND演算する)、ホスト・アドレスになる。
ここではIPアドレスが「192.168.1.128」、ネットマスクが「255.255.255.0」としているので、これから導き出されるネットワーク・アドレスは「192.168.1.0」、ホスト・アドレスは「0.0.0.128」となる。先の説明例では、ネットワーク・アドレス部は「192.168.1」でホスト・アドレス部は「128」であると説明したが、実際にはこのように常に32bit(10進数4組)のドット区切り表記で表現するのが一般的なので、本記事でも以後はこう表記する。つまり、ネットマスクの値にかかわらず、ネットワーク・アドレスは「192.168.1.0」、IPアドレスは「0.0.0.128」と表現する。
IPアドレスのサイズは、すでに何度も述べているように32bitの数値である。そのため、ネットワーク・アドレス部とホスト・アドレス部のサイズは、足せば常に32bitになるという関係がある。その結果、ネットワーク・アドレス部を広くすれば逆にホスト・アドレス部が少なくなり、逆にネットワーク・アドレス部を少なくすれば、ホスト・アドレス部は広くなる。
具体的にこれがどういうことを意味するのかというと、ネットワーク・アドレス部のサイズによって(もしくはホスト・アドレス部のサイズによって)、1つのネットワークあたりに収容できるホストの最大数が決まってくるということになる。例えば、ネットワーク・アドレス部に3オクテット使うと、ホスト・アドレス部には1オクテットしか残らない。となると、そのネットワーク上には最大でも28=256通りのIPアドレスしか確保できないということになる。実際には、使えないIPアドレスもいくつかあるので(詳細は次回に説明する)、せいぜい250台程度のマシンしか収容できず、それよりも多くのホストが存在する場合には、ネットワークを分割してルータを導入するなどの措置が必要になるだろう。
もしネットワーク・アドレス部に2オクテット使うとすると、ホスト・アドレス部には2オクテット利用できるので、そのネットワーク上には216=65536通りのIPアドレスが確保できる。つまり65000台ものホストを設置することができる。
もっとも、さすがにこんなに多くのホストを置いてしまっては、ネットワークのトラフィックなどが過大になり(ブロードキャストなども多数出されるので)、正常に使えるネットワークにはならないだろう。現実的には、1つのネットワーク上のホストはせいぜい100台とか200台くらいまでに抑えた方がよいだろうから、このような例は意味がないと思われるかもしれないが、実際にはさらにネットワークを分割するサブネット化や、逆に複数のネットワークを集成するスーパーネット化などで、このような大きなネットマスクが使われることがある。
一般的には、オクテット単位(8bit単位)ではないネットマスクも多く使われている。例えば最近のインターネット・サービスでは、8つの固定的なIPアドレスを割り当ててくれる専用線サービスなどがあるが、この場合は、ネットワーク・アドレス部は29bitで、ホスト・アドレス部は3bitという計算になる。
このようにTCP/IPでは、ネットワーク・アドレス部とホスト・アドレス部のサイズを適宜変えることにより、さまざまな規模に対するネットワーク構成を構築することができる柔軟性を備えている。このおかげで、(それだけでもないが)たった32bitのIPアドレス幅しかないTCP/IP(IPv4)でも、誕生から20年以上も使い続けられているといえるのではないだろうか(そろそろ時代はIPv6を必要とし始めているようであるが……)。
ネットワーク・アドレスを取り扱う場合は、ネットマスクの値が重要な意味を持つことが多い。特にルータやパケット・フィルタの設定などでは、ネットマスクの値を無視するわけにはいかない。そのため、単にネットワーク・アドレスだけを単独で記述するのではなく、ネットマスクの値も同時に表記できれば便利である。そのために、ネットマスクの情報を同時に記述する方法として、以下のような簡便な表記方法がある。ネットワーク・アドレスが「192.168.1.0」、ネットマスクが「255.255.255.0」とすると、次のようになる。
前者はネットマスクの情報を完全に記述する方法であり、どんなネットマスクでも表現できる。後者は省略した簡便な記法であり、CIDR(Classless Inter-Domain Routing、サイダー)でよく使われる。CIDRは、ネットワーク・アドレスをまとめて、ルーティング情報を集積・圧縮し、(主にインターネットにおける)IPアドレスの効率的な割り当てを行うための手段である。CIDRについては、次回詳しく説明する。
後者の「/24」という表現であるが、これは、ネットマスクを構成する32bitのうち、最上位から24bit目までが1である、ということを表している。図中のネットマスクのビット・パターンをよく見ていただきたいが、「255.255.255.0」という数値を2進数で表現すると、最上位(左端)から数えて24bit目までが全部1で、残り(25bit目から右端の最下位bitまで)は0である。これを「/24」と表現する。
ところで後者の表現では、ネットマスク中の1というデータが(最上位bitから)連続していて、その残り(右側)はすべて0でなければならないが、もしネットマスクを構成するマスク・データ中に、0と1が交互に入っていたり、最上位bitが0だったりすると表現することはできない。詳細は次回述べるが、ネットマスクの値としては、このような変則的なパターンも許されている(ただし現実には、ほとんど使うことはないが)。そのため、このようなネットマスクを使う必要がある場合は、前者の「192.168.1.0/255.255.255.0」という表記方法を使うことにする。
Copyright© Digital Advantage Corp. All Rights Reserved.