ICMP Echo Request/Replyとは
ICMP Echo Request/Replyは、通称「ping」として知られる、2点間のIP到達性を確認するための最も基本的なICMPメッセージです。送信元がEcho Request(Type 8)を送信し、宛先がそれを受信できればEcho Reply(Type 0)を返送します。応答が返ってくれば、両者の間でIPパケットが正常に往復できることが確認できます。
RFC 792で定義されており、Echo Request/ReplyはICMPの「問い合わせメッセージ(Query Message)」に分類されます。エラーメッセージとは異なり、正常な通信の確認そのものを目的としている点が特徴です。
パケットフォーマット
Echo Request/Replyの「Rest of Header」には、要求と応答を対応付けるためのIdentifierとSequence Numberが格納されます。
| フィールド名 | サイズ | 説明 |
|---|---|---|
| Type | 1 バイト | Echo Requestは8、Echo Replyは0。 |
| Code | 1 バイト | 常に0。 |
| Checksum | 2 バイト | ICMPメッセージ全体(Type〜Data)を対象とした誤り検出用の値。 |
| Identifier | 2 バイト | 一連のEcho Request/Replyを識別するための値。複数のプロセスやセッションが同時にpingを実行していても混同しないよう、実装依存の値(プロセスIDなど)が使われることが多い。 |
| Sequence Number | 2 バイト | 同一Identifier内で送信するたびに増加する連番。パケットロスや順序の入れ替わりを検出するために使われる。 |
| Data | 可変長 | 任意のパディングデータ。送信側が設定した内容がそのままEcho Replyでもエコーバックされる。 |
Echo Replyは、受信したEcho RequestのIdentifier・Sequence Number・Dataをそのまま踏襲して返送します。送信側はこの3つの値を突き合わせることで、どのRequestに対する応答かを識別します。
動作
R1(192.168.0.1)からR2(192.168.0.2)に対して ping を実行した場合の基本的な流れです。
sequenceDiagram
participant R1 as R1
192.168.0.1
participant R2 as R2
192.168.0.2
R1->>R2: ICMP Echo Request
Type: 8, Code: 0
Identifier: 0x0001, Seq: 1
R2->>R1: ICMP Echo Reply
Type: 0, Code: 0
Identifier: 0x0001, Seq: 1
R1->>R2: ICMP Echo Request
Identifier: 0x0001, Seq: 2
R2->>R1: ICMP Echo Reply
Identifier: 0x0001, Seq: 2
Note over R1: Sequence Numberの連続性から
パケットロスの有無を判定
- R1は宛先IPアドレスをR2としたEcho Request(Type 8)を送信する。IdentifierとSequence Numberは送信元プロセスが管理する。
- R2はEcho Requestを受信すると、送信元と宛先のIPアドレスを入れ替え、受信したIdentifier・Sequence Number・DataをそのままEcho Reply(Type 0)として返送する。
- R1はEcho Replyを受信し、送信したRequestとSequence Numberが一致することを確認して往復時間(RTT)を計測する。
- 一定時間内に応答が返らなかった場合、そのSequence Numberに対応するパケットはロストしたと判断される。
実機での検証
R1・R2(Cisco IOS XE、GigabitEthernet1同士を直接接続)を実際に用意し、R1からping 192.168.0.2を実行してICMP Echo Request/Replyの動作をパケットキャプチャとshow ip trafficのICMPカウンタで確認しました。
pingコマンドの実行結果
R1#ping 192.168.0.2
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 192.168.0.2, timeout is 2 seconds:
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 2/2/3 ms
R1#5回とも応答が返り(!が5つ)、成功率100%、往復時間(RTT)は最小2ms・平均2ms・最大3msでした。
パケットキャプチャ(Echo Request / Echo Reply)
1往復目(Sequence Number 0)のキャプチャです。
Ethernet II, Src: 52:54:00:83:54:c2, Dst: 52:54:00:c2:81:b1
Type: IPv4 (0x0800)
Internet Protocol Version 4, Src: 192.168.0.1, Dst: 192.168.0.2
Total Length: 100
Time to Live: 255
Protocol: ICMP (1)
Internet Control Message Protocol
Type: 8 (Echo (ping) request)
Code: 0
Checksum: 0xf26b
Identifier: 0x0001 (1)
Sequence Number: 0x0000 (0)
Data (72 bytes)Ethernet II, Src: 52:54:00:c2:81:b1, Dst: 52:54:00:83:54:c2
Type: IPv4 (0x0800)
Internet Protocol Version 4, Src: 192.168.0.2, Dst: 192.168.0.1
Total Length: 100
Time to Live: 255
Protocol: ICMP (1)
Internet Control Message Protocol
Type: 0 (Echo (ping) reply)
Code: 0
Checksum: 0xfa6b
Identifier: 0x0001 (1)
Sequence Number: 0x0000 (0)
Data (72 bytes)送信元MACアドレス52:54:00:83:54:c2がR1、52:54:00:c2:81:b1がR2のGigabitEthernet1です。Echo ReplyではEthernetヘッダーの宛先/送信元MACアドレスとIPヘッダーの宛先/送信元IPアドレスが入れ替わる一方、ICMPのIdentifier(0x0001)とSequence Number(0x0000)はEcho Requestと同じ値のまま返送されており、前述のとおり送信元がこの2つの値で応答を対応付けられることが確認できます。
0xABCDの繰り返しパターンを使用します。show ip trafficによるICMP統計の確認
R1#show ip traffic
<snip>
ICMP statistics:
Rcvd: 0 format errors, 0 checksum errors, 0 redirects, 0 unreachable
0 echo, 5 echo reply, 0 mask requests, 0 mask replies, 0 quench
0 parameter, 0 timestamp, 0 timestamp replies, 0 info request, 0 other
0 irdp solicitations, 0 irdp advertisements
0 time exceeded, 0 info replies
Sent: 0 redirects, 0 unreachable, 5 echo, 0 echo reply
0 mask requests, 0 mask replies, 0 quench, 0 timestamp, 0 timestamp replies
0 info reply, 0 time exceeded, 0 parameter problem
0 irdp solicitations, 0 irdp advertisements
<snip>
R1#R2#show ip traffic
<snip>
ICMP statistics:
Rcvd: 0 format errors, 0 checksum errors, 0 redirects, 0 unreachable
5 echo, 0 echo reply, 0 mask requests, 0 mask replies, 0 quench
0 parameter, 0 timestamp, 0 timestamp replies, 0 info request, 0 other
0 irdp solicitations, 0 irdp advertisements
0 time exceeded, 0 info replies
Sent: 0 redirects, 0 unreachable, 0 echo, 5 echo reply
0 mask requests, 0 mask replies, 0 quench, 0 timestamp, 0 timestamp replies
0 info reply, 0 time exceeded, 0 parameter problem
0 irdp solicitations, 0 irdp advertisements
<snip>
R2#R1側は「Sent: 5 echo」「Rcvd: 5 echo reply」、R2側はその逆に「Rcvd: 5 echo」「Sent: 5 echo reply」となっており、5回分のping(Echo Request送信・Echo Reply受信)がそれぞれの機器のICMP統計に正しく反映されていることが確認できます。
icmp_echo_request_reply.pcap をダウンロード
R1 config(r1_icmp_echo_request_reply.cfg) をダウンロード
R2 config(r2_icmp_echo_request_reply.cfg) をダウンロード
pingコマンドの主なオプション
pingコマンドの基本的な動作はOS間で共通していますが、デフォルトの送信間隔・パケットサイズ・送信回数などはOSによって異なります。
| OS/機器 | コマンド例 | 備考 |
|---|---|---|
| Linux | ping -c 4 192.168.0.2 | 既定では終了するまで送信し続ける。-cで回数指定。 |
| Windows | ping 192.168.0.2 | 既定で4回送信して終了する。 |
| macOS | ping -c 4 192.168.0.2 | Linuxと同様、既定では送信し続ける。 |
| Cisco IOS XE | ping 192.168.0.2 | 既定で5回送信し、応答を!(成功)や.(タイムアウト)で表示する。 |