縁の下の力持ち的にIPを助けている

Internet Control Message Protocol

IPレベルの通信を確認したり、いろいろなエラーを通知したりと、IPネットワークにおいてなくてはならない非常に重要な役割を担っている。

その名の通り、「インターネット(Internet)を制御(Control)するメッセージ(Message)をやりとりするプロトコル(Protocol)」

どんな端末であってもIPとICMPは必ずセットで実装されている。

ICMPのパケットフォーマット

プロトコル番号「1」のIPパケット。

通信結果を返したり、エラーの内容をちょっと返したりするだけなのでパケットフォーマットはシンプル。

図:ICMPのパケットフォーマット

フィールドの中で最も重要なのが、メッセージの最初にある「タイプ」と「コード」。この2つの組み合わせによってIPレベルにおいてどんなことが起きているかざっくり知ることができる。

図:タイプとコードの組み合わせ 

いろいろなICMPタイプとコード

ICMPはこれしかないと言い切ってしまってもよいくらいタイプとコードありき。この2つに着目すると理解を深めやすい。

Echo Request / Echo Reply

IPレベルの通信状態を確認するときに使用されるICMPパケット

pingコマンドを実行すると、指定したIPアドレスに対してタイプ「8」、コード「0」のEcho Requestが送信される。Echo Requestを受け取った端末はその応答として、タイプが「0」、コードが「0」のEcho Replyを返す。

図:Echo RequestとEcho Reply

Destination Unreachable

ルーターが異なるネットワークにいる端末に対して、IPパケットを転送する動作のことを「ルーティング」という。ルーターが宛先端末(宛先IPアドレス)にIPパケットをルーティングすることができなかったとき、エラーを通知するICMPパケットが「Destination Unreachable(宛先到達不可)」。IPパケットをルーティングできなかったルーターは、そのIPパケットを破棄するとともに、タイプが「3」のDestination Unreachableを送信元端末に返す。なお、コードは破棄した理由によって異なる。

図:Destination Unreachable

Time-to-live Exceeded

IPパケットのTTL(Time To Live)が「0」になって破棄したとき、それを送信元端末に通知するパケット。

通信経路を確認する「tracerouteコマンド」で使用される。tracerouteコマンドは、TTLを1から始めて、1つずつ増やしたIPパケットを送信することによって、どのような経路を通って宛先IPアドレスまで到達しているのかを確認する。

図:tracerouteで通信経路を確認する


Comments

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です