サブネットマスクとは

ルータを導入してLANについていろいろと調べたので、メモを残します。今回は「サブネットマスク」のお話。間違ってたら教えてね。
サブネットマスクとは、簡単に言えば、「このIPからこのIPまでが同じネットワーク(サブネット)内のIPですよ!」という範囲を宣言するものです。
例えば、ローカルIP「192.168.12.1」のルータにおいてサブネットマスク「255.255.255.0」と設定した場合、そのルータの下に置けるローカルIPは192.168.12.0〜192.168.12.255までの範囲に限られます*1。なぜそうなるのでしょう?
それではこの環境において、ルータのIPを変えずに「192.168.1.1」というローカルIPを持つパソコンを設置したい、というケースを例にして解説してみます。
サブネットマスク、というぐらいですから、この255.255.255.0というのはIPそのものではなく、「マスク」になっています。これをわかりやすくするため、10進数表記*2のIPを2進数に直してみると、次のようになります。

192.168. 12.  1 = 11000000 10101000 00001100 00000001
255.255.255.  0 = 11111111 11111111 11111111 00000000

サブネットマスクを2進数で表した時、

  • 「1」の部分 … 「ネットワークアドレス」自らのネットワーク内で共通の、固定アドレス部分
  • 「0」の部分 … 「ホストアドレス」ネットワーク内の機器に割り当てられる、可変アドレス部分

であることを示しています*3。上記の例においては、11000000 10101000 00001100 = 「192.168.12.」の部分までがサブネットマスクの「1」で覆われて(マスクされて)いますから、同じネットワーク内の機器は「192.168.12.???」という形式でなければいけない!という意味になるわけです。「192.168.1.1」というアドレスは3セグメント目が一致せず、範囲外にあることがわかりますね。
それでは、サブネットマスクをどのように変更すれば「192.168.1.1」のアドレスを使用することができるようになるのでしょうか。同じように2進数に表してみると…

192.168. 12.  1 = 11000000 10101000 00001100 00000001
192.168.  1.  1 = 11000000 10101000 00000001 00000001

この2つのIPにおいて、頭から共通する部分を1でマスクすればいいのですから

192.168. 12.  1 = 11000000 10101000 00001100 00000001
192.168.  1.  1 = 11000000 10101000 00000001 00000001
???.???.???.??? = 11111111 11111111 11110000 00000000

となるのがわかるでしょうか。そしてこの2進数表記の数字を10進数に直せば…

192.168. 12.  1 = 11000000 10101000 00001100 00000001
192.168.  1.  1 = 11000000 10101000 00000001 00000001
255.255.240.  0 = 11111111 11111111 11110000 00000000

サブネットマスクは「255.255.240.0」と設定すればよいことがわかりました。
IPの範囲を示す方法はこのサブネットマスク以外にもいくつかあるので、google先生に聞いてみるといいですね!

*1:実際は192.168.12.0なんかは特殊なIPのため置けない。また、192.168.12.1もルータと重複するため当然置くことはできない…が、そんなことを言っていると理解しづらくなると思うのでここでは無視

*2:正確には「ドット付き10進表示」などと呼ばれ、8ビット(2進数で8桁)の数字を10進数表示で表したものをドットで4つ繋いだもの、となります。

*3:なお、IPは必ず「ネットワークアドレスの後ろにホストアドレス」という構成になっています。そのため、0の後ろに1が来ることは絶対にありえません。