ICMPとは?pingやtracerouteが大切な理由

こんにちは。

今回は

「ICMP」

について解説していきます。

 

ICMPはあまり聞きなれない言葉かもしれません。

しかし、ネットワークにおいて非常に重要な「ping」、「traceroute」というコマンドを可能にするプロトコルです。

それらのコマンドを可能にするICMP、ネットワーク管理において重要なコマンドであるping、tracerouteがどんなものなのか、学んでいきましょう。

1.ICMPとは

 ICMPとは、

Internet Control Message Protocol

の略であり、

  • IPプロトコルのエラー通知
  • 制御メッセージの転送

をするためのプロトコルです。

 

そして、ICMPはネットワーク管理を行うために、なくてはならないプロトコルです。

そのことについて順を追って説明しましょう。

 

まず、ネットワークを構築した時に重要なのは、

  • 通信状態のチェック
  • 異常が発生したときの障害対応(トラブルシューティング)

です。

しかし、IPでネットワークを構築した場合、IP自体には、

  • パケットが正常に宛先ホストに到達したかを確認する
  • パケットが破棄された時に何が問題なのか通知する

といった機能はありません。

なぜなら、IPはベストエフォート型のプロトコルなので、最大限努力するけど、パケットが届くかどうかは保証されないからです。

「送ったら送りっぱなし」

です。

そんなんじゃ、通信状態のチェックや、異常が発生したときの障害対応はできません。

それでは困ります。

そんなときに、通信状態のチェックなどの機能を提供するのが「ICMP」です。

 

ICMPにより、IP通信におけるエラー通知や、IPネットワークに関する情報を知ることができ、

  • ネットワークの通信状態は正常か
  • ネットワーク機器に異常がないか

などを確認することができます。

 

ICMPを使ってネットワークの状態を確認する方法は、「4.ping」、「5.traceroute」で説明します。

2.ICMPのフォーマット

次は、ICMPでやり取りされるICMPメッセージの中身を見ていきましょう。

ICMPメッセージのフォーマットは図の通りです。

ICMP「メッセージ」と言いましたが、インターネット層のプロトコルなのに、なぜ「データグラム」や「パケット」と呼ばないのでしょうか?

それは、ICMPの通信を行う時には、IPも同時に利用しているため、IPの上位プロトコルとして処理されるからです。

(といってもトランスポート層で機能するわけではありません。あくまでインターネット層のプロトコルです。)

なので、ICMPメッセージは図のようにIPヘッダが付加され、IPパケットのデータ部分として処理されます。

それでは、ICMPメッセージの中身についてそれぞれ詳しくみていきましょう。

2-1.タイプ(8ビット)

まずは「タイプ」です。

タイプには、ICMPメッセージの機能タイプの値が入ります。

機能タイプとは、ICMPメッセージの種類のことです。

この「タイプ」の値によって、そのICMPメッセージがどういった役割を持ったメッセージなのかを表します。

例えば、下の表は代表的なICMPメッセージのタイプですが、

「タイプ0」のICMPメッセージは「エコー応答」という役割を持ったメッセージになります。

また、「タイプ8」のICMPメッセージは「エコー要求」という役割を持ったメッセージになります。

 

例えば、「タイプ8:エコー要求」のICMPメッセージが相手のホストから届いたら、「タイプ0:エコー応答」のICMPメッセージを相手に返します。

このように、タイプの値によってICMPメッセージがどのようなメッセージなのかを特定するのです。

それぞれの値の詳しい説明は後ほどします。

2-2.コード(8ビット)

次に「コード」です。

タイプで、ICMPメッセージの種類を示していますが、各タイプをコードによってさらに分類しています。

それについては後ほど説明します。

2-3.チェックサム(16ビット)

「チェックサム」は、エラーがないかどうかを判断するための値です。

2-4.データ(可変長)

「データ」は、タイプによって長さが違います。

3.代表的なICMPメッセージ

2−1.タイプ」で、ICMPメッセージの主なタイプの表を見ていただきましたが、それぞれのタイプを詳しく見てみましょう。

3−1.タイプ0、8(エコーメッセージ)

「2−1.タイプ」の表で、

  • タイプ0:Echo Reply(エコー応答)
  • タイプ8:Echo Request(エコー要求)

がありましたが、この二つのタイプのメッセージを使って、通信したいホストにIPパケットが到達するがどうかの確認を行います。

 

その流れとしては、

宛先ホストに対して、エコー要求メッセージ(タイプ8:Echo Request)を送信 

宛先ホストからエコー応答メッセージ(タイプ0:Echo Reply)が返って来れば、宛先ホストにIPパケットが到達するということが確認できる。

といったものです。

3-2.タイプ3(到達不能メッセージ)

「2−1.タイプ」の表で、

  • タイプ3:Destination Unreachable(宛先到達不能)

がありましたが、このタイプのメッセージは、IPパケットを宛先ホストに送信できなかった場合に、IPルータから送信ホストに対して送られるものです。

このメッセージでは、宛先ホストにパケットを送信できなかった理由をコードによって分類しています。

コードの意味が書いてありますが、コードの名前を訳しただけです。

ICMPの到達不能メッセージにより、なぜ宛先ホストにパケットが送信できなかったのかを知ることができます。

3−3.タイプ11(時間超過メッセージ)

「2−1.タイプ」の表で、

  • タイプ11:Time Exceeded(時間超過)

がありましたが、このタイプのメッセージは、TTLが0となりパケットが破棄された時に、IPルータから送信元ホストに送られるものです。

TTLとは、IPの記事で解説しましたが、IPパケットの生存時間(Time To Live)のことです。

IP に関する内容は以下の記事をご覧ください。

IPとは?IPプロトコルを徹底解説

TTLは、IPパケットがルータを通過するたびに減らされる値です。

ゲームで言ったらのライフみたいなものでしょうか。

ルータを1つ通過するたびに、TTLが1つ減らされます。そして、TTLが0となったら、そのIPパケットは破棄されてしまいます。

そのときに、ルータから送信元ホストに対して、送られるICMPメッセージがタイプ11の時間超過メッセージです。

4.ping

ここからは、ICMPを利用してネットワークの通信状況を確認するためのコマンドについて解説します。

まずは「ping」です。

pingとは、特定のホストとIP通信ができているかを確認するためのコマンドです。「ピング」と読みます。

pingは、「タイプ0:Echo Reply」と「タイプ8:Echo Request」を使用して通信状態を確認します。

流れとしては以下の通りです。

  1. 目的のホスト(IPアドレス)に対して、エコー要求メッセージ(タイプ8)を送信
  2. 相手からエコー応答メッセージ(タイプ0)が帰って来れば、目的のホストと通信できていると判断
  3. これを4回繰り返す

実際にコマンドを入力するときには、

「ping△(IPアドレス)」(△は半角スペース)

と入力します。

5.traceroute

次に「traceroute」です。

 tracerouteとは、送信元ホストから宛先ホストまでの間の経路情報を調べるためのコマンドです。「トレースルート」と読みます。

tracerouteはICMPの時間超過メッセージ(タイプ11)を使用します。

時間超過メッセージで出てきたTTLの値を1から順番に増やしていくことで、経路情報を調べます。

具体的な流れは以下の通りです。

  1. 送信元ホストは、TTLの値を1にしてエコー要求メッセージ(タイプ8)を送信
  2. エコー要求メッセージを受け取った1個目のルータは、TTLを0にしてパケットを破棄。時間超過メッセージ(タイプ11)を送信元ホストへ送信
  3. 送信元ホストは、TTLの値を2にしてエコー要求メッセージを送信
  4. エコー要求メッセージを受け取った2個目のルータは、TTLを0にしてパケットを破棄。時間超過メッセージを送信元ホストへ送信
  5. 送信元ホストは、TTLの値を2にしてエコー要求メッセージを送信
  6. エコー要求メッセージを受け取った3個目のルータは、TTLを0にしてパケットを破棄。時間超過メッセージを送信元ホストへ送信

といった具合に、TTLの値を一つずつ大きくして、時間超過メッセージを受け取ることで、宛先ホストまでに通過するルータがわかります。

実際にコマンドを入力するときは、

Windowsの場合

「tracert△(IPアドレス)」

Macintoshの場合

「traceroute△(IPアドレス)」

と入力します。

6.まとめ

いかがでしたでしょうか?

ping、tracerouteはネットワーク管理行う上で、重要なコマンドです。

それらのコマンドで使用されるICMPメッセージについて、お分りいただけたでしょうか。ぜひ何度も読んで自分の知識にしてください。

また、インターネット層で機能する他のプロトコルについても、下の記事を参考にしてください。

IPとは?IPプロトコルを徹底解説 いまさら聞けない!IPアドレスとサブネットマスク ARPとは?アドレス解決プロトコルのすべて

それでは、最後まで読んでくださり本当にありがとうございました。

 

この分野も記事を書いてほしい!
ここがわらかないから教えてほしい
など、ブログを読んで疑問に思ったこと・気づいたことなど、何でもメールしてください!

  お問い合わせはこちら