InfraAcademy

InfraAcademy Blog

/24は読めるのに、/26で手が止まる。サブネット計算を暗算に持ち込む練習メニュー

| #ネットワーク #IPアドレス #学習方法
Linuxをブラウザで試してみる

Linux・ネットワーク・AWSを、環境構築なしで実践学習できます

こんにちは、インフラエンジニアのryuです。

192.168.1.0/24 と書かれていれば、なんとなく読めますよね。使えるアドレスは1から254まで、と口が覚えている人も多いと思います。

ところが 192.168.1.0/26 と書かれた瞬間、手が止まる。/28/30 が混ざった設計図を見せられると、どこが自分の担当の範囲なのか分からなくなる。

そんな経験はないでしょうか。

これは理解が足りないというより、計算のやり方が10進数のまま止まっているのが原因です。やり方を入れ替えれば、練習量はそれほど要りません。

今日は、サブネット計算を暗算に持ち込むまでの道筋を、練習メニューの形で書いていきます。紙とペンがあれば始められます。

なぜ/24は平気で、/26で止まってしまうのか

まず、つまずきの正体を切り分けておきましょう。

/24 が読めるのは、計算しているからではありません。区切りがちょうど点(ドット)の位置に来ているので、見た目で判断できているだけです。

192.168.1.0/24 なら、3つめの点までがネットワークで、最後の数字が機器の番号。これは計算ではなく、パターンの記憶です。

10進数のまま考えると、途中で破綻する

問題は /26 のように、区切りが点の位置から外れたときです。

/26 は、32ビットのうち26ビットがネットワーク側という意味です。4つめのオクテット(8ビット)のうち、前の2ビットまでがネットワーク側に食い込んでいます。

ここで「255.255.255.192 の192って何だろう」と10進数のまま考えると、手がかりがありません。192という数字自体には意味がなく、ビットの区切りの位置を10進数で書き写した結果でしかないからです。

サブネットマスクそのものの意味があやふやな方は、先にサブネットマスクとは?IPアドレスとは?を読んでおくと、この先がすっと入ります。

マスクは「境界線」、プレフィックスは「境界線の位置」

言い方を変えます。

IPアドレスは32個のスイッチが並んだもので、サブネットマスクはそこに引く1本の境界線です。左がネットワーク、右が機器の番号になります。

/26 は、その境界線が左から26個目の後ろにある、という位置の宣言です。クラスやCIDR表記の背景についてはクラス、CIDRとは?で整理されているので、用語が不安ならそちらも参考にしてください。

サブネット計算は、境界線をどこに引いたかを読み取る作業です。数字を覚える作業ではありません。

この前提に立つと、覚えるべきものがぐっと減ります。

覚える数字は8つだけ。ここが計算の土台になる

境界線が引ける場所は、1オクテットの中に8か所しかありません。だからマスクの最後の数字も、8種類しかありません。

まずこの表を頭に入れてしまうのが最短ルートです。

プレフィックス マスク末尾 ブロックの大きさ 使えるホスト数
/24 0 256 254
/25 128 128 126
/26 192 64 62
/27 224 32 30
/28 240 16 14
/29 248 8 6
/30 252 4 2
/31 254 2

右から2列目のブロックの大きさが、計算の主役です。

ブロックの大きさは、256をブロック数で割った値とも言えますし、2の(32-プレフィックス)乗 とも言えます。/26 なら2の6乗で64、/28 なら2の4乗で16です。

使えるホスト数は、そこからネットワークアドレスとブロードキャストアドレスの2つを引いた数になります。

ブロックの大きさが分かれば、区切りの位置が見える

ここまで分かると、/26 の区切りは自動的に出てきます。ブロックが64なら、区切りは0、64、128、192の4か所です。

たとえば 192.168.1.100/26 を考えてみましょう。100は64と128の間にあるので、このアドレスが所属するのは64から始まるブロックです。

だからネットワークアドレスは 192.168.1.64、ブロードキャストは1つ手前の 192.168.1.127、機器に振れるのは65から126まで。ここまで、割り算も筆算も要りませんでした。

/22のように点をまたぐときも、考え方は同じ

/26/28 に慣れてくると、次に戸惑うのが /22 のような、区切りが3つめのオクテットに入るパターンです。

けれど考え方は変わりません。境界線が左から22個目の後ろにあるので、3つめのオクテットの前の6ビットまでがネットワーク側です。残った2ビットが、ホスト側に回っています。

つまり3つめのオクテットが4刻みになる、ということです。/22 なら区切りは0、4、8、12と並び、ひとつの区画には4つのオクテット分、つまり1024個のアドレスが入ります。

10.1.6.0/22 なら、所属する区画は4から始まるので、ネットワークアドレスは 10.1.4.0、ブロードキャストは 10.1.7.255 です。24より小さいプレフィックスは、複数の /24 をまとめた区画だと考えると読みやすくなります。

2進数は「確かめ算」に使う

2進数に直す練習も無駄ではありませんが、毎回そこから始めると時間がかかります。

おすすめは、普段はブロックの大きさで考えて、答えが合っているか不安なときだけ2進数に落として確認する使い方です。2進数は主役ではなく、審判の役です。

たとえば 10.0.0.37/27 の4つめのオクテットは、2進数で 00100101 です。/27 なので前の3ビットまでがネットワーク側になり、そこから先を0で埋めると 00100000、つまり32になります。紙で出した答えと一致していれば、その考え方は正しいということです。

1日5分の練習メニュー。順番に効かせていく

では、実際の練習の話に入ります。次の4つを、この順番でやってみてください。1周5分で終わります。

ドリル1:プレフィックスとマスクの行き来(1分)

/26 と言われたら 255.255.255.192255.255.255.240 と言われたら /28。この往復を、表を見ずに10問やります。

最初は表を横に置いてかまいません。3日ほど続けると、8個の数字は指が覚えます。

ドリル2:所属ブロックを言い当てる(2分)

適当なアドレスとプレフィックスの組を作り、ネットワークアドレス・ブロードキャスト・使えるホストの範囲の3つを答えます。

自分で問題を作るのが面倒なら、192.168.10. の後ろにサイコロやランダムな数字を当てはめて、プレフィックスは /26 /27 /28 から選べば十分です。

例として、3問並べておきます。答えは次のドリルで検算してください。

問題 ネットワークアドレス ブロードキャスト ホスト範囲
10.0.0.37/27 10.0.0.32 10.0.0.63 .33 〜 .62
172.16.5.200/28 172.16.5.192 172.16.5.207 .193 〜 .206
192.168.1.9/30 192.168.1.8 192.168.1.11 .9 〜 .10

ドリル3:機械に採点させる(1分)

紙で出した答えを、コマンドで確認します。ここを省くと、間違いを覚えたまま進んでしまいます。

Linuxなら ipcalc が手軽です。入っていなければパッケージを追加するか、Pythonの標準ライブラリで代用できます。

# Debian/Ubuntu 系なら ipcalc を入れて確認
sudo apt install -y ipcalc
ipcalc 10.0.0.37/27

# 追加インストールなしで済ませるなら Python の ipaddress モジュール
python3 -c "
import ipaddress
n = ipaddress.ip_network('10.0.0.37/27', strict=False)
print('network      :', n.network_address)
print('broadcast    :', n.broadcast_address)
print('usable hosts :', list(n.hosts())[0], '-', list(n.hosts())[-1])
print('host count   :', n.num_addresses - 2)
"

strict=False を付けているのは、ホスト部が0でないアドレスをそのまま渡しても怒られないようにするためです。ネットワークアドレスを自分で求める練習には、この指定が向いています。

コマンドの基本操作に不安があれば、Linuxコマンド入門から手を動かしてみてください。

ドリル4:逆から考える(1分)

最後は設計側の練習です。「50台つなぎたい」と言われたら、どのプレフィックスを選ぶかを答えます。

50台なら、ホスト62台が入る /26 が答えです。/27 では30台しか入らないので足りません。

この逆算ができるようになると、サブネットの表を渡されたときに「この区画は何台まで増やせるのか」が読めるようになります。

この計算は、現場で何に使われているのか

練習の動機づけとして、実務でどこに出てくるのかも書いておきます。

ひとつは設計のときです。拠点やシステムごとにアドレスを配る作業では、必要な台数から区画の大きさを決めて、重ならないように並べていきます。

もうひとつが、トラブルの切り分けです。

「同じネットワークにいるか」を判断できると切り分けが速い

通信ができないとき、最初に確かめたいのは相手が同じネットワークの中にいるかどうかです。

同じ中にいるなら、やりとりはスイッチの世界で完結します。外にいるなら、必ずルーターやデフォルトゲートウェイを通ります。つまり、疑う場所がまったく変わってきます。

マスクを1桁見間違えただけで、同じネットワークだと思っていた相手が外側にいた、ということが起こります。この判断を暗算でできるかどうかが、初動の速さを分けます。

具体例で見てみましょう。自分のサーバーが 192.168.1.70/26、通信したい相手が 192.168.1.130 だとします。

/26 のブロックは64なので、自分がいるのは64から127までの区画です。相手の130はその外側、128から191の区画にいます。

数字が近いので同じネットワークに見えますが、実際はルーター越しの通信です。ここで相手が同じ中にいると思い込むと、スイッチやケーブルばかり疑って時間を使ってしまいます。

割り当ては大きい区画から順に切っていく

設計の練習に進んだときに効くコツも、ひとつ書いておきます。

ひとつの範囲を用途ごとに分けるときは、必要なアドレス数が多いものから順に割り当てるのが基本です。小さい区画を先にばらまくと、あとから大きな区画を入れる場所がなくなります。

たとえば 192.168.10.0/24 を、サーバー用に100台、業務端末用に50台、管理用に10台へ分ける場合を考えてみます。

用途 必要台数 選ぶプレフィックス 割り当て例
サーバー 100 /25(126台) 192.168.10.0/25
業務端末 50 /26(62台) 192.168.10.128/26
管理 10 /28(14台) 192.168.10.192/28

必要な台数に対して、いちばん近い大きさを上から当てていくだけです。この並べ方を可変長サブネットマスク(VLSM)と呼びます。

残った 192.168.10.208 以降は将来の予備になります。予備を意識して残せるようになると、設計の練習として一段進みます。

図に落とすと、区画の重なりに気づける

アドレス設計は、表だけ見ていると重なりに気づきにくいものです。区画を線分として書き出すと、重複や隙間が目で分かります。

構成図の練習についてはインフラの理解が急に進む『構成図トレーニング』でも触れました。サブネットの区画は、図にするとかなり見通しがよくなる題材です。

よくつまずくポイントを3つ挙げておく

練習中につまずきやすい箇所を先に共有しておきます。

1つめは、ホスト数から2を引き忘れることです。/26 は64個のアドレスを含みますが、機器に振れるのは62個です。

2つめは、/30/31 の扱いです。ルーター同士をつなぐ区間では、2台しか要らないので /30 がよく使われます。さらに節約するために /31 を使う運用も、RFC 3021 で認められています。

3つめは、クラスの考え方を引きずってしまうことです。「192で始まるからクラスCで/24」という発想は、CIDR の世界では通用しません。プレフィックスは設計者が決めるものなので、書いてある数字をそのまま読む習慣をつけてください。

クラウドでは、引く数が2ではない

もうひとつ、クラウドを触り始めた人がつまずく点があります。

AWS の VPC では、サブネットごとに先頭の4つと末尾の1つ、合わせて5つのアドレスが予約されています。ルーターやDNS用に使われるためで、サブネットの大きさにかかわらず同じ数が確保されます。

そのため /28 を切っても、実際に使えるのは11個です。オンプレミスの感覚で「16引く2で14台」と数えると、台数が合わなくなります。サブネットの最小サイズも /28 までと決められています。

EC2 を触りながら確認したい方は、AWSのEC2とは?から環境を作ってみるとイメージがつかみやすいはずです。

練習の環境は、無料で用意できる

計算に慣れてきたら、実際に機器へ設定して確かめる段階に進みたくなります。

その段階では、ネットワークシミュレーターが役に立ちます。Packet Tracerでネットワーク構築の練習をしようで紹介されているような環境なら、サブネットを切って通信できるかどうかを自分の手で確かめられます。

計算した区画を実際に設定して、疎通が取れたときに理解が定着します。

独学で行き詰まったときの進め方

ここまでの練習は、ひとりでも回せる内容にしてあります。

ただ、サブネット計算はネットワーク学習全体の中の一部分です。この先はルーティングやスイッチングへつながっていくので、順番を決めて進めないと迷子になりがちです。

学習の順番そのものに迷っている方は、ネットワークの勉強は何から?未経験がTCP/IPで挫折しないための学習ロードマップを先に読んでみてください。

体系的に手を動かしながら進めたい場合は、InfraAcademy のネットワーク学習ロードマップも用意しています。ブラウザ上で機器を触りながら、計算した設計をそのまま試せるようになっています。

まとめ

サブネット計算でつまずく原因は、暗記量ではなく考え方の入り口でした。

覚えるのは、境界線が引ける8か所と、そこから決まるブロックの大きさだけです。ブロックが分かれば、ネットワークアドレスとブロードキャストは引き算だけで出てきます。

そして紙で出した答えは、必ず ipcalc や Python で採点します。間違いを覚えないための、いちばん確実な手順です。

1日5分のドリルを1週間続けると、/26 を見ても手が止まらなくなります。そこまで来れば、設計図も障害の切り分けも、ぐっと読みやすい世界に変わります。

まずは今日、192.168.1.100/26 のネットワークアドレスを紙に書いてみてください。そこが出発点です。

参考記事

Next Action

記事で読んだ内容を、講座で実装してみましょう

InfraAcademyでは、ブラウザ上でLinuxやネットワークの実践環境を使いながら学習できます。無料で始められる講座から、学習の流れを試せます。

この記事を書いた人

ryu

InfraAcademy運営 / エンジニア

エンジニア歴10年。Linux、ネットワーク、クラウドを中心に、実務で役立つインフラ技術を初心者にもわかりやすく解説しています。

X: @ryu63614894

Related

関連記事

ブログ一覧へ

Roadmap

まずはこの4講座から

ログインすれば無料で始められる講座です。気になったテーマから手を動かして学べます。

講座一覧を見る