情報処理安全確保支援士 2012年 秋期 午前2 問19
問題文
2台のPCをIPv6ネットワークに接続するとき2台ともプレフィックスが2001:db8:100:1000::/56のIPv6サブネットに入るようになるIPアドレスの組合せはどれか。

選択肢
ア:
イ:
ウ:(正解)
エ:
🔒 解説は解答すると表示されます
IPv6プレフィックス判定【午前2解説】
正解の理由
与えられたプレフィックスは で、これは最初の ビットが固定されることを意味します。16ビットごとのヘクステット(欄)で考えると、最初の3ヘクステット(2001:db8:100)は完全に固定され、4番目のヘクステットの上位8ビットが固定されます。4番目ヘクステットの上位8ビットが (= 0x1000 の上位8ビット)なので、4番目ヘクステットは範囲 から まで変化します。つまりこのサブネットのIPv6アドレス範囲は
開始: 2001:db8:100:1000:0000:0000:0000:0000
終了: 2001:db8:100:10ff:ffff:ffff:ffff:ffff
終了: 2001:db8:100:10ff:ffff:ffff:ffff:ffff
となります。選択肢ウの両アドレス(2001:db8:100:1010::aa:bb と 2001:db8:100:1020::cc:dd)はいずれも4番目ヘクステットが , とこの範囲内にあるため、両方とも同一の サブネットに入ります。したがって選択肢ウが正解です。
解法ステップ
- プレフィックス長 の意味を確認する。 ビット(先頭3ヘクステット)+さらに ビット(4番目ヘクステットの上位8ビット)が固定される。
- 固定された4番目ヘクステット上位8ビットの値から、4番目ヘクステットの変化範囲を求める。今回は ~ 。
- 各候補アドレスの4番目ヘクステットの値を読み取り、上記範囲に入るか比較する。
- 両方のアドレスが範囲内であればその選択肢が正解。
選択肢別の誤答解説
- ア:2001:db8:100::aa:bb は省略表記を展開すると4番目ヘクステットが になる(= 2001:db8:100:0:...)。 は ~ の範囲外なのでサブネットに含まれない。よってアは不適。
- イ:1台目は 2001:db8:100:1000::aa:bb(4番目 )で範囲内だが、2台目 2001:db8:100:2000::cc:dd(4番目 )は範囲外。両方が同一サブネットにいる条件を満たさない。
- ウ:1台目 2001:db8:100:1010::aa:bb(4番目 )、2台目 2001:db8:100:1020::cc:dd(4番目 )ともに ~ の範囲内のため、両者とも同一サブネットに入る(正解)。
- エ:2001:db8:100:1100::...(4番目 )は より大きく範囲外。2001:db8:100:1200::...()も同様に範囲外であるため不適。
よくある誤解
- /56 を /48 や /64 と混同してしまう:/48 なら4番目ヘクステット全体が可変、/64 なら下位64ビットがホスト部。境界ビット位置を取り違えると誤判定する。
- 省略記法(::)の展開を誤る:2001:db8:100::aa:bb は 2001:db8:100:0:0:0:aa:bb と解釈され、4番目ヘクステットは 0x0000 である点を忘れがち。
- 16進(hex)と10進の混同:ヘクステットは16進で表記されるため、範囲比較も16進で行うと分かりやすい。
補足コラム
一般にプレフィックス のアドレス範囲は「開始 = プレフィックス & マスク」「終了 = プレフィックス | ビット反転マスク」で求められます。 の場合、マスクは先頭56ビットが1、残りが0です。ビット演算のイメージは次のとおりです。
- マスク(簡略): 11111111.11111111.11111111.11111111.11111111.00000000...(ビット列)
- 開始 = 2001:db8:100:1000:...:...:...:...(下位はすべて0)
- 終了 = 2001:db8:100:10ff:ffff:ffff:ffff:ffff
簡単な確認用コード(Python)例:
import ipaddress
net = ipaddress.IPv6Network("2001:db8:100:1000::/56")
addrs = ["2001:db8:100:1010::aa:bb", "2001:db8:100:1020::cc:dd"]
print(net.network_address, net.broadcast_address) # 開始と終了
for a in addrs:
print(a, ipaddress.IPv6Address(a) in net)
FAQ
Q. なぜ終了アドレスが 2001:db8:100:10ff:ffff:ffff:ffff:ffff なのですか?
A. /56 は4番目ヘクステットの上位8ビットを固定するため、4番目ヘクステットの下位8ビットが から まで変化可能です。したがって4番目は ~ になり、以降のヘクステットはすべて で最大値を表します。
A. /56 は4番目ヘクステットの上位8ビットを固定するため、4番目ヘクステットの下位8ビットが から まで変化可能です。したがって4番目は ~ になり、以降のヘクステットはすべて で最大値を表します。
Q. 省略表記での確認方法は?
A. 省略表記(::)は不足している0列を埋めて完全展開してから、該当するヘクステットの値を比較すると安全です。
A. 省略表記(::)は不足している0列を埋めて完全展開してから、該当するヘクステットの値を比較すると安全です。
関連キーワード: IPv6、サブネット、プレフィックス長、ヘクステット、アドレス範囲、ビットマスク、アドレス展開

\ せっかくなら /
情報処理安全確保支援士を
クイズ形式で学習しませんか?
クイズ画面へ遷移する→
すぐに利用可能!

