サブネットとCIDRの計算方法
これまで、サブネットやCIDR(Classless Inter-Domain Routing)について説明してきましたが、本項では計算方法について説明します。
基本的なサブネットの計算方法
サブネットは、すべてをビットに直して計算します。
例えば、IPアドレス172.16.1.1に対してサブネットマスクが255.255.255.0だった場合、すべてを2進数に直すと以下になります。この1、0がビットを表しています。
進数 | 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が結果になります。
IPアドレス | 10101100 | 00010000 | 00000001 | 00000001 |
---|---|---|---|---|
サブネットマスク | 11111111 | 11111111 | 11111111 | 00000000 |
ANDの結果 | 10101100 | 00010000 | 00000001 | 00000000 |
最後に、8ビットごとに2進数を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進数に直します。
進数 | IPアドレス | |||
---|---|---|---|---|
10進数 | 172 | 16 | 1 | 200 |
2進数 | 10101100 | 00010000 | 00000001 | 11001000 |
進数 | サブネットマスク | |||
---|---|---|---|---|
10進数 | 255 | 255 | 255 | 128 |
2進数 | 11111111 | 11111111 | 11111111 | 10000000 |
次にANDです。
IPアドレス | 10101100 | 00010000 | 00000001 | 11001000 |
---|---|---|---|---|
サブネットマスク | 11111111 | 11111111 | 11111111 | 10000000 |
ANDの結果 | 10101100 | 00010000 | 00000001 | 10000000 |
最後に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になるので以下まではすぐにわかります。
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でもない部分です。何を足すとその数字になりますか?
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にも対応しています。