【入門編】 pingコマンドの基本動作とICMP Echo Request/Replyパケットの構造 – トラブルシューティング&ネットワーク運用監視実践ガイド

こんにちは!NOC(ネットワークオペレーションセンター)で日々、パケットの荒波と格闘しているシニアエンジニアです。

データセンターの深夜、突然鳴り響くアラート音。「おい、〇台目のサーバーに繋がらなくなったぞ!」――そんな緊迫した現場で、ベテランエンジニアが真っ先に叩くコマンドは何だと思いますか?そう、みなさんも一度は使ったことがあるであろう ping ですよね。

「なんだ、ただの生存確認ツールでしょ?」と思いましたか?
甘く見てはいけません。この地味に見える ping こそ、ネットワークトラブルシューティングの「すべての基本」であり、パケットの心臓の鼓動を聞くための最強の聴診器なんです。

今回は、ネットワークの世界に足を踏み入れたばかりのあなたへ向けて、ping が裏側でどんなドラマを繰り広げているのか、現実世界の「手紙のやり取り」に例えて優しく紐解いていきましょう。難しい専門用語も怖くありません。一歩ずつ、一緒に理解していきましょう!

—

1. pingの正体と「郵便配達」の切ないストーリー

ネットワークの世界における ping の役割は、実にシンプルです。「おーい、そこにいますかー?」と声をかけ、「はい、ここにいますよ!」と返事をもらう。これだけです。

では、このやり取りを私たちの身近な世界、「郵便配達」に例えてみましょう。

あなたが遠く離れた友人に手紙を出したいとします。
1. あなたは便箋に「元気?」と書き、封筒に入れます。これが ICMP Echo Request(お伺いパケット) です。
2. 封筒の宛名には友人の住所(IPアドレス)を書きます。
3. ポストに投函すると、郵便局員さん(ルーターたち)が必死に自転車やトラックを走らせ、友人の家のポストへ届けてくれます。
4. 手紙を受け取った友人は、「おっ、返事を出そう」と新しい便箋に「元気だよ!」と書き、あなたの住所を宛名に書いてポストへ投函します。これが ICMP Echo Reply(お返事パケット) です。
5. あなたの元に返事が届き、「無事に届いたな、生きてるな」と確認できます。

これが、ping が裏側で行っていることの全貌です。OSI参照モデルという難しい言葉で言えば、ネットワーク層(第3層)でひっそりとしずかに働いている、ICMP(Internet Control Message Protocol) というプロトコルを使っています。TCPやUDPのように「データを確実に届けるための難しい約束事」がなく、ただ「宛先に向かって叫ぶ、そして返事を期待する」という、とてもシンプルな仕組みになっています。

—

2. 実際に ping を打ってみよう(実務の現場から)

百聞は一見にしかず。実際に手元のパソコンから ping を打ってみましょう。
今回は、世界中で一番有名なDNSサーバーの一つである 8.8.8.8 (GoogleのパブリックDNS)に向けてパケットを飛ばしてみます。

Windowsのコマンドプロンプトや、Mac/Linuxのターミナルを開いて、次のように入力してみてください。

# GoogleのパブリックDNSサーバーに対して、生存確認のパケットを4回送信する
ping 8.8.8.8

実行すると、以下のような画面が表示されますよね(OSによって多少見た目は異なります)。

PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
64 bytes from 8.8.8.8: icmp_seq=1 ttl=117 time=12.4 ms
64 bytes from 8.8.8.8: icmp_seq=2 ttl=117 time=11.8 ms
64 bytes from 8.8.8.8: icmp_seq=3 ttl=117 time=12.1 ms
64 bytes from 8.8.8.8: icmp_seq=4 ttl=117 time=11.9 ms

--- 8.8.8.8 ping statistics ---
波数: 送信 = 4, 受信 = 4, パケットロス = 0% (ロス率 0%), 損失 = 0%
往復時間 (RTT) = 11.8ms ~ 12.4ms

この出力結果の中には、エンジニアにとっての「お宝情報」がぎっしり詰まっています。
特に注目してほしいのが、time=12.4 ms という部分。これは、自分のパソコンからパケットが海を越えて(あるいは地中の光ファイバーを駆け巡って)Googleのサーバーまで行き、「行って帰ってくるまでにかかった時間(往復遅延時間:RTT)」を表しています。

もしこの数字が 1000ms(1秒)を超えたり、Request timed out(タイムアウト)になったりしたら、「おや、どこかの回線が渋滞しているぞ」「サーバーがダウンしているかもしれないぞ」と察知できるわけです。

—

3. パケットの封筒の中身をのぞいてみよう(ICMPの構造)

さて、ここからが少しだけディープなお話です。
先ほど「手紙のやり取り」に例えましたが、ネットワークの世界では、パケットという「封筒」の中に厳密なルール(ヘッダー構造)が決められています。

ICMPパケットの中身には、主に次のような大切な情報(フィールド)が入っています。難しく考えず、一つずつ紐解いていきましょう!

+-------------------+-------------------+-------------------+
|    Type (タイプ)   |    Code (コード)   |   Checksum (チェックサム) |
+-------------------+-------------------+-------------------+
|           Identifier (識別子)         |   Sequence Number (配列) |
+---------------------------------------+-------------------+
|                         Data (データ/ペイロード)           |
+-----------------------------------------------------------+

① Type(タイプ)と Code(コード)

パケットが「何の用件で来たのか」を示す見出しです。

  • Type 8, Code 0:これが「お伺い(Echo Request)」です。「ねえ、そこにいる?」という合図です。
  • Type 0, Code 0:これが「お返事(Echo Reply)」です。「はい、ここにいますよ!」という返答です。

郵便の封筒に「親展」と書くようなもので、受け取った相手のルーターやサーバーは、この数字を見るだけで「あ、pingの用事ね」と瞬時に理解できます。

② Identifier(識別子)

これは、「誰からのお手紙か」を識別するIDです。
自分のパソコンでは、同時にいくつものブラウザを開いたり、複数のアプリが通信をしたりしていますよね。もし他のアプリが送ったICMPパケットと混ざってしまったら、どれが自分の ping の返事かわからなくなってしまいます。
そのため、OSはこの識別子(ID)に固有の番号を割り当て、自分の元に返ってきたときに「あ、これ俺が出したやつだ!」と分かるようにしています。

③ Sequence Number(シーケンス番号)

これは、日本語に訳すと「順番待ちの番号」です。
先ほどの実行結果に icmp_seq=1、icmp_seq=2 と表示されていたのを覚えていますか? あれがシーケンス番号です。
「1番目の手紙」「2番目の手紙」と順番に番号を振ることで、途中でパケットが順番通りに届かなかったり、行方不明になったりしていないかを私たちが(そしてパソコンが)把握できるようになっています。

—

4. 実務で役立つ! ping のちょっと便利な使い方

最後に、NOCの現場で私たちがよく使う、実用的な ping のオプションをいくつかご紹介します。これを知っておくだけで、あなたも立派なネットワーク・エンジニアの仲間入りです!

① ずっと送り続ける(監視モード)

デフォルトの ping は、Windowsなら4回、Mac/Linuxなら止めない限り続きますが、Windowsでずっと送り続けたいときは -t オプションを使います。サーバーの復旧確認などでよく使います。

# 停止(Ctrl + C)するまで、無限にpingを送り続ける(Windows)
ping -t 8.8.8.8

② パケットのサイズを変えてみる

ネットワークの途中に「これ以上大きいパケットは通せません!」という制限(MTUと呼ばれます)がある場合があります。そんなときは、あえて大きな封筒(大きなデータサイズ)を指定して ping を飛ばします。

# 1000バイトの大きなデータを乗せてpingを送信する(Linuxの場合)
ping -s 1000 8.8.8.8

もし途中の経路で「大きすぎて通れないよ!」という場所があると、ルーターが怒ってエラーを返してくれます。これを利用して、ネットワークの限界値(MTUサイズ)を調べることもできるんです。

—

まとめ

いかがでしたでしょうか?
一見ただの文字の羅列に見える ping も、その裏側を覗いてみると、IPアドレスという宛先を頼りに、ICMPという専用の封筒(タイプやシーケンス番号)を抱えて、世界中のルーターの間を駆け巡っているドラマが見えてきたはずです。

ネットワークのトラブルシューティングは、パケットたちの「心の声」を聞くことから始まります。
「あ、今ちゃんと返事が返ってきたな」「おや、ここでパケットが途切れているぞ……?」
そんな風に、目に見えないパケットたちの動きを頭の中でイキイキと想像できるようになると、ネットワークに触れることが急に楽しく、エキサイティングになっていきますよ。

それでは、また次回のNOC現場レポートでお会いしましょう!安全で快適なネットワークライフを!

コメント

タイトルとURLをコピーしました