【基本情報】サブネットマスクの計算、鍵は「区切り幅」|CIDR・VLSMまで

サブネットの問題、2進数がずらっと並んだ瞬間にページをめくりたくなりますよね。でも、第4オクテットで区切る典型問題なら、「区切り幅を出して、IPアドレスがどの区画に入るか確認する」だけで、2進数を毎回ぜんぶ書かなくても速く解けます。0〜255番の番号付きロッカーを、64個ずつ・32個ずつの同じ幅の区画に分けていくイメージです。

この記事では、その速解法と、迷ったときに立ち返る原理(AND演算)の両方をやります。

最初にこれだけ:CIDR・マスク・区切り幅の変換表(/24〜/30)

CIDR サブネットマスク 境界オクテットの値 区切り幅 ホスト部 総アドレス数 通常の利用可能ホスト数
/24 255.255.255.0 0 256 8 256 254
/25 255.255.255.128 128 128 7 128 126
/26 255.255.255.192 192 64 6 64 62
/27 255.255.255.224 224 32 5 32 30
/28 255.255.255.240 240 16 4 16 14
/29 255.255.255.248 248 8 3 8 6
/30 255.255.255.252 252 4 2 4 2

表の読み方はこうです。

  • 総アドレス数 = 2^(ホスト部のビット数)
  • 通常の利用可能ホスト数 = 総アドレス数 − 2
  • 引いている2つは、各区画の先頭(ネットワークアドレス)と末尾(ブロードキャストアドレス)。この2つは予約席で、ホストには使えません

この「−2」を忘れた値(64、32などキリのいい数)は、典型的な誤答としてよく選択肢に置かれています。

「境界オクテット」の見つけ方:末尾とは限らない

区切り幅の出し方は、こうです。

  1. サブネットマスクを左から見る
  2. 最初に255ではなくなるオクテットを探す。ここが「境界オクテット」
  3. 区切り幅 = 256 − 境界オクテットのマスク値
  4. 境界オクテットより右側は、ネットワークアドレスでは全部0、ブロードキャストアドレスでは全部255になる

例を見ると一発です。

  • 255.255.255.192 → 境界は第4オクテット。区切り幅 256−192=64
  • 255.255.240.0 → 境界は第3オクテット。区切り幅 256−240=16

「最後の数字だけ見ればいい」と覚えてしまうと、/23や/20のようにマスクの第4オクテットが0になる問題で手が止まります。見るのは末尾じゃなくて、左から最初に255が崩れる場所です。

ちなみに:マスクに使える数字は決まっている

サブネットマスクは2進数で「左から1が連続して、その後は0が連続する」形しか取りません。なのでオクテットに現れる値は、

0、128、192、224、240、248、252、254、255

の9種類だけです。たとえば250は2進数で11111010、途中で1と0が混ざっているのでマスクの値としてはあり得ません。選択肢にこの9種類以外の値を含むマスクがあったら、その時点で切れます。

ただし逆は成り立ちません。各オクテットが9種類のどれかでも、並びが正しくなければ無効です。マスク全体を2進数で見たとき、左から1が連続し、その後はすべて0でなければなりません。10進表記では、左から255が続き、255でも0でもない途中の値がある場合は1個だけ現れ、その右側はすべて0になります。途中の値がなく、255の直後に0が続くマスクも有効です。

  • 255.255.240.0 → 有効(255、255、240、0)
  • 255.0.255.0 → 無効(値は一覧内でも、1のビットが途切れている)
  • 255.255.250.0 → 無効(250がそもそも一覧外)

パターン1:ネットワークアドレスを求める

例題:IPアドレスが172.16.5.100、マスクが255.255.255.192。ネットワークアドレスは?

区切り幅は256−192=64。つまり第4オクテットは 0〜63、64〜127、128〜191、192〜255 の4区画。
100が入るのは「64〜127」の区画。
先頭の172.16.5.64がネットワークアドレス。

ついでに、この区画の末尾172.16.5.127がブロードキャストアドレス、ホストに使えるのは65〜126です。1問分の計算で3種類の答えが出せるので、どの聞かれ方をされても同じ作業をすればOKです。

なぜ64になるのか:AND演算で確認する

区切り幅は速く解くための近道ですが、原理はこうです。

ネットワークアドレス = IPアドレス AND サブネットマスク

第4オクテットだけ2進数にしてみます。

IPアドレス 100:01100100
マスク   192:11000000
AND結果   :01000000 = 64

マスクの1が立っている部分(ネットワーク部)だけを残して、ホスト部を0に潰す。これがAND演算の意味で、区切り幅の方法とぴったり同じ答えになります。普段は区切り幅で速く解いて、迷ったり検算したいときはANDに戻る、という使い分けがおすすめです。

パターン2:第4オクテット以外で区切る

境界オクテットの考え方が効いてくるのがこれです。

例題:IPアドレスが192.168.5.200、プレフィックスが/23。ネットワークアドレス、ブロードキャストアドレス、利用可能ホスト範囲は?

/23のマスクは255.255.254.0。
左から最初に255でないのは第3オクテットの254。区切り幅は256−254=2
第3オクテットの区画は 0〜1、2〜3、4〜5、6〜7、…なので、5が入るのは「4〜5」。
ネットワークアドレス:192.168.4.0(境界より右のオクテットは0)
ブロードキャストアドレス:192.168.5.255(境界より右のオクテットは255)
利用可能ホスト範囲:192.168.4.1〜192.168.5.254

ポイントは、第4オクテットの200は区画の判定に一切登場しないこと。「最後のオクテットだけ見る」方法では解けない問題です。境界がどこにあるかを最初に確認する癖をつけてください。

パターン3:「何台つなげる?」とホスト数の一般式

例題:マスクが255.255.255.224のとき、1サブネットに割り当てられるホスト数は?

区切り幅は256−224=32。32−2=30台

このように、境界が第4オクテットにある/24〜/30の問題では、1区画の総アドレス数が区切り幅と同じなので、「区切り幅−2」で速く求められます。

ただしこの近道は第4オクテット限定です。どんなプレフィックスでも使える一般式はこちら。

通常の利用可能ホスト数 = 2^(ホスト部のビット数)− 2 = 2^(32 − プレフィックス長)− 2

たとえば/20なら、ホスト部は32−20=12ビット、総アドレス数は2^12=4,096、利用可能ホスト数は4,094台です。第3オクテットの区切り幅16から「16−2=14台」とやってしまうと桁違いにズレるので、台数の計算は必ずビット数から。区切り幅はあくまで「区画のどこに入るか」を見る道具です。

補足:/31と/32は「−2」の例外

試験の典型問題では、ホスト部が2ビット以上の通常サブネットに「2^h−2」を使えばOKです。ただし実務には例外が2つあります。

  • /31:ルータ同士を1対1でつなぐポイントツーポイントリンク(RFC 3021)では、2アドレスを両端でそのまま使うことがある
  • /32:単一ホストを指す「ホストルート」として使う

/32はもうひとつ特殊で、マスクが255.255.255.255なので「左から最初に255でないオクテット」が存在しません。境界オクテットや区切り幅で区画を判定する対象ではなく、「指定されたその1アドレス」を表すものとして扱ってください。また/31が2アドレスを両端で使えるのは、あくまでRFC 3021に基づくポイントツーポイントリンクの場合で、通常のLAN用サブネット全般に当てはまる話ではありません。

/31や/32に機械的に−2を当てると0や負の数になって意味を失うので、この2つは「特別枠」として分けて覚えてください。

パターン4:「25台つなぎたい」最小のサブネットを選ぶ

例題:25台のホストにIPv4アドレスを割り当てたい。アドレスの無駄が最も少なくなる(=25台を収容できる最小の)サブネットマスクはどれ?

1. 予約席2つを足して、25+2=27アドレス必要
2. 27以上になる最小の2のべき乗は32
3. 32=2^5なので、ホスト部は5ビット
4. プレフィックス長は32−5=/27
5. マスクは255.255.255.224、利用可能ホスト数は30台

注意点をひとつ。/26でも/25でも25台は収容できます。だから問題文に「最小」「無駄が最も少ない」という条件が付いているかを必ず確認してください。この条件付きなら、大きすぎるサブネットは「収容はできるけど正解じゃない」ひっかけ選択肢になります。

パターン5:/26 みたいなスラッシュ表記(CIDR)

「/26」は、IPv4アドレス32ビットのうち先頭26ビットがネットワークプレフィックスという意味です。なので、

ホスト部 = 32 − 26 = 6ビット → 2^6 − 2 = 62台(ホスト部が2ビット以上の通常サブネットの場合)

スラッシュ表記が出たら、まず「32から引いてホスト部」。ちなみに /26 はマスクでいうと255.255.255.192、つまり最初の表とつながっています。/25=128、/26=192、/27=224、/28=240。表記が変わっても中身は同じなので、どちらで出されても慌てないでください。

パターン6:2つのIPアドレスは同じサブネットか

演習にも入れている定番パターンです。判定方法はシンプル。

  1. 2つのIPアドレスに同じサブネットマスクを適用(AND)する
  2. 出てきたネットワークアドレスが同じなら同一サブネット、違えば別サブネット

区切り幅でやるなら「同じ区画に入るか」を見るだけです。

172.16.5.100/26 → 64〜127の区画
172.16.5.120/26 → 64〜127の区画 → 同一サブネット
172.16.5.130/26 → 128〜191の区画 → 100とは別サブネット

「130って100に近いから同じでは」と数値の近さで判断しないのがポイント。近さは関係なくて、区画の境界をまたぐかどうかがすべてです。なおこの判定は、2つのアドレスに同じサブネットマスクを適用して比べるのが原則です。

パターン7:VLSMは大きい部門から割り当てる

大きさの違う複数の部門にサブネットを切り分けるのがVLSM(可変長サブネットマスク)です。手順は4つ。

  1. 必要ホスト数が多い部門から並べる
  2. 各部門について、2^h−2が必要数以上になる最小のhを選ぶ
  3. 大きいサブネットから、正しい境界に合わせて順に配置する
  4. アドレス範囲が重なっていないことを確認する

例題:192.168.10.0/24を、50台・20台・10台の3部門に分割する。必要ホスト数が多い部門から順にアドレスの小さい方から、各部門を収容できる最小のサブネットを割り当てると、それぞれの範囲は?

50台の部門:2^6−2=62で足りるので/26
ネットワーク 192.168.10.0/ブロードキャスト 192.168.10.63/ホスト .1〜.62
20台の部門:2^5−2=30で足りるので/27
ネットワーク 192.168.10.64/ブロードキャスト 192.168.10.95/ホスト .65〜.94
10台の部門:2^4−2=14で足りるので/28
ネットワーク 192.168.10.96/ブロードキャスト 192.168.10.111/ホスト .97〜.110

なぜ大きい順かというと、小さい部門から先に埋めると、あとから来る大きい部門のための連続した空き領域が確保しにくくなるからです。大きい順・小さいアドレス順は、重複や配置不能を防ぎやすくする標準的な手順、という位置づけです。あと、各サブネットは自分のサイズの倍数の位置(/26なら64刻み、/27なら32刻み)からしか始められません。中途半端な位置から始めると区画が重複して、正しい割当になりません。

ひとつ補足。正しい境界を守って重複がなければ、配置のしかた自体は一通りとは限りません(10台の部門を末尾側に置いても成立します)。上の例題の答えが一意に決まるのは、「大きい順・小さいアドレス順・最小サイズ」という条件を付けているからです。問題文にこの種の配置条件があるかを確認してください。

ありがちなミスまとめ

やらかし 出てくる誤答 対策
−2を忘れる 64、32などキリのいい数 先頭と末尾は予約席、と唱える
隣の区画を答える 1つ手前・次のネットワークアドレス 「以上・未満」で区画を確認する
ホストのアドレスをそのまま答える 問題文のIPアドレス ネットワークアドレスは区画の先頭
第4オクテットだけを見る /23や/20で正しく判定できない 左から最初に255でないオクテットを探す
「区切り幅−2」を/20などにも使う ホスト数が極端に少ない値 台数は2^(32−プレフィックス長)−2
台数だけ見て大きすぎるサブネットを選ぶ 収容はできるが最小でない値 「最小」「無駄が少ない」の条件を確認
/31・/32にも機械的に−2 0や負の数 この2つは例外として別枠で覚える
VLSMを小さい部門から埋める 大きい部門の領域が足りない 必要ホスト数が多い順に配置
境界に合わない位置から始める サブネットが重複する /26なら64刻みなど、開始位置を確認
オクテットの値だけ見て有効マスクと判断 255.0.255.0を有効と誤認 マスク全体で1が左から連続しているか確認
/32で境界オクテットを探す 境界が見つからず手が止まる /32は単一アドレスのホストルート
VLSMの配置条件を確認しない 正しい配置が複数あり答えが揺れる 大きい順・小さいアドレス順などの条件を確認

仕上げに演習10問どうぞ

演習問題では、この記事のパターンに加えて「2つのIPアドレスが同じサブネットかどうかの判定」「大きさの違う3部門への割り当て(可変長サブネット)」まで揃えてあります。間違いの選択肢には「−2を忘れた値」「隣の区画」「第4オクテットだけを見た値」など、代表的なミスをしたときに出る値を含めてあるので、外した選択肢が自分の弱点を教えてくれます。


今日のまとめ

  • 境界オクテットは「左から最初に255でない場所」。区切り幅 = 256 − そこのマスク値
  • 有効なサブネットマスクは、全体で1のビットが左から連続する。オクテットの値だけでは判定できない
  • ネットワークアドレス = IPアドレス AND サブネットマスク。区切り幅は速解法、ANDは原理と検算
  • ホスト数の一般式は 2^(32−プレフィックス長) − 2。境界が第4オクテット(/24〜/30)なら「区切り幅−2」で時短できる
  • 台数からマスクを選ぶ問題は「+2してから、それ以上の最小の2のべき乗」。「最小」の条件を確認
  • 2つのIPは、同じマスクを適用してネットワークアドレスが同じなら同一サブネット
  • VLSMは大きい順・小さいアドレス順が標準手順。配置条件がなければ正しい配置は一通りとは限らない
  • /31と/32は「−2」の例外。/32は境界オクテットのないホストルート

次回は「転送時間の計算」。単位換算を取り違えやすい分野です。

参考資料

  • IPA「基本情報技術者試験(レベル2)シラバス Ver.9.2」
  • RFC 4632「Classless Inter-domain Routing (CIDR)」
  • RFC 3021「Using 31-Bit Prefixes on IPv4 Point-to-Point Links」

本記事の例題は、基本情報技術者試験の出題範囲及びIPv4の標準仕様を参考に、当サイトで独自に作成したものです。

関連する問題


コメント

タイトルとURLをコピーしました