サブネットとCIDRの計算方法

これまで、サブネットやCIDR(Classless Inter-Domain Routing)について説明してきましたが、本項では計算方法について説明します。

基本的なサブネットの計算方法

サブネットは、すべてをビットに直して計算します。

例えば、IPアドレス172.16.1.1に対してサブネットマスクが255.255.255.0だった場合、すべてを2進数に直すと以下になります。この1、0がビットを表しています。

【例1:アドレスをビットにする】
進数 IPアドレス
10進数 172 16 1 1
2進数 10101100 00010000 00000001 00000001
進数 サブネットマスク
10進数 255 255 255 0
2進数 11111111 11111111 11111111 00000000

この例で、16を2進数に変換すると10000になりますが、8bitに満たないため左側を0で埋めて00010000としています。このように、「.」で区切られた数字ごとにすべて2進数に直します。

2進数への簡単な変換方法は、Windowsの電卓を使う方法です。使い方は、電卓を使った2進数/16進数計算をご参照ください。また、本サイトの2/8/10/16進数相互変換ツールでも簡単に変換できます。

2進数に直した後は、IPアドレスとサブネットマスクでAND計算します。ANDとは、IPアドレスとサブネットマスクのビットで同じ列を比較して、ともに1のビットは1、それ以外は0が結果になります。

【例1:ANDをとる】
IPアドレス 10101100 00010000 00000001 00000001
サブネットマスク 11111111 11111111 11111111 00000000
ANDの結果 10101100 00010000 00000001 00000000

最後に、8ビットごとに2進数を10進数に戻します。

【例1:10進数に戻す】
ANDの結果 10101100 00010000 00000001 00000000
10進数 172 16 1 0

上記で得られた結果の172.16.1.0がサブネット番号になります。

サブネットマスクが255でない場合の例

もう1つ例を挙げます。IPアドレスが172.16.1.200に対してサブネットマスクが255.255.255.128だった場合です。

まず、2進数に直します。

【例2:アドレスをビットにする】
進数 IPアドレス
10進数 172 16 1 200
2進数 10101100 00010000 00000001 11001000
進数 サブネットマスク
10進数 255 255 255 128
2進数 11111111 11111111 11111111 10000000

次にANDです。

【例2:ANDをとる】
IPアドレス 10101100 00010000 00000001 11001000
サブネットマスク 11111111 11111111 11111111 10000000
ANDの結果 10101100 00010000 00000001 10000000

最後に10進数に直します。

【例2:10進数に戻す】
ANDの結果 10101100 00010000 00000001 10000000
10進数 172 16 1 128

このように、サブネット番号は最後が0にならない場合があります。

実際の計算方法

毎回2進数に直して計算するのは面倒です。このため、以下のように計算します。

サブネットマスクで「.」で区切られた255の所はオール1ビットのため、ANDをとってもIPアドレスそのままの数字、0の所はサブネット番号も0になります。

つまり、IPアドレス172.16.1.1、サブネットマスク255.255.255.0では、サブネット番号は172.16.1.0とすぐ判断できます。

サブネットマスクが255でも0でもない所は10000000、1100000、11100000などと、1が1ビット多くなるたびに128、128の半分の64を足した192、64の半分の32を足した224がサブネットマスクに使われると覚えます。

【使われるサブネットマスクの数字】
2進数 使われる数字 上の数字との差
00000000 0 -
10000000 128 128
11000000 192 64
11100000 224 32
11110000 240 16
11111000 248 8
11111100 252 4

ポイントは最初の128を憶えること、次はその半分の数字を足すこと、その次からは足した半分の数字を足すことです。

最初の128、もしくは足した数字ずつサブネット番号は増えて行きます。以下の表はネットワークアドレス172.16.0.0/16、サブネットマスクが255.255.255.192の場合で、192部分で使えるサブネット番号を示しています。

【使われるサブネット番号】
サブネット番号 上の数字との差
0 -
64 64
128 64
192 64

192は128に64を足した数字であるため、使えるサブネット番号は64ずつ増えていることがわかります。

IPアドレスはサブネット番号と次のサブネット番号の間の数字になるため、IPアドレスを越えない数字が求めるサブネット番号になります。

例えば、IPアドレスが172.16.1.200に対してサブネットマスクが255.255.255.224だった場合、サブネットマスクが255の所はIPアドレスそのままの数字、0の所はサブネット番号も0になるので以下まではすぐにわかります。

【実際の計算例1:255と0の判断】
IPアドレス 172 16 1 200
サブネットマスク 255 255 255 224
サブネット番号 172 16 1 ??

??の部分ですが、サブネットマスクの所が224になっていて、これは192に32を足した数字です。このため32ずつ増やして200を越えない192が求める番号となり、172.16.1.192がサブネット番号になります。

もう1つ例を挙げます。

IPアドレスが172.16.1.70でサブネットマスクが255.255.255.240の場合、172.16.1.??まではすぐにわかると思います。

??部分ですが、サブネットマスクが240は224に16を足した数字です。16ずつ増やして70を越えない64が求める番号となり、172.16.1.64がサブネット番号になります。

電卓がなくても計算できますが、慣れるまでは面倒かもしれません。サブネットマスクの255でも0でもない部分は、最後に何を足すとその数字になるかすぐわかるようになると計算が早くなります。

サブネットの計算練習

以下で、計算の練習ができます。「答え」ボタンをクリックすると答えが表示されます。また、「クリア」ボタンをクリックすると違う問題が出ます。

Q1.下の数字はサブネットマスクが0でも255でもない部分です。何を足すとその数字になりますか?

答え:

補足:

Q2.サブネット番号を答えて下さい。(ヒント:Q1の答えずつ足していきます)

IPアドレス   :

サブネットマスク:

答え:

補足:

CIDRでの計算

CIDRの計算もサブネットの計算と同じです。ただし、CIDRでは/17などと表記されます。

/17は1が17ビット続くという意味のため、2進数で表すと11111111.11111111.10000000.00000000となります。IPアドレスを2進数にしてANDをとればネットワークアドレスがわかります。

しかし毎回計算すると面倒なため、やはりサブネットと同じような計算をします。

IPアドレスは8ビットごとに「.」で区切られるため、/17では8ビット間隔を示す2つめの「.」まではオール1になり、24ビット以降はオール0になります。つまり、172.16.200.1/17の場合、172.16.??.0まではすぐに判断できます。

??部分もサブネットマスクの場合と同様で、1が1ビット多くなる度に128、128の半分の64を足した192、64の半分の32を足した224が使われると覚えます。/17では10000000が??部分になるため、128ずつ増やして200を越えない128が求める番号となり、全体で172.16.128.0がネットワークアドレスになります。

関連ページ

応用編「IPアドレスの種類
クラスやCIDR、サブネットなどについて説明しています。
豆知識「サブネット番号計算ツール
IPアドレスとサブネットマスクを入力すると、自動でサブネット番号やブロードキャストアドレスなどを計算してくれます。CIDRにも対応しています。