目次
ICMPとは
ICMP(Internet Control Message Protocol)とは、IPによるエンドツーエンド通信を補佐するためのプロトコルです。
通信の主体はアプリケーションです。アプリケーション間のデータのやり取りができるようにするために、まずは、アプリケーションが動作しているPCやサーバなどとの間の通信ができなければいけません。つまり、エンドツーエンド通信が必要です。
エンドツーエンド通信はIPによって実現していますが、IP自体にきちんとエンドツーエンド通信ができているかどうかを確認する仕組みはありません。とりあえず、IPヘッダを付けてデータを送っているだけです。宛先まで届けばその返事が返ってくるはずですが、宛先まで届けられなかったらいつまでたっても返事が返ってきません。そして、届かなかった理由もわかりません。
そこで、別途、IPによるエンドツーエンド通信が正常にできているかどうかを確認するための機能を盛り込んでいるプロトコルとしてICMPが開発されています。
ICMPの機能
ICMPの主な機能は、以下の2つです。
- エラーレポート
- 診断機能
何らかの理由でIPパケットを破棄したら、破棄した機器がICMPによって破棄したIPパケットの送信元にエラーレポートを送ります。これにより、エンドツーエンド通信ができなかった原因を通知します。
診断機能は、IPのエンドツーエンド通信ができるかどうかの確認です。具体的には、Pingによる通信確認やトレースルートによる通信経路の確認を行います。
ICMPのメッセージは、IPヘッダでカプセル化して転送します。IPヘッダのプロトコル番号1でICMPを表しています。
エラーレポート
到達不能メッセージ
ICMPのエラーレポート機能を実現するメッセージとして、到達不能(unreachable)メッセージがあります。ICMP到達不能メッセージは、何らかの理由でIPパケットを破棄した機器が生成します。「なぜIPパケットを破棄したのか」ということを、元のIPパケットの送信元へ通知します。
ICMP到達不能メッセージで、IPパケットを破棄した原因をコード化して以下の表のように定義しています。
コード | 種類 | 意味 |
---|---|---|
0 | Network Unreachable | ネットワークに到達できない |
1 | Host Unreachable | 特定のホストに到達できない |
2 | Protocol Unreachable | プロトコルを見つけることができない |
3 | Port Unreachable | ポートを使うことができない |
4 | Fragmentation Blocked | フラグメントを行うことができない |
5 | Source Route Failed | ソースルート通りにルーティングできない |
6 | Target Network Unknown | ネットワークを知らない |
7 | Target Host Unknown | ホストを知らない |
8 | Source Host Isolate | 送信元がインターネットと交信できない |
9 | Target Network Prohibited | 送信先ネットワークが拒否している |
10 | Target Host Prohibited | 送信先ホストが拒否している |
11 | Network TOS Problem | 要求したTOSで中継できない |
12 | Host TOS Problem | 要求したTOSで中継できない |
ただし、定義されているだけで実際には使われていないコードもあります。また、ネットワーク機器のベンダによって同じ状況でも違うコードを出していることがあります。あまり厳密に考えずに宛先に送ることができなかったことを知らせるために使われているということを理解していただければよいでしょう。
時間超過メッセージ
ICMP時間超過メッセージは、IPパケットのTTLが0になりIPパケットを破棄したときに生成されるメッセージです。時間超過メッセージは、トレースルートでの通信経路の確認をするときにも利用します。
関連記事
TCP/IP
- TCP/IPの階層
- IP(Internet Protocol) ~データを送り届ける~
- ICMP ~きちんとIPで転送できますか?~
- Ping ~きちんとデータは届きますか?~
- Windows OSのPingコマンド
- トレースルート ~データはどのルータを通っていますか?~
- tracertコマンド(Windows OS)
- ICMPリダイレクト
- トラブルはどこ? ~Pingとトレースルート~
- ARP ~IPアドレスとMACアドレスを対応付け~
- ARPフォーマット
- Gratuitous ARP(GARP)
- ポート番号 ~どのアプリケーションのデータなの?
- TCPの概要
- TCPの動作
- UDPの概要
- アプリケーションのデータが届くまでのまとめ
- DNS ~宛先IPアドレスを求める~
- nslookupコマンド ~DNSの名前解決の確認~
- DHCP ~IPアドレスを自動割り当て~
- Cisco IOS DHCPサーバの設定と確認コマンド
- Ciscoルータ DHCPサーバの設定例
- DHCPリレーエージェント
- DHCPリレーエージェントの設定例[Cisco]
- DHCPサーバ配置のまとめ
- TCP/IPの設定のまとめ
- ipconfigコマンド ~Windows OSのTCP/IP設定を確認~
- Linux(Ubuntu)でのTCP/IP設定の確認コマンド
- Webサイト
- HTMLとCSS ~Webページを作る~
- URL ~Webサイト(Webページ)のアドレス~
- HTTP ~HTMLファイルを転送する~
- Webアプリケーション ~Webブラウザだけあればいい~
- HTTP Cookie
- Webアプリケーションのセッション管理
- Webプロキシサーバ ~Webアクセスを代わりに~
- Webアクセスのまとめ
- 電子メール
- SMTP ~電子メール送信用プロトコル~
- POP3 ~メール受信用プロトコル~
- IMAP4 ~メールサーバ上でメールを管理~
- 電子メールのまとめ
- FTP ~代表的なファイル転送プロトコル~
- TFTP ~簡易的なファイル転送プロトコル~
- Windows10/11のTFTPクライアント
- ネットワークのトラブルの切り分け手順