はじめに
Q. IPアドレスの計算が速くなるには、どうすればいいですか?
A. 習うより慣れろ。
…ではあまりに乱暴なので、IPアドレス計算の思考プロセスをフローチャートにしてみた。
宣伝
思考プロセス・概念ではなく、Excelの実用的な関数を知りたい場合は、下記を参考に。
【Excel】IPアドレスの各オクテット・Prefixを抜き出す関数
https://qiita.com/AnPanda/items/93390f43b7115873c4e5
事例
あるホストアドレスからネットワークアドレスを計算したい。これを計算するとき、頭の中でどういう処理が行われているか。
まずは日本語で
対象ホストアドレス①:192.168.100.203/28
クラスCか。じゃあ第2オクテットまではNWアドレスで確定。
レンジが/24より細かいから、第3オクテットもNWアドレスだ。
/28だから、16個単位のNWね。
第4オクテットが203だから、128が引けるな。残りは75。
64も引ける。残りは11。
NWの単位である16より小さくなったから、これ以上は引けない。
元の第4オクテット203から、残った11を引くと、192だ。これが第4オクテットになるから、
答え:192.168.100.192/28
対象ホストアドレス②:172.31.163.32/22
クラスBね。16<x<24だから、第2オクテットまではNWアドレスで確定。
/24よりも広いレンジなので、NWアドレスの第4オクテットは必ず0になるってこと。
/22は、/24:256よりも2段階大きい、つまり/24が4つ分だ。これがNWの単位になる。
第3オクテットから128を引くと、35。
64は引けない、次は32を引いて、残りは3。
NWの単位である4よりも小さい。計算終了。
残った3を、元の第3オクテットである163から引いた、160がNWアドレスの第3オクテットになる。
また、第4オクテットは0になるので、
答え:172.31.160.0/22
フローチャート
説明
※メインは図解なので、言葉での説明は補足程度(いい加減)です。
まず、/0だったら0.0.0.0/0として即終了。
続いて、レンジが8で割り切れる場合(/8,/16,/24,/32)、オクテットごとで区切れるので、以降の処理は不要。別処理として終了させる。
割り切れない場合は、商を[A]、あまりを[B]とする。
第[A+1]オクテットが計算対象になるので、これを[C]と置く。
2の(8-[B])乗を[D]と置く。これは、ネットワークの単位になる値。/28だったら、28÷8なので、3あまり4。2の(8-4)乗で、16になる。/28のネットワークアドレス・ホストアドレス・ブロードキャストアドレスを足した範囲が16個分なので、これは直感的にわかる。
例②のような/24より広いレンジの場合はちょっと考え方を変える必要あり。22÷8で、2あまり6。2の(8-6)乗は4。この4は、/24単位(256)のネットワークが4つ分ある、という意味だと考える。計算対象以外のオクテットのことをいったん忘れてしまった方が、計算は楽になる。
繰り返しが一番理解しにくいところ。
言葉で説明すると、128、64、32…と引いていき、引けなくなるまで繰り返す。引けなくなった残りはホストアドレスとしての値なので、それを元のオクテットから引けば、ネットワークアドレスになる。
まとめ
図解は大事
「慣れる」というのは、自分の頭の中でプロセスが明確になるということ。それを人に説明するには、プロセスをフローチャートなどの図で表現する必要がある。
暗算でもできるように、仕組みを理解するべき
サブネットを計算するようなツールは世の中にすでにたくさん出回っており、業務でIPアドレスを扱うなら、暗算ではなくツールに頼ることは合理的な選択。ただ、ツールが使えないときの対応や、スピード感の向上につながるので、できるだけ計算の仕組みを理解するようにしておくべき。