サブネットマスクはIPアドレスのうちどこからが「ネットワーク部」でどこから「ホスト部」なのかを識別するためのものです。
「255.255.255.0」などのように表記されていることが多いです。
今回はこのサブネットマスクの意味などを説明していきます。
サブネットマスクとは?
IPアドレスはIPv4の場合「xxx.xxx.xxx.xxx」のように4つの区切りごとに書かれた数値になっています。
家のLANなどでは、IPアドレスは「192.168.1.11」などのように設定されていると思います。
IPアドレスは「その機器がネットワーク内のどこにあるのか?と」いうパソコンの住所のようなものであると思ってください。
このIPアドレスは住所の都道府県のように広い範囲のグループを示す「ネットワーク部」と丁目や番地を表す「ホスト部」の2つの部分に分かれています。
「東京都渋谷区1-1」という仮想の住所があったとしたら、東京都渋谷区にあたる部分がネットワーク部、1-1の部分がホスト部のようなものだと想像してください。
IPアドレス「192.168.1.11」を見ても
サブネットマスクはこのIPアドレスのどこからがネットワーク、ホスト部なのかを示す数字です。
例えばサブネットマスクが「255.255.255.0」の場合、前半3区切りまではネットワーク部、後半1区切りはホスト部ということがわかります。この仕組みについてはも少し後に説明します。
ちなみにここで扱うIPアドレスはIPv4です。他にはより新しいバージョンである「IPv6」のIPアドレスもあります。違いについては以下の記事を参考にしてください。
サブネットマスクはIPアドレスをどのように分割しているのか?次に解説します。
IPアドレスにはネットワーク部とホスト部がある
IPアドレスの「ネットワーク部」と「ホスト部」について詳しく見ていきましょう。
とある会社には2つのネットワーク
- ネットワーク1
- ネットワーク2
があります(下図参照)。同じネットワーク内にある機器同士は通信できます。
例えばネットワーク1にあるネットワークプリンタはネットワーク1のPCは利用できますが、ネットワーク2のPCは利用できません。
上の図のIPアドレスのどの部位がネットワークを表しているか予想してみましょう。
IPアドレスに着目するとネットワーク1は192.168.1.xxxまでが共通していて、以降のxxxにあたる部分が異なっています。ネットワーク2も同様に192.168.2.xxxまでが共通していてドットで区切られた最後の部分だけが異なっていますね。
つまり、192.168.1と192.168.2の部分がネットワークを表していることが予想できます。逆に最後のxxxの部分がネットワーク内の機器を表す「ホスト部」になります。
サブネットマスクの理解には二進数が必要
これまで見ていたIPアドレスはすべて10進数でしたが、より詳しくIPアドレス・サブネットマスクの仕組みを理解するには2進数に変換して考えなければなりません。
サブネットマスクの数値はもともと2進数であり、255を二進数に変換すると「11111111」と1だけの8bitで表記できます。
なぜ2進数表記が必要なのかについては、後で詳しく述べますが、サブネットマスクの1の部分がネットワーク部を指すからです。
クラスフルアドレッシング
サブネットマスクによるネットワークの分類の前にIPアドレスの分割についてまず話します。
IPアドレスはものすごい桁数あるので、分割してやらないと運用に困ります。最初に登場した考え方が「クラスフルアドレッシング」です。クラスフルアドレッシングではIPv4のアドレスをクラスA~Eの5つに分類する考え方です。
それではまず10進数を2進数に変換しましょう。
IPアドレスは2進数、8bitずつの表記(二進数で8桁)です。
Ipv4全体のアドレス範囲は10進数で
「0.0.0.0」~「255.255.255.255」
2進数に変換すると
「00000000.00000000.00000000.00000000.」~「11111111.11111111.11111111.11111111」です。
IPアドレスの表記は4つのオクテット(8bit)で別れています。
0.0.0.0~0.0.0.255では256個のアドレスがあります。次の桁は0.0.1.255となります。つまり、第三オクテットと第四オクテットで表現できる数は256×256=65536個あります(有効アドレスに関してはブロードキャストアドレスとネットワークアドレスをの2つを除いた65534個)
これは単純に二進数8+8bit=16bit→216=65536と同じです。
ではどうやってこのIPアドレスを分割しましょうか?
先ほど、IPアドレスにはネットワーク部とホスト部があることを説明しました。このとき、ネットワーク部に当たる割合が少ないほど多くのIPアドレスを発行できます。
例えば0~9999の数字があったとき、左端1桁目の0がネットワークアドレスになれば、「0-000~0-999」と1000個のホストアドレスを発行できます。一方で左端から2桁目の00がネットワークアドレスになれば「00-00~00-99」と100個のホストアドレスが発行できます。0xxxのグループと00xxのグループでは0xxxのほうがたくさんのIPアドレスが発行できます。
このような分類を「クラス」といいます。
これを2進数のIPアドレスに適応すると最初の8ビットの部分をクラスに分けてみると
- 0xxxxxxx.xxxxxxxx.xxxxxxxx.xxxxxxxx.:クラスA
- 10xxxxxx.xxxxxxxx.xxxxxxxx.xxxxxxxx.:クラスB
- 110xxxxx.xxxxxxxx.xxxxxxxx.xxxxxxxx.:クラスC
- 1110xxxx.xxxxxxxx.xxxxxxxx.xxxxxxxx.:クラスD
- 1111xxxx.xxxxxxxx.xxxxxxxx.xxxxxxxx.:クラスE
というように分類できます。
当然、二進数でもクラスAが最も大きいクラスでたくさんのIPアドレスを発行できます。このように最初の8ビット(第四オクテット)の先頭4ビット(4桁目)までの数字でクラス分けしてIPアドレスを管理しようというのが「クラスフルアドレッシング」の考え方です。
クラスA~Eを十進数に変換すると「0~127, 128~191, 192-223, 224-239, 240-255」のようになります。
ただしこの割り振りは大まかすぎるクラス分けで多くの未使用IPが生まれてもったいないので「クラスレスアドレッシング」という方法を使用しています。
膨大なIPアドレスを半分ずつ分割していくクラスレスアドレッシング
IPアドレスは全体で膨大な数存在します。それを大きく二つに分割するときにはどうすればよいでしょうか?
IPアドレスは二進数で表されているため、最大桁数を0or1にすればちょうど半分に分割できます。つまり8bitの数00000000 ~ 01111111までと次の位10000000 ~ 11111111に分ければよいです。0から前半部分までの半分のアドレスがクラスAのアドレスです。同じ理屈で次の2桁を0とすると10000000はクラスAの半分を半分に分けるのでこのクラスBには全体の1/4のアドレス数があります。
クラスレスアドレッシング
クラスフルアドレッシングではIPアドレスの無駄が生じるため、自由にネットワークアドレス部を変更できる方法として「クラスレスアドレッシング」が用いられています。
ここで「サブネットマスク」が登場します。
サブネットマスクはIPアドレスの「ネットワークアドレス」と「ホストアドレス」の部分を決定するために用います。
サブネットマスクはIPアドレスと同じく8ビットが4つ並んだカタチをしています。
サブネットマスクでは2進数で1で表示されている部分を「ネットワークアドレス」0で表示されている部分を「ホストアドレス」として定義します。
サブネットマスク上の1によってネットワークアドレスの定義を変えることができます。上の例ではサブネットマスクを255.255.255.0とすることで、ホストアドレスが最後のまとまりの部分であることを示すことができます。つまり、192.168.1.1と192.168.1.21は同じネットワーク上にあります。
ちなみにサブネットマスクの表記としてCIDR表記というものがあり、255.255.255.0を二進数に直すと1が24個並んでいることから、192.168.1.1のサブネットマスクを合わせて「192.168.1.1 / 24」と書き表すことができます。
「192.168.1.1 / 24」は「192.168.1.1, サブネットマスク255.255.255.0 」と同じ意味です。
CIDRとは?
CIDRは「Classless Inter Domain Routing」の略です。日本語ではサイダーと読むらしいです。