サブネットとCIDRの計算方法
これまでサブネットやCIDRについて説明してきましたが、本項では計算方法について説明します。
全てをビットに直す
サブネットは全てをビットに直して計算します。
例えば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 |
2進数への簡単な変換方法はWindowsの電卓を使う方法です。以下の動画はWindows7の場合ですが、電卓の種類をプログラマにして172と入力し、2進数に変換すると10101100と表示されます。
16を2進数に変換すると10000と表示されますが8bitに満たないため左側を0で埋めて00010000となります。このように「.」で区切られた数字毎に全て2進数に直します。
2進数に直した後はIPアドレスとサブネットマスクでAND計算します。ANDとはIPアドレスとサブネットマスクのビットで同じ列を比較して共に1のビットは1、それ以外は0が結果になります。
IPアドレス | 10101100 | 00010000 | 00000001 | 00000001 |
---|---|---|---|---|
サブネットマスク | 11111111 | 11111111 | 11111111 | 00000000 |
ANDの結果 | 10101100 | 100010000 | 00000001 | 00000000 |
最後に8bit毎に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の所はオール1bitのためANDをとってもIPアドレスそのままの数字、0の所はサブネット番号も0になります。
255でも0でもない所は10000000、1100000、11100000等と1が1bit多くなる度に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が17bit続くという意味のため、2進数で表すと11111111.11111111.10000000.00000000となります。IPアドレスを2進数にしてANDをとればネットワークアドレスが分かります。
しかし毎回計算すると面倒なため、やはりサブネットと同じような計算をします。
IPアドレスは8bit毎に「.」で区切られ/17では8bit間隔を示す「.」2つ目まではオール1になり、24bit以降はオール0になります。つまり、172.16.200.1/17の場合、172.16.??.0まではすぐに判断出来ます。
??部分もサブネットマスクの場合と同様で1が1bit多くなる度に128、128の半分の64を足した192、64の半分の32を足した224が使われると覚えます。/17では10000000が??部分になるため、128ずつ増やして200を越えない128が求める番号となり、全体で172.16.128.0がネットワークアドレスになります。
- 応用編「IPアドレスの種類」
- 豆知識「サブネット番号計算ツール」