はい、承知いたしました。ICMPプロトコルについての詳細な入門記事を作成します。約5000語の要件を満たすため、各項目について深く掘り下げ、具体的な例や仕組みを網羅的に解説します。記事の内容を直接ここに表示します。
【入門】ICMPプロトコルとは?仕組みと役割を徹底解説
インターネットを利用する上で欠かせないプロトコルは数多く存在しますが、その中でも「ネットワークの健康診断役」とも言えるのがICMP(Internet Control Message Protocol)プロトコルです。TCPやUDPのようにアプリケーション間でデータを送受信するプロトコルとは異なり、ICMPはIPネットワーク自体の運用や管理をサポートするための重要な役割を担っています。
しかし、その重要性にもかかわらず、ICMPはTCPやUDPほど一般的に知られていないかもしれません。本記事では、ネットワーク初心者の方でも理解できるよう、ICMPプロトコルの基本的な仕組みから詳細な役割、具体的な利用例、さらにはセキュリティ上の考慮事項までを、約5000語というボリュームで徹底的に解説します。
この記事を読めば、ICMPがどのように機能し、なぜインターネット上で不可欠な存在であるのかを深く理解できるでしょう。
1. ICMPとは何か? – ネットワークの舞台裏を支えるプロトコル
1.1. IPプロトコルの課題とICMPの必要性
まず、ICMPがなぜ必要なのかを理解するために、基盤となるIP(Internet Protocol)プロトコルの性質を見てみましょう。IPは、インターネット上のコンピュータ間でデータをパケット単位でやり取りするためのプロトコルです。IPパケットには送信元IPアドレスと宛先IPアドレスが含まれており、ルーターなどのネットワーク機器がこの情報をもとにパケットを目的地まで転送します。
IPはコネクションレス型のプロトコルです。これは、データを送信する前に受信側との間に仮想的な接続を確立しないことを意味します。また、IPはベストエフォート型のプロトコルでもあります。これは「最大限の努力はするが、到達を保証しない」ということです。IPパケットは、ネットワークの混雑や機器の故障、経路情報の不備など、様々な理由で途中で失われたり、間違った宛先に届いたり、順番が入れ替わったりする可能性があります。
上位層のプロトコル(例えばTCP)は、これらのIPの信頼性の低さを補うための仕組み(再送制御や順序制御など)を持っています。しかし、ネットワークの基盤であるIP自体に問題が発生した場合、それをIPレイヤーで検知し、送信元にフィードバックしたり、ネットワーク機器が適切な制御を行ったりする仕組みが必要です。
ここで登場するのがICMPです。ICMPは、IPネットワーク上でのエラー通知や運用情報通知を行うために設計されました。IPパケットの転送中に発生した問題(例: 宛先に到達できない、パケットの生存時間が尽きた)や、ネットワークの状態に関する情報(例: より効率的な経路がある)などを、元の送信元ホストやルーターに知らせる役割を担います。
ICMPは、TCPやUDPのようにユーザーデータ(アプリケーションデータ)を運ぶためのプロトコルではありません。あくまでIPプロトコルを制御 (Control) し、管理 (Management) するためのメッセージ (Message) を運ぶプロトコルなのです。
1.2. TCP/IPモデルにおけるICMPの位置づけ
ネットワークプロトコルは、それぞれが特定の機能や役割を分担するために階層化されています。最も一般的なモデルの一つであるTCP/IPモデルでは、プロトコルは通常4つの層に分類されます(ネットワークアクセス層、インターネット層、トランスポート層、アプリケーション層)。
ICMPは、IPプロトコルと同じインターネット層(またはネットワーク層)に位置します。これは非常に重要なポイントです。なぜなら、ICMPメッセージはIPパケットとしてカプセル化されてネットワーク上を流れるからです。つまり、ICMPメッセージ自体もIPヘッダーを持ち、その宛先IPアドレスに基づいてルーティングされます。
- アプリケーション層: HTTP, FTP, SMTP, DNSなど(ユーザーデータの生成/消費)
- トランスポート層: TCP, UDPなど(プロセス間通信、信頼性やフロー制御の提供)
- インターネット層: IP, ICMP, ARP, RARPなど(ホスト間通信、パケットのアドレッシングとルーティング)
- ネットワークアクセス層: Ethernet, Wi-Fi, PPPなど(物理的なメディアでのフレーム転送)
ICMPはインターネット層に位置することで、IPプロトコルが直面する様々な問題や状況をIPレイヤー自体で検知し、それに対するフィードバックを同じIPレイヤーの仕組みを使って行うことができます。これは、上位層のプロトコル(TCP/UDP)がIPの失敗を検知するよりも迅速かつ効率的な場合があります。
1.3. ICMPの基本的な役割のまとめ
ICMPの基本的な役割は以下の2点に集約できます。
- エラー通知 (Error Reporting): IPパケットの処理中に発生した問題(宛先到達不能、生存時間切れ、パラメータエラーなど)を送信元に通知します。
- 情報提供・診断 (Information Query and Diagnostics): ネットワークの状態に関する情報(ホストの到達可能性、ラウンドトリップタイムなど)を取得したり、ネットワーク経路を診断したりするために使用されます。
これらの役割を通じて、ICMPはネットワーク管理者やユーザーがネットワークの問題を特定し、トラブルシューティングを行う上で非常に強力なツールとなります。また、一部のICMPメッセージは、ネットワーク機器(ルーターなど)がホストに対してより効率的な経路を教えるなどの制御目的でも使用されます。
2. ICMPメッセージの構造と形式
ICMPメッセージはIPパケットのデータ部分に格納されて送信されます。すべてのICMPメッセージに共通するヘッダーと、メッセージの種類によって異なるデータ部分から構成されます。
2.1. ICMPv4ヘッダーの基本構造
ICMPv4 (IPv4用のICMP) メッセージの基本ヘッダーは非常にシンプルで、以下の3つのフィールドから構成されます。
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Type | Code | Checksum |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Rest of Header |
| (Variable based on Type) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Data |
| (Original IP Header + first 8 bytes of Data) |
| (for Error Messages) |
| (Variable for Query Messages) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
- Type (8 bits): ICMPメッセージの種類を示します。このフィールドの値によって、そのICMPメッセージがエラー通知なのか、情報要求/応答なのか、あるいは他の種類のメッセージなのかが識別されます。例えば、「3」は宛先到達不能、「8」はエコー要求、「0」はエコー応答を示します。
- Code (8 bits): Typeフィールドで示されるメッセージの種類の中で、さらに詳細な理由や情報を指定します。例えば、Typeが「3」(宛先到達不能)の場合、Codeが「0」ならネットワーク到達不能、「1」ならホスト到達不能、「3」ならポート到達不能、といった具体的な理由を示します。
- Checksum (16 bits): ICMPメッセージ全体(ヘッダーとデータ部分)のエラーを検出するためのチェックサムです。メッセージに含まれるすべての16ビットワードの1の補数和の1の補数として計算されます。これにより、転送中にビットエラーが発生していないかを確認できます。受信側は同じ計算を行い、チェックサムが一致しない場合はメッセージを破棄します。
- Rest of Header (Variable): メッセージのTypeとCodeに応じて、追加の情報が含まれる場合があります。例えば、エコー要求/応答メッセージでは識別子とシーケンス番号が含まれます。宛先到達不能メッセージでは、未使用としてゼロが格納されるフィールドが含まれる場合があります。
- Data (Variable): メッセージの種類によって格納されるデータが異なります。
- エラーメッセージ: エラーの原因となった元のIPパケットのヘッダーと、そのIPパケットの最初の8バイトのデータが含まれます。これは、エラーを受信した送信元ホストが、どの通信(どのTCP/UDPセッションなど)でエラーが発生したのかを特定できるようにするためです。
- 情報要求/応答メッセージ: 要求/応答に関連するデータ(例えば、エコー要求/応答の際に送信元が含めた任意のデータ)が含まれます。
この構造はICMPv4の基本であり、各メッセージタイプでRest of HeaderとData部分の具体的な内容は異なります。
2.2. ICMPv6ヘッダーの基本構造
IPv6におけるICMPはICMPv6 (ICMP for IPv6) と呼ばれ、RFC 4443で定義されています。基本的な構造はICMPv4と同様ですが、IPv6の新しい機能や拡張に対応するため、いくつかの違いと追加のメッセージタイプがあります。
ICMPv6ヘッダーもType、Code、Checksumフィールドを持ちますが、サイズや内容はICMPv4とは異なります。また、Rest of HeaderやData部分もメッセージタイプに応じて定義されます。
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Type | Code | Checksum |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| |
| Message Body |
| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
- Type (8 bits): ICMPv6メッセージの種類を示します。ICMPv4とは値の範囲と意味が異なります。Typeの値は、エラーメッセージ (0-127) と情報メッセージ (128-255) に大別されます。
- Code (8 bits): Typeフィールドで示されるメッセージの種類の中で、さらに詳細な理由や情報を指定します。
- Checksum (16 bits): ICMPv6のチェックサム計算には、ICMPv6メッセージ自体に加えて、IPv6擬似ヘッダーも使用されます。これはTCPやUDPのチェックサム計算と同様の方法であり、IPv6ヘッダーに含まれる送信元・宛先アドレスや次ヘッダータイプ、ペイロード長などを計算に含めることで、より堅牢なチェックサムを実現しています。
- Message Body (Variable): メッセージのTypeとCodeに応じて、追加の情報やデータが含まれます。エラーメッセージの場合、ICMPv4と同様にエラーの原因となったIPv6パケットの(できるだけ多くの)情報が含まれます。情報メッセージの場合、様々な追加情報が含まれます(例: ルーター広告メッセージにはプレフィックス情報などが含まれる)。
ICMPv6は、IPv6ネットワークの運用に不可欠な近隣探索プロトコル (NDP) やパスMTU探索などの機能も担っており、ICMPv4よりもその役割の重要性が増しています。
3. 主要なICMPv4メッセージタイプと役割
ここでは、ICMPv4における主要なメッセージタイプと、それぞれが果たす役割について詳しく解説します。TypeとCodeの値はRFC 792で定義されています。
3.1. エラー報告メッセージ (Error Reporting Messages)
3.1.1. 宛先到達不能 (Destination Unreachable) – Type 3
送信元ホストが、特定の宛先またはサービスにパケットを届けられない場合に、ルーターやホストが送信元に返送するメッセージです。Codeフィールドによって、到達不能の具体的な理由が示されます。
- Code 0: Network Unreachable
- 理由: ルーターが、パケットの宛先ネットワークへの経路を知らない場合。
- 例: 自ネットワークから見て、存在しないプライベートIPアドレス範囲や、ルーティングテーブルに登録されていないリモートネットワークへパケットを送出した場合。
- 影響: 送信元ホストは、その宛先ネットワークへの通信が不可能であることを知ります。
- Code 1: Host Unreachable
- 理由: ルーターは宛先ネットワークへの経路を知っているが、そのネットワーク内の宛先ホストに到達できない場合(例: ARP要求に対する応答がない、ホストがダウンしている)。
- 例: ルーターから見た隣接ネットワークに存在するホストがオフラインになっている場合。
- 影響: 送信元ホストは、特定の宛先ホストへの通信が不可能であることを知ります。
- Code 2: Protocol Unreachable
- 理由: 宛先ホストはパケットを受信したが、IPヘッダーのProtocolフィールドで指定されたプロトコル(例: TCP, UDPなど)をサポートしていない場合。
- 例: 存在しないプロトコル番号を指定したパケットを送信した場合。
- 影響: 送信元アプリケーションはそのプロトコルでの通信ができないことを知ります。
- Code 3: Port Unreachable
- 理由: 宛先ホストはパケットを受信したが、トランスポート層ヘッダー(TCP/UDP)で指定された宛先ポート番号で待ち受けているアプリケーションプロセスがない場合。
- 例: サーバーで稼働していないポート番号に対してTCP SYNパケットやUDPパケットを送信した場合。
- 影響: 送信元アプリケーションはそのサービスに接続できないことを知ります。PingのTraceroute機能でよく利用されます(UDPパケットを送信し、最終ホストでこのエラーが返ってくることを利用して到達を判断)。
- Code 4: Fragmentation Needed and Don’t Fragment was Set
- 理由: ルーターが受信したIPパケットを、次のホップのネットワークのMTU (Maximum Transmission Unit) より小さくするためにフラグメント化する必要があるが、パケットのIPヘッダーにDon’t Fragment (DF) ビットがセットされていた場合。
- 例: 送信元がMTUより大きなパケットをDFビット付きで送信し、経路上にそのパケットサイズより小さいMTUのリンクが存在する場合。
- 影響: 送信元はパケットをフラグメント化できないことを知り、おそらくより小さいMTUで再送を試みます。このメカニズムはPath MTU Discovery (PMTUD) に利用されます。このメッセージには、次のホップのMTU値が含まれる場合があります(RFC 1191で拡張されたCode 4)。
- Code 5: Source Route Failed
- 理由: IPヘッダーのSource Routeオプションで指定された経路上に問題がある場合。
- 例: Source Routeオプションで指定されたルーターが存在しない、またはその経路が使用できない場合。(Source Routeオプションはセキュリティ上のリスクや効率の問題から現代ではほとんど使用されません)
- 影響: Source Route経由での通信ができないことを通知します。
- Code 6: Destination Network Unknown
- 理由: ルーターが宛先ネットワークへの経路を知らないことを示しますが、Code 0との違いは、ルーティングテーブルに明示的なネットワークエントリーがない場合などに使用されることがあります。より古いRFCや特定の実装で使用されました。
- Code 7: Destination Host Unknown
- 理由: ルーターが宛先ホストへの経路を知らないことを示しますが、Code 1との違いは、特定のホストエントリーがない場合などに使用されることがあります。これも古いRFCや特定の実装で使用されました。
- Code 9: Communication with Destination Network is Administratively Prohibited
- 理由: ファイアウォールやアクセス制御リスト (ACL) により、宛先ネットワークへの通信が管理ポリシーによって拒否された場合。
- 例: ネットワーク管理者によって設定されたファイアウォールルールにより、特定のネットワークへのトラフィックがブロックされている場合。
- 影響: 管理上の理由で通信が拒否されていることを送信元に通知します。
- Code 10: Communication with Destination Host is Administratively Prohibited
- 理由: ファイアウォールやACLにより、特定の宛先ホストへの通信が管理ポリシーによって拒否された場合。
- 例: 特定のホストとの間で設定されたファイアウォールルールにより、トラフィックがブロックされている場合。
- 影響: 管理上の理由で特定のホストへの通信が拒否されていることを送信元に通知します。
- Code 11: Network Unreachable for Type of Service
- 理由: IPヘッダーのType of Service (TOS) フィールドで指定されたサービスタイプを持つ宛先ネットワークへの経路が存在しない場合。
- 例: TOSに基づいたルーティングが行われているネットワークで、指定されたTOSに対応する経路がない場合。(TOSフィールドは現在DSCP (Differentiated Services Code Point) としてQoSでより一般的に使用されます)
- Code 12: Host Unreachable for Type of Service
- 理由: IPヘッダーのTOSフィールドで指定されたサービスタイプを持つ宛先ホストへの経路が存在しない場合。
- Code 13: Communication Administratively Prohibited by Filtering
- 理由: ファイアウォールによるパケットフィルタリングによって通信が拒否された場合。(Code 9, 10よりも一般的な理由を示す場合に使用されることがあります)
- Code 14: Host Precedence Violation
- 理由: IPヘッダーのPrecedenceフィールド(現在はDSCPの一部として使用)で指定された優先度レベルが許可されない場合。
- Code 15: Precedence cutoff in effect
- 理由: 指定されたPrecedenceレベル以下のパケットが破棄されるポリシーが有効になっている場合。
宛先到達不能メッセージは、送信元のアプリケーションやプロトコルスタックに問題を知らせるために非常に重要です。特にCode 3 (Port Unreachable) は、UDPベースのTracerouteやサービス不在の検出に、Code 4 (Fragmentation Needed) はPMTUDに不可欠な役割を果たします。
3.1.2. 生存時間切れ (Time Exceeded) – Type 11
IPパケットの生存時間を示すTTL (Time To Live) フィールドが0になった場合や、フラグメント化されたIPパケットを再構成するためのタイマーがタイムアウトした場合に発生します。
- Code 0: TTL equals 0 during transit
- 理由: IPパケットがルーターを通過するたびにTTLの値は1ずつ減少します。TTLが0になったパケットを受信したルーターは、そのパケットを破棄し、元の送信元にこのメッセージを返送します。これにより、パケットがネットワーク上を無限にループすることを防ぎます。
- 例: ルーティングループが発生している場合、または非常に長い経路を通過している場合。
- 影響: パケットが宛先に到達する前に破棄されたことを送信元に通知します。このメッセージはTraceroute/Tracertコマンドの根幹をなす仕組みです。Tracerouteは意図的にTTLを1から順に増やしながらパケットを送信し、各ホップのルーターから返ってくるType 11 Code 0メッセージを受信することで経路上のルーターを特定します。
- Code 1: Fragment reassembly time exceeded
- 理由: フラグメント化されて送信されたIPパケットの一部が、宛先ホストまたは最終ルーターにすべて揃わず、設定された時間内に再構成できなかった場合。
- 例: ネットワークの混雑により一部のフラグメントが著しく遅延または失われた場合。
- 影響: フラグメントの再構成が失敗したことを送信元に通知します。
生存時間切れメッセージは、パケットが途中で失われた理由(ループや遅延)を特定するのに役立ち、Tracerouteのような診断ツールには不可欠です。
3.1.3. パラメータ問題 (Parameter Problem) – Type 12
IPパケットヘッダーまたはデータ部分に不正な値や問題がある場合に、ルーターやホストが送信元に返送するメッセージです。
- Code 0: Pointer indicates the error
- 理由: IPヘッダー中の特定のフィールドの値が不正であることを示し、どのフィールドが問題かをPointerフィールドで指し示します。
- 例: IPバージョンフィールドが不正、ヘッダー長が不正、チェックサムが不正など。
- 影響: 送信元はパケットヘッダーに不正があることを知ります。
- Code 1: Missing a required option
- 理由: オプションが必要なのにIPヘッダーにオプションが存在しない場合。
- 例: Securityオプションなど、特定の環境で必須とされるオプションがない場合。(現代ではあまり一般的ではありません)
- Code 2: Bad length
- 理由: IPヘッダー長とパケットの実際の長さが一致しない場合、または他の長さ関連のエラー。
パラメータ問題メッセージは、パケット自体の構造や内容に問題がある場合にデバッグ情報を提供します。
3.1.4. 送信元抑止 (Source Quench) – Type 4
ネットワークが輻輳している場合に、ルーターが送信元ホストに対して「もう少しゆっくり送信してほしい」と伝えるために使用されたメッセージです。
- Code 0: Source Quench
- 理由: ルーターのバッファが満杯になりかけている、またはパケットを処理しきれないほどトラフィックが多い場合に、ルーターがパケットを破棄すると同時に送信元にこのメッセージを送り返すという想定のメッセージでした。
- 影響: 送信元ホストは、Source Quenchメッセージを受け取ると、送信レートを落とすことが期待されていました。
しかし、Source Quenchメッセージは、実際にネットワークの輻輳を効果的に解消するメカニズムとしては機能しませんでした。なぜなら、輻輳している状況でさらに制御メッセージ(Source Quench)をネットワークに送り込むことは、かえって輻輳を悪化させる可能性があるからです。また、送信元ホストがこのメッセージを適切に処理する保証もありません。そのため、現在ではSource Quenchメッセージは非推奨 (deprecated) となっており、ほとんど使用されていません。ネットワークの輻輳制御は、主にトランスポート層プロトコル(特にTCPの輻輳制御アルゴリズム)によって行われます。
3.2. 情報要求/応答メッセージ (Information Query/Response Messages)
3.2.1. エコー要求/応答 (Echo Request/Reply) – Type 8 / Type 0
これは最もよく知られているICMPメッセージのペアであり、ネットワーク診断ツールであるPingコマンドで使用されます。
- Type 8: Echo Request (エコー要求)
- 目的: 特定のホストがネットワーク上で到達可能であるか、応答があるかを確認するために送信されます。
- 内容: ICMPヘッダーに加えて、Identifier (識別子) と Sequence Number (シーケンス番号) が含まれます。これにより、要求に対する応答を区別し、パケットの順序や重複を検出できます。また、オプションで任意のデータを含めることができます(Pingコマンドでパケットサイズを指定できるのはこのためです)。
- Type 0: Echo Reply (エコー応答)
- 目的: Echo Requestを受信したホストは、可能であればこのメッセージを送信元に返送します。
- 内容: 受信したEcho RequestメッセージのIdentifier、Sequence Number、およびデータ部分をそのままコピーして返送します。
- 役割: 送信元ホストはEcho Replyを受信することで、宛先ホストが到達可能であり、その間のネットワーク経路が正常であることを確認できます。また、要求を送信してから応答を受信するまでの時間(ラウンドトリップタイム – RTT)を測定することができます。Pingコマンドの出力(応答時間、TTL、パケットロス率など)は、このEcho Request/Replyのやり取りによって得られます。
Pingはネットワークの疎通確認や遅延測定に広く利用される基本的なツールです。
3.2.2. ルーター広告/要請 (Router Advertisement/Solicitation) – Type 9 / Type 10
これらのメッセージは、ホストがローカルネットワーク上のルーターを発見し、デフォルトゲートウェイなどの情報を取得するために使用されました。
- Type 10: Router Solicitation (ルーター要請)
- 目的: ホストがネットワークに接続された際に、周囲のルーターに対して「ルーター広告を送ってください」と要求するために送信されます。通常、ブロードキャストまたは特定のマルチキャストアドレスに送信されます。
- Type 9: Router Advertisement (ルーター広告)
- 目的: ルーターが、ホストに対して自身の存在や、デフォルトゲートウェイとして使用できること、その他のネットワークパラメータ(例: ネットワークアドレス、MTUなど)を知らせるために送信されます。これは、ホストからのRouter Solicitationに応答する場合と、定期的に自身を知らせるために一方的に送信される場合があります。
これらのメッセージは、ホストが手動設定なしでネットワークに参加できるようにする役割(DHCPの役割の一部に似ています)を持っていました。しかし、IPv6ではこれらの役割が近隣探索プロトコル (NDP) に統合・拡張され、非常に重要な位置づけとなりました。
3.2.3. タイムスタンプ要求/応答 (Timestamp Request/Reply) – Type 13 / Type 14
ネットワーク機器間の時間差を測定したり、ラウンドトリップタイムをより正確に測定したりするために使用されるメッセージです。
- Type 13: Timestamp Request (タイムスタンプ要求)
- 目的: 受信側ホスト/ルーターの現在時刻を取得するために送信されます。
- 内容: オリジネートタイムスタンプ(要求を送信した時間)が含まれます。
- Type 14: Timestamp Reply (タイムスタンプ応答)
- 目的: Timestamp Requestを受信したホスト/ルーターが返送します。
- 内容: 受信タイムスタンプ(要求を受信した時間)と送信タイムスタンプ(応答を送信する時間)が含まれます。
これらのタイムスタンプ情報を使用することで、送信元はネットワーク機器間の時間差や、より正確なラウンドトリップタイム(送信側の処理遅延を除外できるため)を計算できます。ただし、ネットワーク機器の時刻同期精度に依存するため、必ずしも正確な情報が得られるとは限りません。また、ネットワーク情報の収集に悪用される可能性があるため、多くのシステムではデフォルトで無効化されていたり、フィルタリングの対象とされたりします。
3.2.4. 情報要求/応答 (Information Request/Reply) – Type 15 / Type 16
これらのメッセージは、ホストが自分のネットワークアドレス(例: Net ID)を知らない場合に、それをネットワーク上のルーターに問い合わせるために設計されました。
- Type 15: Information Request
- Type 16: Information Reply
しかし、これらのメッセージは、DHCP (Dynamic Host Configuration Protocol) がアドレス割り当てと構成情報の提供を行うようになったため、廃止 (obsolete) され、現代ではほとんど使用されていません。
3.2.5. アドレスマスク要求/応答 (Address Mask Request/Reply) – Type 17 / Type 18
ホストが自身のネットワークアドレスに対応するサブネットマスクを知らない場合に、ローカルネットワーク上のルーターに問い合わせるために設計されました。
- Type 17: Address Mask Request
- Type 18: Address Mask Reply
Information Request/Replyと同様に、これらのメッセージもDHCPによってその役割が代替されたため、現在では廃止 (obsolete) され、使用されていません。
これらの情報要求/応答メッセージのうち、現代のインターネットで広く利用されているのはEcho Request/Reply (Ping) のみです。ルーター広告/要請はIPv6のNDPに発展的に引き継がれ、他のメッセージタイプはほぼ役割を終えています。
3.3. リダイレクトメッセージ (Redirect Message) – Type 5
ルーターが、自身に届いたパケットについて、送信元ホストに対して「もっと効率的な別のルーター(またはホスト)に直接送信した方が良い」と通知するために送信するメッセージです。これにより、ホストのルーティングテーブルを動的に更新させ、より最適な経路で通信を行わせることができます。
- Code 0: Redirect for Network
- 理由: パケットの宛先が、メッセージを送信するルーターから見て自身のネットワーク外にあるネットワークであり、かつ、その宛先ネットワークへのより良い経路を持つ別のルーターが存在する場合。
- 影響: ホストは、特定のネットワークへのルーティングについて、教えてもらった別のルーターを使用するようにルーティングテーブルを更新します。
- Code 1: Redirect for Host
- 理由: パケットの宛先が、メッセージを送信するルーターから見て自身のネットワーク内にあるホストであり、かつ、その宛先ホストへのより良い経路を持つ別のルーターが存在する場合。
- 影響: ホストは、特定のホストへのルーティングについて、教えてもらった別のルーターを使用するようにルーティングテーブルを更新します。
- Code 2: Redirect for Type of Service and Network
- 理由: 特定のTOSを持つパケットの宛先ネットワークについてリダイレクトを推奨する場合。
- Code 3: Redirect for Type of Service and Host
- 理由: 特定のTOSを持つパケットの宛先ホストについてリダイレクトを推奨する場合。
リダイレクトメッセージは、ホストが誤ったデフォルトゲートウェイを使用している場合などに、ルーターが経路を修正させるために有効です。例えば、ホストAがデフォルトゲートウェイR1経由で同じサブネット内のホストBにパケットを送信しようとした場合、R1はパケットを受信すると、AとBが同じネットワークにいることを認識し、パケットをBに転送すると同時にAに対して「Bに送るパケットはR1ではなく、Bに直接送るべきだ(またはBへのより良いルーターR2が存在する)」という内容のリダイレクトメッセージを送り返すことがあります。
しかし、リダイレクトメッセージはセキュリティ上のリスクも伴います。悪意のあるICMPリダイレクトメッセージをホストに送りつけることで、ホストのルーティングテーブルを改ざんし、トラフィックを攻撃者が制御するルーターに転送させるといった攻撃(ICMP Redirect Attack)が可能になる場合があります。そのため、多くのシステムでは、ICMPリダイレクトメッセージの受け入れを無効にするか、信頼できるルーターからのメッセージのみを受け入れるように設定されています。
4. ICMPv6の重要なメッセージタイプと役割
ICMPv6はICMPv4の機能を包含しつつ、IPv6における新しい要件に対応するために大幅に拡張されています。特に、IPv6の基本機能である近隣探索プロトコル (NDP) を実現するためのメッセージがICMPv6によって提供されます。Typeの値はICMPv4とは異なります。
4.1. エラーメッセージ (Error Messages)
ICMPv6のエラーメッセージはTypeが0から127の範囲に割り当てられています。ICMPv4のエラーメッセージに対応するものが多いですが、IPv6の特性(例: オプションヘッダー)を考慮した詳細化がされています。
- Destination Unreachable (Type 1): ICMPv4 Type 3に相当。Codeによってより詳細な理由を示します(例: Code 0: No route to destination, Code 1: Communication with destination is administratively prohibited, Code 2: Beyond scope of source address, Code 3: Address unreachable, Code 4: Port unreachable)。
- Packet Too Big (Type 2): ICMPv4 Type 3 Code 4 (Fragmentation Needed and DF set) に相当しますが、IPv6ではフラグメント化は送信元ホストのみが行い、ルーターは行いません。ルーターは次に転送すべきリンクのMTUより大きなパケットを受信した場合、そのパケットを破棄し、送信元にPacket Too Bigメッセージを返送します。このメッセージには、次のホップのMTUが必ず含まれます。これはIPv6におけるPath MTU Discovery (PMTUD) の主要なメカニズムです。
- Time Exceeded (Type 3): ICMPv4 Type 11に相当。Code 0 (Hop limit exceeded in transit) と Code 1 (Fragment reassembly time exceeded) があります。Hop LimitはIPv4のTTLに相当します。Traceroute6 (IPv6版traceroute) で利用されます。
- Parameter Problem (Type 4): ICMPv4 Type 12に相当。IPv6ヘッダーや拡張ヘッダー、あるいはICMPv6メッセージ自体のフィールドに問題がある場合に通知します。Code 0 (Erroneous header field encountered)、Code 1 (Unrecognized Next Header type encountered)、Code 2 (Unrecognized IPv6 option encountered) などがあります。どのバイト位置に問題があるかをPointerフィールドで示します。
ICMPv6のエラーメッセージは、IPv6ネットワークにおけるIPパケット転送のエラーを送信元に通知する基本的な役割をICMPv4から引き継いでいます。Packet Too Bigメッセージは、IPv6におけるフラグメント化の仕様変更に伴い、PMTUDにおいてICMPv4よりも重要な役割を担うようになりました。
4.2. 情報メッセージ (Information Messages)
ICMPv6の情報メッセージはTypeが128から255の範囲に割り当てられています。これらのメッセージは、IPv6の運用において非常に重要な機能を提供します。
4.2.1. 近隣探索プロトコル (Neighbor Discovery Protocol – NDP)
NDPは、IPv6においてIPv4のARP (Address Resolution Protocol)、ICMPルーター発見、ICMPリダイレクトの一部、およびアドレス自動設定などの機能を代替・統合したプロトコルです。NDPのメッセージはすべてICMPv6メッセージとして定義されています。
- Router Solicitation (RS) – Type 133: ホストが、ローカルリンク上のルーターを探すためにマルチキャストで送信します。ルーターはこれに応答してRouter Advertisementを送信します。
- Router Advertisement (RA) – Type 134: ルーターが、ローカルリンク上のホストに対して自身の存在、プレフィックス情報(ホストが自身のIPv6アドレスを自動設定する際に必要)、デフォルトルーターの情報、MTU、その他の設定パラメータなどを通知するために定期的に、またはRSメッセージに応答して送信します。ステートレスアドレス自動設定 (SLAAC) において、ホストがIPv6アドレスやデフォルトゲートウェイを取得するために不可欠なメッセージです。
- Neighbor Solicitation (NS) – Type 135: ホストが以下の目的で使用します。
- 近隣のリンク層アドレス解決: 特定のIPv6アドレスに対応するMACアドレスを知るために、そのIPv6アドレスを含むマルチキャストアドレス(Solicited-Node Multicast Address)に対して送信します。これはIPv4のARP Requestに相当します。
- 重複アドレス検出 (Duplicate Address Detection – DAD): 自身のIPv6アドレスがネットワーク上で既に使用されていないかを確認するために、そのアドレスを送信元アドレスとして使用せずに(未知のアドレスとして)NSメッセージを送信します。
- Neighbor Advertisement (NA) – Type 136: NSメッセージを受信したホストが、自身のMACアドレスなどを応答としてユニキャストまたはマルチキャストで返信するメッセージです。これはIPv4のARP Replyに相当します。DADの応答としても使用されます。
- Redirect (Type 137): ルーターがホストに対して、宛先へのより良い経路があることを通知するために送信します。これはICMPv4 Type 5に相当しますが、IPv6のRedirectはルーターからホストへのみ送信され、ルーターからルーターへは送信されません。NDPの一部として定義されています。
NDPメッセージは、IPv6ネットワークが正しく機能するための基盤であり、アドレス解決、ルーター発見、アドレス自動設定、重複アドレス検出、近隣到達性確認といった重要なプロセスを担っています。
4.2.2. その他重要なICMPv6メッセージ
- Echo Request/Reply (Type 128 / Type 129): ICMPv4 Type 8/0に相当し、IPv6ネットワークでのホストの到達可能性確認やRTT測定に使用されます。Ping6 (IPv6版ping) コマンドで利用されます。
- Multicast Listener Discovery (MLD) Messages (Type 130-132): IPv6におけるマルチキャストグループ管理のためのプロトコルです。ホストが特定のマルチキャストグループに参加したい、あるいは脱退したいという意思をルーターに伝えるために使用されます。ICMPv6 Type 130 (MLD Query), Type 131 (MLD Report), Type 132 (MLD Done) があります。
- Version 2 Multicast Listener Discovery (MLDv2) Messages (Type 143): より高度なマルチキャストフィルタリング機能をサポートするためのMLDの拡張です。
- Neighbor Discovery Messages for IPv6 (Type 133-137): 前述のNDPメッセージ。
- Mobile IPv6 Messages (Type 144-149): モバイルIPv6の機能(ホームエージェント発見、バインディング更新など)をサポートするためのメッセージ。
- Certification Path Solicitation/Advertisement (Type 149/150): Secure Neighbor Discovery (SEND) で使用されるメッセージ。NDPにおけるメッセージの正当性を証明するために使用されます。
- Experimental messages (Type 200-255): 実験目的で使用するために予約されているタイプ。
ICMPv6は、IPv4の基本的なエラー通知・情報提供機能に加え、IPv6固有の機能(NDP、PMTUDなど)を実装するための中心的なプロトコルとして、その役割範囲が拡大し、より不可欠な存在となっています。
5. ICMPの具体的な利用例 – PingとTraceroute
ICMPプロトコルは、ネットワークの診断やトラブルシューティングに不可欠なツールであるPingやTracerouteの基盤となっています。
5.1. Pingコマンド
Pingは、特定のホストがネットワーク上で到達可能であるか、応答速度はどうかを確認するための最も基本的なコマンドです。
-
仕組み:
- Pingコマンドを実行したホストは、指定された宛先IPアドレス(またはホスト名)に対してICMP Echo Request (ICMPv4 Type 8 または ICMPv6 Type 128) メッセージを含むIPパケットを送信します。
- 宛先ホスト(またはパケットを受信したルーターなどが応答するように設定されている場合)は、そのEcho Requestを受信すると、可能な限り速やかにICMP Echo Reply (ICMPv4 Type 0 または ICMPv6 Type 129) メッセージを作成し、Echo Requestの送信元に返送します。Echo Replyには、元のEcho Requestに含まれていたIdentifier, Sequence Number, Dataがそのままコピーされます。
- Pingコマンドを実行したホストは、Echo Replyを受信すると、送信した要求と受信した応答をIdentifierとSequence Numberで紐付けます。
- Pingプログラムは、要求を送信してから応答を受信するまでの時間(ラウンドトリップタイム – RTT)を測定・表示します。
-
Pingの出力から読み取れる情報:
- 応答時間 (time=XX ms): パケットの往復にかかった時間。ネットワークの遅延を示します。
- TTL (Time To Live) または Hop Limit: 応答パケットを受信した時点でのTTL/Hop Limit値。宛先までのホップ数(ルーター通過数)を推測するのに役立ちます(通常、初期値からホップ数分だけ減少するため)。
- パケットロス率 (% packet loss): 送信したEcho Requestの数に対して、Echo Replyが返ってこなかったパケットの割合。ネットワークの信頼性や輻輳度を示します。
- 往復時間の統計 (min/avg/max): 複数のPingパケットのRTTの最小値、平均値、最大値。RTTのばらつき(ジッター)を評価できます。
Pingはシンプルながら強力なツールであり、ネットワーク機器が正常に動作しているか、基本的な接続性があるか、おおよその遅延はどうかなどを迅速に確認できます。ただし、Pingに応答しないように設定されているホストやファイアウォールも存在するため、Pingが成功しないことが必ずしもホストがダウンしていることを意味するわけではない点には注意が必要です。
5.2. Traceroute/Tracertコマンド
Traceroute (Linux/macOSなど) または Tracert (Windows) は、送信元ホストから宛先ホストまでのネットワーク経路上のルーター(ホップ)を特定し、各ホップまでの遅延を測定するツールです。
-
仕組み (ICMPv4ベースのTraceroute):
- Tracerouteは、UDPパケット(またはICMP Echo Requestパケット、TCP SYNパケットなど、実装によって異なる)を宛先ホストの通常は使用されていないポート番号に向けて送信します。重要なのは、送信するパケットのIPヘッダーのTTL値を1から順に増やしながら送信することです。
- 最初のパケットはTTL=1で送信されます。このパケットは最初のルーターに到達した時点でTTLが0になり、ルーターはそのパケットを破棄し、送信元に対してICMP Time Exceeded (Type 11 Code 0) メッセージを返送します。このメッセージの送信元IPアドレスは最初のルーターのアドレスです。
- 送信元ホストはTTL=1のパケットに対するICMP Time Exceededメッセージを受信することで、経路上の最初のルーターのIPアドレスを知り、そこまでの往復時間(RTT)を測定できます。
- 次に、TracerouteはTTL=2のパケットを送信します。このパケットは最初のルーターを通過するとTTLが1になり、2番目のルーターに到達した時点でTTLが0になります。2番目のルーターはパケットを破棄し、送信元にICMP Time Exceededメッセージを返送します。これにより、2番目のルーターのIPアドレスとそこまでのRTTを知ることができます。
- このプロセスを繰り返し、TTLを増やしながらパケットを送信していきます。各TTL値のパケットが到達してTime Exceededを返送するルーターが、経路上の次のホップとして特定されます。
- 最終的に、TTLの値が十分大きくなり、パケットが宛先ホストに到達します。宛先ホストは、送信されたパケットの宛先ポート番号が使用されていない(アプリケーションが待ち受けていない)ため、ICMP Destination Unreachable (Type 3 Code 3 – Port Unreachable) メッセージを送信元に返送します。
- 送信元ホストはICMP Destination Unreachableメッセージを受信することで、宛先に到達したことを認識し、Tracerouteを終了します。この最後のメッセージの送信元IPアドレスが宛先ホストのアドレスです。
-
Tracerouteの出力から読み取れる情報:
- ホップ番号: 経路上のルーターの順番を示します。
- 各ホップのIPアドレス/ホスト名: そのホップを構成するルーターのIPアドレス(DNS逆引きが可能な場合はホスト名も)。
- 各ホップまでの往復時間 (RTT): 通常、各ホップに対して複数のパケットを送信し、それぞれの往復時間をミリ秒単位で表示します。これは、送信元からそのホップ(ルーター)までのネットワーク遅延を示します。特定のホップで時間が大きく増加している場合、その区間に遅延や輻輳が発生している可能性があります。
- *** (アスタリスク) 表記:** 特定のホップから応答が得られなかった場合。そのルーターがICMP Time Exceededメッセージを返送しない設定になっているか、その区間でパケットロスが発生している可能性があります。
Tracerouteは、ネットワーク経路上のどこでパケットが遅延しているか、あるいは到達不能になっているかを特定するのに非常に役立ちます。特に通信がうまくいかない場合に、問題がローカルネットワークにあるのか、ISPのネットワークにあるのか、あるいはリモートのネットワークにあるのかなどを切り分けるのに使われます。
ICMPv6ベースのTraceroute6も同様の原理で動作しますが、ICMPv6 Time Exceeded (Type 3 Code 0) および Destination Unreachable (Type 1 Code 4 – Port Unreachable) メッセージを使用します。
6. ICMPとネットワークセキュリティ
ICMPはその性質上、ネットワークの状態に関する情報を提供するプロトコルであり、診断や管理に役立つ一方で、悪意のあるユーザーによってネットワーク情報の収集や攻撃に悪用される可能性も秘めています。
6.1. ICMPが抱えるセキュリティリスク
-
偵察 (Reconnaissance):
- Pingスキャン: ネットワーク上のIPアドレス範囲に対して連続してPing (Echo Request) を送信し、応答があるホストをリストアップする手法です。これにより、ネットワーク上に存在するアクティブなホストを効率的に発見できます。
- ポートスキャン: 一部のTraceroute実装や、特定のICMP Destination Unreachableメッセージ(特にPort Unreachable)の応答を分析することで、ホスト上で稼働しているサービスや開いているポートを推測できる場合があります。
- OSフィンガープリンティング: ICMP Echo ReplyメッセージのTTLの初期値や、その他のICMPメッセージの特定の挙動(エラーメッセージの生成方法など)は、オペレーティングシステムによって異なる傾向があります。これを分析することで、ターゲットホストのOSの種類を推測する手法があります。
- ネットワークトポロジーの推測: Tracerouteを利用することで、ネットワークの経路情報やルーターの構成を把握できます。
-
サービス拒否攻撃 (Denial of Service – DoS):
- Ping of Death: 非常に大きなICMP Echo Requestパケットを送信し、ターゲットホストのIPスタックの脆弱性を突く攻撃です。IPパケットの合計サイズが許容範囲を超えると、再構成時にバッファオーバーフローなどを引き起こし、システムをクラッシュさせる可能性がありました。この脆弱性は現代のシステムではほぼ修正されていますが、歴史的なICMP関連の攻撃として知られています。
- Smurf Attack: 攻撃者が送信元IPアドレスを偽装(スプーフィング)したPing Echo Requestパケットを、ターゲットのネットワークに存在するICMPブロードキャスト応答が有効なホスト(Smurfアンプ)のブロードキャストアドレスに大量に送信する攻撃です。これにより、Smurfアンプ上の多数のホストが、偽装された送信元(攻撃ターゲット)に対してEcho Replyを大量に返送し、ターゲットのネットワークを帯域幅で飽和させ、サービスを停止させます。ICMPブロードキャスト応答はほとんどのシステムでデフォルトで無効化されているため、この攻撃も現代では限定的です。
- ICMP Flood: ターゲットに対して大量のICMP Echo Requestパケット(または他のICMPメッセージ)を送信し、ターゲットの帯域幅やリソースを消費させる単純なフラッド攻撃です。
- ICMP Redirect Attack: 前述のType 5 リダイレクトメッセージを悪用し、偽のゲートウェイ情報をホストに与えることで、通信を盗聴したり、トラフィックを別の場所に誘導したりする中間者攻撃(Man-in-the-Middle)の一種です。
-
ICMPトンネル (ICMP Tunneling):
- データ通信(例えばリモートコマンド実行やファイル転送)をICMP Echo Request/Replyパケットのデータ部分に隠蔽して行う手法です。ファイアウォールがTCP/UDPトラフィックをブロックしているがICMPトラフィックを許可している場合、攻撃者がICMPを「トンネル」として使用して内部ネットワークと通信するために悪用される可能性があります。
6.2. ICMPセキュリティ対策
ICMPはネットワーク運用に不可欠なプロトコルであるため、全面的にブロックすることは現実的ではありません。しかし、セキュリティリスクを最小限に抑えるために、適切なフィルタリングと設定を行うことが重要です。
-
ファイアウォールによるICMPフィルタリング:
- 原則: 必要最小限のICMPメッセージのみを許可し、それ以外は破棄する。
- 一般的に許可されるべきICMPタイプ:
- Echo Request/Reply (Ping): 外部からのPingに応答するかどうかはポリシーによりますが、内部からの診断用Pingは許可することが多いです。サーバーなど特定のホストでは外部からのPing応答を無効にすることが一般的です。
- Destination Unreachable: 特にCode 3 (Port Unreachable) はPMTUDやTracerouteに必要です。Code 4 (Fragmentation Needed) はPMTUDに不可欠です。これらのエラー通知は許可すべきです。ただし、すべてのCodeを許可する必要はありません。
- Time Exceeded: Tracerouteに必要です。これも許可すべきです。
- Packet Too Big (ICMPv6 Type 2): IPv6 PMTUDに不可欠であり、必ず許可する必要があります。
- 一般的に制限・拒否すべきICMPタイプ:
- Timestamp Request/Reply: ネットワーク情報の収集に悪用される可能性があるため、特別な理由がない限り拒否します。
- Address Mask Request/Reply, Information Request/Reply: 現代では使用されないため拒否します。
- Source Quench: 非推奨であり、必要ありません。
- Redirect: セキュリティリスクが高いため、ホストやルーターで受信を無効にするか、信頼できる送信元からのもののみを許可するように厳密にフィルタリングします。
- Router Solicitation/Advertisement (ICMPv4): IPv6 NDPとは異なり、IPv4でのこれらの利用は限定的であり、無効にすることも検討できます。
- 特定の送信元/宛先からのICMPのみ許可: 信頼できるネットワーク管理用ホストからのICMPのみを許可するといった、より細かい制御を行うことも有効です。
-
ICMPレート制限:
- 特定の種類のICMPメッセージ(特にEcho RequestやDestination Unreachableなど)が短時間に大量に発生した場合に、その処理速度を制限することで、ICMP FloodのようなDoS攻撃の影響を軽減できます。ルーターやファイアウォールで設定可能です。
- 不要なICMP応答の無効化:
- オペレーティングシステムやネットワーク機器の設定で、特定のICMPメッセージタイプに対する応答を無効にすることができます。例えば、外部からのPingに応答しないように設定するなどです。
- ICMP Redirectの無効化:
- ホストやルーターの設定で、ICMP Redirectメッセージの受信または送信を無効にすることで、ICMP Redirect Attackを防ぐことができます。特にホスト側での受信無効化が重要です。
- ブロードキャストアドレスへのICMP応答の無効化:
- Smurf Attack対策として、ネットワーク機器がブロードキャストアドレス宛てのICMP Echo Requestに応答しないように設定します。これは現代のほとんどのシステムでデフォルト設定になっています。
適切なICMPフィルタリングポリシーは、ネットワークの診断能力を維持しつつ、セキュリティリスクを最小限に抑えるための鍵となります。ネットワークの用途やセキュリティ要件に応じて、慎重に設定する必要があります。特にサーバーなどの外部に公開されるシステムでは、ICMPに対する厳格なフィルタリングが推奨されます。
7. まとめ – ICMPプロトコルの重要性と未来
ICMPプロトコルは、IPネットワークの基盤を支える上で非常に重要な役割を担っています。TCPやUDPのように直接アプリケーションのデータを運ぶわけではありませんが、IPパケットの転送中に発生した問題の通知や、ネットワークの状態に関する情報の提供を行うことで、ネットワークの安定稼働やトラブルシューティングに不可欠な存在です。
- 主要な役割:
- エラー通知: 宛先到達不能、生存時間切れ、パラメータ問題などを送信元に知らせる。
- 診断・情報提供: Pingによる到達可能性確認、Tracerouteによる経路特定、PMTUDによる最適なパケットサイズ決定など。
IPv4時代から重要な役割を果たしてきましたが、IPv6においてはその重要性がさらに増しています。ICMPv6は、IPv6アドレスの自動設定、近隣ホストの発見(ARPの代替)、ルーター発見、パスMTU探索といった、IPv6ネットワークの基本機能を実装するための中心的なプロトコルとなっています。IPv6ネットワークを構築・運用する上で、ICMPv6の理解は避けて通れません。
一方で、ICMPはネットワークに関する情報を提供するため、悪意のあるユーザーによる偵察や攻撃(DoS攻撃、ICMPトンネルなど)に悪用されるリスクも常に存在します。そのため、ファイアウォールによる適切なICMPフィルタリングや、不要なICMP応答の無効化といったセキュリティ対策が不可欠です。闇雲に全てのICMPをブロックするのではなく、必要なICMPメッセージ(特にDestination Unreachable, Time Exceeded, Packet Too Big, およびIPv6におけるNDP関連メッセージ)は許可しつつ、リスクの高いメッセージタイプを制限するというバランスの取れたアプローチが求められます。
ネットワーク管理者やネットワーク技術者を目指す方々にとって、ICMPプロトコルの仕組みと役割、そして関連するセキュリティリスクを理解することは、ネットワークの健全性を保ち、問題を効果的に解決するために非常に重要です。PingやTracerouteといった日常的に使用するツールの裏側にある仕組みを知ることは、ネットワークトラブルの深い原因を探る上で大いに役立つでしょう。
ICMPは、私たちの知らないところで、インターネットという巨大なネットワークの「健康状態」を監視し、問題を報告し続けている、まさに縁の下の力持ちのようなプロトコルなのです。