情報処理安全確保支援士 2018年 春期 午前2 問18
問題文
IPv4 において,IPパケットで送られているデータが ICMP メッセージであることを識別できるヘッダ情報はどれか。
選択肢
ア:IPヘッダのプロトコル番号(正解)
イ:MAC ヘッダのイーサタイプ値
ウ:TCP ヘッダのコントロールフラグ
エ:UDP ヘッダの宛先ポート番号
🔒 解説は解答すると表示されます
IPヘッダのプロトコル番号【午前2解説】
正解の理由
IPパケットのヘッダ内にある「Protocol」フィールドが、上位プロトコル(IPのペイロードで何が運ばれているか)を識別します。したがって ICMP を識別する情報は IP ヘッダ側にあり、選択肢の中では ア が正解です。IPv4 ヘッダではこの Protocol フィールドは1バイト長で、ヘッダ先頭から数えて10バイト目(オフセット9)に格納されます。ICMP のプロトコル番号は 1 です(TCPは6、UDPは17)。
解法ステップ
- ICMP が OSI モデルのどの層に属するか確認する(ICMP は IP によって運ばれるネットワーク層の制御プロトコル)。
- 上位プロトコルを示す情報がどのヘッダにあるかを考える(物理/データリンク層のヘッダは「フレームの中身が IP かどうか」程度しかわからない)。
- IPv4 ヘッダの Protocol フィールド(10バイト目、オフセット9)の値を見て、値が 1 なら ICMP と判定する。
選択肢別の誤答解説
- ア IPヘッダのプロトコル番号
正しい。Protocol フィールド(10バイト目=オフセット9)により、IP のペイロードが ICMP/TCP/UDP 等のどれかを判別できる。ICMP はプロトコル番号 1。 - イ MACヘッダのイーサタイプ値
Ethernet の EtherType(フレーム内のフィールド)は「ペイロードが IPv4 か IPv6 か ARP か」を示す(例:0x0800 = IPv4)が、IPv4 の内部で何が運ばれているか(ICMPかTCPか)は分からない。 - ウ TCPヘッダのコントロールフラグ
TCP ヘッダはそもそも TCP セグメントにのみ存在する。データが ICMP であれば TCP ヘッダ自体が存在しないため参照できない。 - エ UDPヘッダの宛先ポート番号
UDP ヘッダは UDP ペイロードにのみ意味を持つ。ICMP は UDP ではないため、宛先ポート番号で判別することはできない。
よくある誤解
- 「EtherType で ICMP を判別できる」
EtherType はネットワーク層プロトコル(IPv4/IPv6/ARP 等)を示すだけで、IP 内部の上位プロトコルは識別できません。 - 「Protocol フィールドの位置はヘッダ先頭付近だが詳細なオフセットを知らなくても良い」
試験やトラブルシューティングでは具体的なオフセット(IPv4では10バイト目=オフセット9)が問われることがあるので、代表的なフィールド位置は覚えておくと有利です。
補足コラム
IPv4 ヘッダの前半フィールド配置(バイト単位、0始まりのオフセットを併記)例:
オフセット 0: Version(4) + IHL(4)
オフセット 1: Type of Service
オフセット 2-3: Total Length
オフセット 4-5: Identification
オフセット 6-7: Flags + Fragment Offset
オフセット 8: Time To Live (TTL)
オフセット 9: Protocol ← ここ(1バイト)
オフセット10-11: Header Checksum
オフセット12-15: Source IP
オフセット16-19: Destination IP
主要プロトコル番号(抜粋):ICMP = 1、TCP = 6、UDP = 17。IPv6 では同等の役割を持つフィールドは「Next Header」です。
簡単な実用コマンド例(パケット解析):
- tcpdump で ICMP を直接表示: sudo tcpdump -n icmp
- 生ダンプで IP ヘッダのバイトを確認: sudo tcpdump -n -s 0 -X icmp
FAQ
Q. IPv6 ではどのフィールドで上位プロトコルを識別するのですか?
A. IPv6 では「Next Header」フィールドが同じ役割を果たします(位置はヘッダ仕様に依存します)。
A. IPv6 では「Next Header」フィールドが同じ役割を果たします(位置はヘッダ仕様に依存します)。
Q. EtherType が 0x0800 のフレームなら必ず ICMP を含むのですか?
A. いいえ。0x0800 は IPv4 を示すだけで、ペイロードが ICMP、TCP、UDP のいずれかを判断するには IPv4 ヘッダの Protocol フィールドを参照する必要があります。
A. いいえ。0x0800 は IPv4 を示すだけで、ペイロードが ICMP、TCP、UDP のいずれかを判断するには IPv4 ヘッダの Protocol フィールドを参照する必要があります。
Q. IP ヘッダ以外で ICMP を識別できる方法は?
A. パケット解析ツール(Wireshark 等)や OS のログは上位プロトコルを解析して表示しますが、プロトコル自体の識別は最終的に IP ヘッダの Protocol(または IPv6 の Next Header)に依存します。
A. パケット解析ツール(Wireshark 等)や OS のログは上位プロトコルを解析して表示しますが、プロトコル自体の識別は最終的に IP ヘッダの Protocol(または IPv6 の Next Header)に依存します。
関連キーワード: IPヘッダ、Protocolフィールド、オフセット9、ICMP、EtherType、Next Header、プロトコル番号、パケット解析

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

