ネットワークの基本

ICMP あいしーえむぴー

ICMPInternet Control Message Protocolpingtracerouteエラー通知
ICMPについて教えて

簡単に言うとこんな感じ!

ネットワークの「状況報告係」みたいなプロトコルだよ。「その宛先には届かないよ」とか「ルーターを越えすぎたから捨てたよ」って知らせてくれるんだ。pingコマンドも実はICMPを使ってるんだよ!


ICMPとは

ICMP(Internet Control Message Protocol)は、IP通信のエラー報告や診断に使われる補助プロトコルです。IPパケットが宛先に届かなかったときや、ネットワーク上で問題が発生したときに、送信側に状況を知らせる役割を担います。

ICMPはIPと同じネットワーク層(OSI第3層)で動作し、IPパケットに内包されて送られます。アプリケーションが直接使うプロトコルではなく、主にネットワーク機器やOS内部で自動的に使われます。

最も身近なICMPの活用例はpingコマンドです。pingは「ICMP Echo Request」を送り、相手が「ICMP Echo Reply」を返すことで、通信経路が生きているかを確認します。またtraceroute(Windowsではtracert)コマンドも、ICMPの「Time Exceeded」メッセージを利用して経路上のルーターを特定します。


主なICMPメッセージの種類

タイプ番号名前用途
0Echo Replypingへの応答
3Destination Unreachable宛先に届かない(ポートなし、ルートなし等)
5Redirectより良い経路への誘導
8Echo Requestping送信
11Time ExceededTTLが0になった(tracerouteで活用)
12Parameter Problemヘッダの不正

歴史と背景

  • 1981年:RFC 792でICMPがIPv4と同時に標準化
  • 1996年:ICMPv6(RFC 2463)がIPv6用として策定。IPv6ではARPの機能もICMPv6に統合
  • 2000年代DDoS攻撃(smurf攻撃等)でICMPが悪用されるようになり、ファイアウォールでの制限が普及
  • 現在:セキュリティのためにICMPをすべてブロックする設定は避けられるようになってきた(pingブロックによるMTU問題等)

pingの動作フロー

PC A ping 送信側 PC B ping 受信側 ICMP Echo Request(タイプ8) ICMP Echo Reply(タイプ0) 往復時間(RTT)を計測 → 通信遅延の確認に利用 ping の動作(ICMP Echo Request/Reply)

ICMPv6との違い

IPv6ではICMPv6(RFC 4443)が使われます。IPv4のICMPより役割が拡張されており、NDP(近隣探索プロトコル)の機能も含まれています。IPv4でARPが担っていたMACアドレス解決も、IPv6ではICMPv6が担当します。


関連する規格・RFC

規格・RFC番号内容
RFC 792ICMP(IPv4用)
RFC 4443ICMPv6(IPv6用)
RFC 4890IPv6ネットワークにおけるICMPv6のフィルタリングガイドライン

関連用語

  • IP — ICMPが組み込まれて動作する下位プロトコル
  • ARP — IPv4でMACアドレスを解決するプロトコル
  • MTU — ICMPの「Fragmentation Needed」メッセージと深く関連
  • NDP(近隣探索) — IPv6でICMPv6を使う近隣探索プロトコル