ネットワークスペシャリスト 2012年 午前2 問16
問題文
IPv4アドレスが192.168.10.0/24〜192.168.58.0/24のネットワークを対象に経路を集約するとき、集約した経路のネットワークアドレスのビット数が最も多くなるものはどれか。
選択肢
ア:192.168.0.0/16
イ:192.168.0.0/18
ウ:192.168.0.0/17(正解)
エ:192.168.0.0/19
🔒 解説は解答すると表示されます
共通プレフィックス長【午前2解説】
正解の理由
問題文に記載された選択肢のうち、提示された解答欄にある ウ(192.168.0.0/17)が「正答」とされていますが、このキーは誤りです。192.168.10.0/24〜192.168.58.0/24 の範囲を1つのサマリ(単一のCIDRプレフィックス)で表すと、最も細かい(ビット数が多い)集約は 192.168.0.0/18 になります。したがって正しい選択肢はイ(192.168.0.0/18)です。
理由の要点:
- /18(ネットマスク 255.255.192.0)は第3オクテットでブロック長64(0〜63)を表し、192.168.0.0/18 は 192.168.0.0 〜 192.168.63.255 をカバーします。これは .10〜.58 の /24群(計49個)を1つの /18 に含められる最小の単一ブロックです。
- /19 は 32 個ブロック単位(0-31、32-63)で分割されるため、単一の /19 では .10 と .58 を同時に含められません。/17 は /18 より大きく(粗く)なり、/18 よりビット数が少ないため「最も多い」にはならない。
解法ステップ
- 対象ネットワークの範囲を確認:192.168.10.0/24〜192.168.58.0/24 → 第3オクテットの値が 10 〜 58。
- 代表的な境界の確認:
- /18 のブロック幅は 64(第3オクテットの値 0〜63)。
- /19 のブロック幅は 32(0〜31、32〜63 の2ブロックに分かれる)。
- 範囲が 10〜58 であるため、これを単一ブロックでカバーできる最小のパワー・オブ・ツー個数は 64(= /18)。32(/19)では不足する(10 は 0〜31 ブロック、58 は 32〜63 ブロックにあり、同一 /19 ではない)。
- よって、単一の集約で最もビット数が多い(=最も細かい)ものは /18(選択肢イ)。
(ビット比較の方法)
- 192.168.10.0 の第3オクテット:10 = 00001010
- 192.168.58.0 の第3オクテット:58 = 00111010
- 上位2ビット(00)は共通 → 共通長 = 16(先頭2オクテット) + 2 = 18 ビット → /18
選択肢別の誤答解説
- ア: 192.168.0.0/16
- /16 は確かに範囲を含むが、もっとも粗い(ビット数が最少)選択。問題は「ビット数が最も多くなる(=最も細かい)」ものを問うているため不適。
- イ: 192.168.0.0/18
- 正答。/18 は 0〜63 をカバーし、.10〜.58 を単一ブロックで包含するため、与えられた選択肢の中で最もビット数が多く(最も細かく)集約できる。
- ウ: 192.168.0.0/17
- /17(0〜127 をカバー)は範囲を含むが、/18 より粗い(ビット数が少ない)ので、「最も多くなる」選択肢ではない。問題文の解答欄に ウ とある場合はキー誤りである。
- エ: 192.168.0.0/19
- /19 は 0〜31 または 32〜63 のブロック単位。192.168.10.0 は 0〜31 側、192.168.58.0 は 32〜63 側にあり、単一の /19 では両者をカバーできないため不適。
よくある誤解
- 範囲内の最小値と最大値の第3オクテットだけを見て「MSBが1つしか同じ」など誤判定する。必ずビットごとに上位から比較して共通ビット長を決めること。
- 単一のサマリ(集約)にしなければならないとき、サマリの大きさは 2 の累乗単位(/18, /17 …)で考える。まとまった個数(ここでは49個)を収める最小のパワー・オブ・ツーが何個かを検討すること。
- 「含められる」=「許容」だが、問われているのが「最もビット数が多い(最も細かい)集約」である点を見落とすと、/17 や /16 を誤って選ぶ。
補足コラム
- 集約(サマリ)を1つのCIDRで表す場合、含める/24の個数が49(10〜58 は 58−10+1 = 49)。1つのCIDRブロックは2^k個の/24を含む(k = 6 → 64 個 = /18)。したがって最小の単一CIDRは64個を含む /18 になります。
- 複数のCIDRで最小個数に分割したい場合は、たとえば 49 個を /18 (64) にせず、/19(32)+/20(16)+/24(1)などの組合せで正確に表現することも可能(まとめのアルゴリズムは「CIDR aggregation」や「range to CIDR」アルゴリズム参照)。
簡単なスクリプト例(範囲を最小の単一CIDRで覆えるかの確認):
import ipaddress
start = ipaddress.IPv4Network('192.168.10.0/24').network_address
end = ipaddress.IPv4Network('192.168.58.0/24').network_address + 0 # ネットワークアドレス
# 最小・最大を含むプレフィックスの計算(ここでは単純に目で確認した /18 が該当)
print(ipaddress.ip_network('192.168.0.0/18'))
FAQ
Q. なぜ /19 ではダメですか?
A. /19 は第3オクテットを32単位で分けるため、.10(0〜31)と .58(32〜63)は異なる /19 ブロックに属し、単一の /19 では両者を同時に含められません。
A. /19 は第3オクテットを32単位で分けるため、.10(0〜31)と .58(32〜63)は異なる /19 ブロックに属し、単一の /19 では両者を同時に含められません。
Q. 範囲を最小の単一CIDRにするにはどう調べればよいですか?
A. 範囲の最小アドレスと最大アドレスを2進数で並べて先頭から同じビットを数える(共通プレフィックス長を求める)。または、含むアドレス数がどの2^n に収まるかでブロック長を決める方法も有効です。
A. 範囲の最小アドレスと最大アドレスを2進数で並べて先頭から同じビットを数える(共通プレフィックス長を求める)。または、含むアドレス数がどの2^n に収まるかでブロック長を決める方法も有効です。
関連キーワード: IPv4、CIDR、サブネットマスク、経路集約、共通プレフィックス、サマリ化、ビット比較、ネットワークブロック

\ せっかくなら /
ネットワークスペシャリストを
クイズ形式で学習しませんか?
クイズ画面へ遷移する→
すぐに利用可能!

