今回はネットワーク設計に不可欠なサブネットマスク計算を高速で行う方法をご紹介します。
そもそも、サブネットマスクって何者?
どこまでがネットワーク部で、どこからがホスト部かを分割した情報です。クラスのアドレスをそのまま割り当てるとIPアドレスが勿体ないので、マスクをかけて効率化します。
例えば、1つのネットワークに400台のホストを接続したいとします。クラスCでは1つのネットワークに最大「254台」までのホストしか接続できないので、クラスBのネットワークを採用する必要があります。しかしクラスBの場合、1つのネットワークに最大「65534」のホストを接続できますが、400台のホストを接続するのにクラスBのアドレスを使用するのはかなりIPアドレスの無駄です。そこでサブネットの出番。
今回の場合、先ずクラスCでは要件を満たせないのでクラスBを使用します。次に、クラスBの場合、1つのネットワークが大きいのでサブネット化をします。ホスト部が 8 ビットである場合、28 により 256 です。ホスト部が 9 ビットである場合 29 により512です。ネットワークアドレスとブロードキャストアドレスを差し引いて(-2)、ホスト部が9ビットなら最大「510台」のホストを接続できますし、無駄もありません。
サブネットマスク計算のコツは簡単なパターンを覚える
覚えなければいけない数はそんなに多くないです。ゾロ目とかそういう簡単なのを覚えていきましょう。途中を忘れても、掛け算と同じで1つ覚えれば上下関係から正しい数を割り出せます。だから丸暗記と違って覚えやすいし、確かめ算も楽。
00000000
↓0000+0000
8bit部分を4bit+4bitに分けると覚えやすい!
前半4ケタ
128
128 | 64 | 32 | 16 | 8 | 4 | 2 | 1 |
1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
192
128 | 64 | 32 | 16 | 8 | 4 | 2 | 1 |
1 | 1 | 0 | 0 | 0 | 0 | 0 | 0 |
224
128 | 64 | 32 | 16 | 8 | 4 | 2 | 1 |
1 | 1 | 1 | 0 | 0 | 0 | 0 | 0 |
240
128 | 64 | 32 | 16 | 8 | 4 | 2 | 1 |
1 | 1 | 1 | 1 | 0 | 0 | 0 | 0 |
16
128 | 64 | 32 | 16 | 8 | 4 | 2 | 1 |
0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 |
48
128 | 64 | 32 | 16 | 8 | 4 | 2 | 1 |
0 | 0 | 1 | 1 | 0 | 0 | 0 | 0 |
112
128 | 64 | 32 | 16 | 8 | 4 | 2 | 1 |
0 | 1 | 1 | 1 | 0 | 0 | 0 | 0 |
240
128 | 64 | 32 | 16 | 8 | 4 | 2 | 1 |
1 | 1 | 1 | 1 | 0 | 0 | 0 | 0 |
後半4ケタ
8
128 | 64 | 32 | 16 | 8 | 4 | 2 | 1 |
0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 |
12
128 | 64 | 32 | 16 | 8 | 4 | 2 | 1 |
0 | 0 | 0 | 0 | 1 | 1 | 0 | 0 |
14
128 | 64 | 32 | 16 | 8 | 4 | 2 | 1 |
0 | 0 | 0 | 0 | 1 | 1 | 1 | 0 |
15
128 | 64 | 32 | 16 | 8 | 4 | 2 | 1 |
0 | 0 | 0 | 0 | 1 | 1 | 1 | 1 |
上記を最低限覚えておきます。また、他のパターンも覚えればもっと計算が早くなります。
覚えるとどうなるのか
11110010の場合
前半1111の合算値が240であると覚えています。また、後半0010は2だということは2進数の並びからわかります。
11110010
= 1111+0010
= 240 + 2
= 242
上記のように高速計算できます。
00111111の場合
この場合前半0011は48、後半1111は15ということは覚えています。
00111111
= 0011+1111
= 48+15
= 63
素早く計算できるだけでなく、計算回数が少なくなるので精度があがります。
実際の計算例
- IPアドレス:172.31.19.5
- サブネットマスク:255.240.0.0
上記IPアドレスのサブネット番号(ネットワーク部)を求めてみましょう。
IPアドレス | 172.31.19.5 |
サブネットマスク | 255.240.0.0 |
サブネット番号 | ? |
2進数に変換する
IPアドレス | 10101100 . 00011111 . 00010011 . 00000101 |
サブネットマスク | 11111111 . 11110000 . 00000000 . 00000000 |
サブネット番号の計算では、上下で重複する1のみ採用する。(論理積)
10101100 . 00010000 . 00000000 . 00000000
上記になります。
これを数値に表すと
1 2 3 4 5 |
1010+1100 . 0001+0000 . 0 . 0 ↓ 160+12 . 16 . 0 . 0 ↓ 172.16.0.0 |
となり、サブネット番号は172.16.0.0となります。
IPアドレス | 172.31.1.5 |
サブネットマスク | 255.240.0.0 |
サブネット番号 | 172.16.0.0 |
このようにしてサブネット番号を求めることが出来ます。
より効率的にサブネット計算しよう
また、実際にサブネット番号を計算する場合、サブネットマスクの第3,第4オクテットが0ということは、IPアドレスの第3,第4オクテットも0になるので、0になるとわかっている部分は2進数に変換する必要がありません。
同じ理由で、サブネットマスクが255の場合は、同一オクテットのIPアドレスはサブネット番号の同一オクテットにそのまま代入できます。例題では、IPアドレス第1オクテットは172、サブネットマスクは255なので、サブネット番号に172がそのまま入ります。だから今回の場合は第2オクテットのIPアドレス31とサブネットマスクの240のみ考えれば良いのです。サブネットマスクとは?という理屈からすると当たり前な事ですが、ポイントとして抑えておきましょう。
サブネットマスク電卓ツール!
https://note.cman.jp/network/subnetmask.cgi
サブネットマスク計算を行ってくれる電卓もあります。サブネットマスクの意味を理解していれば、計算精度の高いツールを使うのは合理的。
先程の問題を入れてみよう!
簡単に割り出せました。便利ですね~!
お疲れ様です。