ICMPの基礎 | 若手エンジニアのブログ

若手エンジニアのブログ

文系出身の若手女子エンジニアによる技術ブログ。
日々の経験や学びをアウトプットするためにブログを書いています。
バックエンド(Java+SpringFramework)を経てインフラエンジニアになりました。
今は育休中につき、本で勉強したことを中心にアウトプットしています。

今回はネットワーク・プロトコルの1つである、ICMPの基礎について書いていきます。

 

もくじ

1.ICMPとは

2.メッセージの種類

3.ICMPのフォーマット

4.ping利用について

5.まとめ

参考文献

 

1.ICMPとは

◎概要

ICMP(Internet Control Message Protocol)は、OSI基本参照モデルのネットワーク層のプロトコルの1つ。

IPプロトコルに含まれるプロトコルで、
IP通信において、エラーの発生やエラー原因調査のために用いられる。

 

◎イメージ例

例えば、IP通信を中継するルーターの出力側パケットの最大長が、

回線によっては小さめに設定されていることがある。

その場合、設定された最大長より大きなサイズのパケットを中継することはできないため、

パケットを分割して(フラグメンテーション)送ることになる。

しかし当該パケットの設定が分割NGとなっていた場合は、どうしようもないので、

エラーとなってパケットがその場で捨てられてしまう。

 

当然、捨てられてしまったら、そのまま放置というわけにもいかない。
送信元に対してエラーを通知し、送信元がパケット再送などに対応できるようにする必要がある。

 

このようなエラー発生を通知する時などに使われるプロトコルが、今回のテーマであるICMPである。

 

 

2.メッセージの種類

ICMPで通知できるエラー等の主なメッセージは、以下の通り。

 

英語名 タイプ 説明
echo reply 0 エコーへの応答。
詳細は4.ping利用についてで解説。
distination unreachable 3 宛先不達でパケット破棄。
宛先不達の主な原因は、宛先IPアドレスが経路表(ルーティングテーブル)に無い、宛先ポート番号に該当ソケットが存在しない、フラグメンテーションが必要なのに禁止されている等。
source quench 4 パケット送信ペースの抑制依頼。
ルーターの能力を超えるパケットが届いたために破棄したことを知らせ、かつ送信元にパケット送信量を抑えるよう求めるメッセージ。
redirect 5 経路変更要求。
自身(ルーター)を介さず次のルーターへ直接パケットを送るよう通知する。
経路表を調べた結果、パケットの出力先ポート=当該パケットの受信ポートだった場合、自身が中継せずとも次のルーターに直接パケットを送ったほうが手っ取り早いので、このようなリダイレクト機能がある。
echo request 8 エコー要求。
この要求を受け取った相手ノードは、echo reply(タイプ0)を返す。詳細は4.ping利用についてで解説。
time exceeded 11 パケット期限切れ。
IPヘッダのTTL(Time To Live)ヘッダで設定されたパケット生存期間を超えた場合にパケットを破棄し、送信元に通知する。
parameter problem 12 パラメータ異常。
IPヘッダ値などに誤りがあった場合にパケットを破棄し、送信元に通知する。

 

 

3.ICMPのフォーマット

ICMPのフォーマットは以下のように決められている。

 

項目(フィールド) 長さ 説明
タイプ 8bit メッセージの種類。
2.メッセージの種類で記載したタイプの値。
コード 8bit メッセージの種類詳細。
チェックサム 16bit エラー検出のためのフィールド。
データ 可変長 データ部分。

 

 

4.ping利用について

ICMPは、エラー通知だけでなく、問い合わせ機能も持っている。

2.メッセージの種類で、タイプ0と8が、それぞれecho reply、echo requestであると書いたが、それらタイプが問い合わせ機能にあたる。

 

ICMPの問い合わせ機能は、エンジニアなら何度もお世話になっているであろう、
pingコマンドに活用されている。

pingコマンドは、状態を確認したいノードに向けて実行し、

ノードの通信状態を確かめ、状態異常の有無を監視する手段として有名である。

 

pingの実行時に、相手先ノードに送られるICMPのタイプは8(echo request)、

その応答として相手先ノードからは、タイプ0(echo reply)のICMPメッセージが返される。

 

相手先ノードから問題なくタイプ0が返されれば正常と考えられ、

逆に応答がないと、何らかの異常が発生したと考えられる。

 

ただし、異常の原因・詳細は別途探る必要がある。
応答なしの理由には、相手先ノードがダウンしている時もあれば、ネットワークに異常があることもある。あくまでも異常検知手段の1つとして考えるべきである。

 

5.まとめ

今回の記事の要点をまとめておく。

 

ICMPはIPプロトコルに含まれるプロトコルで、パケット破棄等のエラー通知の役割を担う。

またその他、問い合わせ機能も持っており、pingコマンドに活用されている。

 

以上!

 

参考文献

※リンクはAmazonです

戸根勤『ネットワークはなぜつながるのか 第2版

ネットワークはなぜつながるのか 第2版