PR

ICMPとは?pingとエラー通知でIP通信を補助する仕組みを解説

ICMP ネットワーク
スポンサーリンク

はじめに

Webサイトへアクセスできないとき、pingを実行すると応答が返ったり、途中のルーターから通信できないことを示す情報が返ったりすることがあります。このように、IP通信の状態を知らせるために使われるのがICMPです。

ICMPは、データそのものを運ぶTCPやUDPとは役割が異なり、IP通信で発生したエラーや制御情報を伝えてIPの動作を補助します。この記事では、ICMPが何を知らせるのか、TypeとCodeでメッセージをどう区別するのか、pingや代表的なエラー通知でどのように使われるのかを解説します。

ICMPとは

ICMP(Internet Control Message Protocol)は、IP通信で発生したエラーや制御情報を伝えるためのプロトコルです。IPv4ではIPヘッダーのProtocolフィールドに1が設定され、ICMPメッセージがIPパケットに格納されて送られます。

IPは宛先までパケットを転送する役割を持ちますが、パケットが必ず届くことや、問題が起きたときに自動で再送することまでは保証しません。ICMPは、宛先へ届けられない場合や途中でTTLが0になった場合などに、その状況を送信元へ通知するために使われます。ICMP自体が失敗したパケットを再送して通信を成功させるわけではありません。

IPの基本的な役割やルーティングについては、「IPとは?ネットワーク層の役割やルーティングを初心者向けに分かりやすく解説」で解説しています。

ICMPはTypeとCodeでメッセージを区別する

ICMPメッセージの先頭にはType、Code、Checksumなどのフィールドがあります。Typeはメッセージの大きな種類を示し、Codeはその種類の中で理由や状態をさらに細かく区別します。TypeやCodeの後ろに続く情報は、メッセージの種類によって異なります。

Type名称主な役割
0Echo ReplyEcho Requestへの応答
3Destination Unreachable宛先へ届けられない理由を通知
5Redirectより適切な経路をホストへ通知
8Echo Request応答を求める
11Time ExceededTTL超過などを通知
12Parameter ProblemIPヘッダーなどの問題を通知

TypeとCodeの番号をすべて暗記するより、ICMPには「問い合わせと応答」と「通信上の問題を知らせるメッセージ」があり、TypeとCodeで内容を区別していると理解することが重要です。

pingで使われるEcho RequestとEcho Reply

pingは、相手へICMP Echo Requestを送り、Echo Replyが返るかを確認する代表的な診断方法です。IPv4のICMPではEcho RequestがType 8、Echo ReplyがType 0です。

たとえば端末Aから端末Bへpingを実行すると、端末AはEcho Requestを端末Bへ送ります。端末Bがその要求を受信してEcho Replyを返し、端末Aが応答を受信すれば、少なくともそのICMPメッセージが往復できたことを確認できます。

ただし、Echo Replyが返らないという結果だけでは原因までは特定できません。pingは「応答が返るか」を確認する手段であり、通信障害の原因を一度に特定する仕組みではありません。

ICMPで通信エラーを知らせる仕組み

ICMPは、IPパケットを転送できなかったときに、その状況を元の送信元へ知らせるためにも使われます。代表的なのがDestination UnreachableとTime Exceededです。

Destination UnreachableはType 3で、宛先へパケットを届けられない場合に使われます。Codeによって理由を区別し、たとえば宛先ポートへ届けられない場合や、IPv4で次のリンクへ転送するためにフラグメント化が必要だが、DFビットが設定されている場合などを表します。

後者はPath MTU Discoveryとも関係します。IPフラグメンテーションやMTUとの関係は、「IPフラグメンテーションとは?MTUとの関係・IPv4とIPv6の違いを解説」で解説しています。

Time ExceededはType 11で、ルーターがパケットを転送する過程でTTLが0になった場合などに使われます。ルーターはそのパケットを破棄し、送信元へTime Exceededを返すことで、途中で転送を継続できなくなったことを知らせます。

重要なのは、ICMPが「通信を必ず成功させる」仕組みではないことです。ICMPは問題の発生や状態を伝える役割を持ち、その情報を受け取った側が次の判断に利用します。

ICMPv6との違い

IPv6では、IPv4向けのICMPとは別にICMPv6を使用します。ICMPv6はIPv6のNext Header値58で識別され、IPv6で必要なエラー通知や診断用メッセージを扱います。

ICMPv6にはIPv4のICMPと似た役割のメッセージがありますが、Type番号や仕様は同一ではありません。また、IPv6のNeighbor DiscoveryもICMPv6を利用します。ここでは「IPv6ではICMPv6がIPの制御情報を担う」と押さえておけば十分です。

IPv6そのものの基本は、「IPv6とは?IPv4との違いと128ビットアドレスの基本を解説」で解説しています。

まとめ

ICMPは、IP通信で発生したエラーや制御情報を伝え、IPの動作を補助するプロトコルです。IPv4ではProtocol番号1で識別され、TypeとCodeによってEcho Request、Echo Reply、Destination Unreachable、Time Exceededなどのメッセージを区別します。

pingではEcho RequestとEcho Replyを使って応答の有無を確認できます。また、パケットを届けられない場合やTTLが0になった場合には、ICMPのエラー通知によって送信元へ状況を知らせます。ICMPはパケットの配送を保証するものではなく、問題や状態を伝えることでIP通信の診断や制御を支える仕組みです。


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