Linuxの実用的なPingコマンドの例

ネットワーク管理には、LinuxのPingコマンドが欠かせません。おそらく基本的なトラブルシューティングでpingを使用したことがあるかもしれませんが、このコマンドは何をするのでしょうか。

pingコマンドは、リモートまたはローカルのホストに対してInternet Control Message Protocol (ICMP)リクエストを送信し、応答を待ちます。応答がない場合、接続やホスト自体に問題がある可能性があります。

続きを読んで、Linuxでのpingコマンドの実用的な使用方法を探ってみましょう!

前提条件

このチュートリアルは実演形式です。一緒に進める場合は、インターネット接続のあるLinuxコンピュータが必要です。このチュートリアルではUbuntu 20.04コンピュータを使用します。

また、Linuxコンピュータ上で既にターミナルセッションを開いていることを確認してください。

ローカルネットワークの接続をチェックする

ウェブアプリケーションを開発していると想像してください。ホストのループバックアドレス(127.0.0.1)を通じてアプリケーションにアクセスしようとするとテストが失敗します。アプリケーションのトラブルシューティングに取り掛かる前に、pingコマンドを使用して内部でTCP/IPプロトコルが動作していることを確認してください。

デフォルトのループバックアドレスはIPv4では127.0.0.1、IPv6では0:0:0:0:0:0:0:1(または::1)です。

ループバックアドレスの接続をチェックするには、以下のpingコマンドを実行し、その後にループバックアドレスをターミナルに入力します。このコマンドはLinuxでのpingコマンドの最も基本的な使用方法を示しています。

ping 127.0.0.1

ループバックが正常に動作している場合、以下のスクリーンショットと同様の出力が表示されるはずです。

Pinging the loopback address (127.0.0.1)

また、localhostホスト名に対しても同じ結果が得られるはずです。なぜなら、デフォルトではループバックアドレスに解決するからです。

Pinging the loopback address (localhost)

pingコマンドを終了するには、ターミナル上でCTRL+Cを押してください。そうしないと、pingコマンドは継続して実行されます。

注意:pingコマンドを停止するためにCTRL+Zを押さないでください。これを行うとコマンドは停止しますが、プロセスはバックグラウンドで実行されたままになります。

Terminating the ping command in Linux

pingコマンドの出力の理解

さらに進む前に、「動作している」というだけでなく、出力を明示的に理解することが有益です。以下のイメージと値の詳細を参照してください。

Ping command output
  • A (bytes) – Shows the ICMP echo request (packet) size in bytes.
  • B (from) – Shows the target host’s IP address from where the ping command receives the response.
  • C (icmp_seq) – Indicates the order of packet transmission. As you can see, ping sends the ICMP requests in sequence. The value shows icmp_seq=N, where N is the order number.
  • D (TTL) – Shows the ICMP request’s Time-To-Live (TTL) value. The default value is 64, which means that the request can only live up to a maximum of 64 hops and will expire after. The maximum value possible is 255.
  • E (time) – The total time (milliseconds) elapsed the request reached the destination and circled back to the source. This value is also known as the Round Trip Time (RTT). Notice that the time values are less than 0.1 milliseconds in this example since the target is the same machine. The time value increases naturally when the ping destinations are remote or have an internet address.
  • F (statistics) – Shows the summary and statistics of the ping command results. The summary shows the number of packets transmitted and received, packet loss percentage, and the total time. The bottom line shows the minimum, average (mean value), maximum, and standard deviation of the total RTT.

インターネットプロトコルバージョンの強制

pingコマンドはデフォルトでIPv4を使用します。しかし、IPv6との互換性をテストする場合はどうでしょうか?pingコマンドをIPv6を使用するよう強制するには、Linuxでpingコマンドに-6オプションを指定する必要があります。以下のコードをご覧ください。

ping -6 localhost

以下のように、応答のfromにはIPv6ループバックアドレス(::1)からの応答が表示されます。

Pinging the IPv6 loopback address

-6オプションの代わりに、-4オプションを使用するとpingはIPv4を使用します。ただし、pingはデフォルトでIPv4を使用するため、通常は-4オプションを指定する必要はありません。

応答数の制限

前の例では、pingコマンドを終了するためにはCTRL+Cを押す必要がありました。そうしないと、pingコマンドは継続的に実行されます。

-cオプションを使用すると、pingコマンドが停止するまでに受け取る応答の数を指定できます。なぜこのオプションを使用するのでしょうか?いくつかの場合では、10個、100個、1000個のICMPパケットへのシステムの応答をテストしたいかもしれません。

以下のコマンドを実行して、ターゲットホストに5つのICMPパケットを送信します。5を希望するICMP応答の数に置き換えてください。

ping -c 5 localhost

以下のように、pingコマンドは5番目のリクエスト(icmd_seq=5)の後に停止し、CTRL+Cを押す必要はありませんでした。

Ping with a limited request count

リクエスト間隔の調整

2つのデバイス間のネットワーク接続をテストしたい場合、1つのデバイスの帯域幅が低い場合があります。この場合、各リクエスト間の間隔を増やして、2番目のデバイスが現在のICMPパケットを処理するのに十分な時間を確保することができます。

pingコマンドは、前の要求が完了した後、デフォルトで次のICMP要求を1秒後に送信します。遅延を調整するには、-iオプションを指定して、遅延値を秒単位で指定する必要があります。

たとえば、以下のpingコマンドを実行して、要求ごとに2秒の間隔を空けて5つのICMP要求を送信します。

ping -c 5 -i 2 localhost

別の例として、以下のpingコマンドを実行して、要求ごとに0.5秒の間隔を空けて5つのICMP要求を送信します。

ping -c 5 -i 0.5 localhost

異なる間隔を持つ両方のコマンドの結果を比較すると、合計time値の違いがわかります。

Comparing ping results with different intervals

フラッディング攻撃のシミュレーション

A ping flood is a type of Denial of Service (DoS) attack in which the attacker attempts to overwhelm a targeted device with ICMP packets. The attack aims to overwhelm the targeted machine to respond to so many requests that it becomes overloaded and unavailable to legitimate users.

フラッディング攻撃をシミュレートして、システムが攻撃にどのように応答するかをテストすることができます。ただし、心配しないでください。pingフラッドシミュレーションは制御されており、いつでもCTRL+Cを押して停止することができます。

ローカルマシンで以下のコマンドを実行して、デバイスが1秒間に処理できるリクエストの数を確認してください。 -fオプションは、いくつかのpingパケットを迅速に送信し、任意の制限なしで送信することを意味します。

localhostをテストしたいアプリのIPアドレスまたはホスト名に置き換えてください。この例では、pingフラッドをローカルホストのみにシミュレートしています。pingコマンドを約5秒間実行し、その後CTRL+Cを押して終了します。

ping -fコマンドを実行するには、rootユーザーであるかsudo権限を持っている必要があります。

ping -f localhost

以下のように、pingコマンドは124,685個のICMPパケットを4276ミリ秒で送受信し、パケットロスは0%です。かなり良い結果ですね。しかし、実際の使用では、パケットロスが発生することがあります。ネットワークは完璧ではないため、パケットロスは避けられません。

Simulating a ping flood attack

インターネット接続の確認

皆さんはインターネットを何らかの形で使用していることでしょう。ブラウザを使用してウェブサイトを読み込もうとすると、ページの読み込み時間が遅く感じることがあります。この症状は、DNSの解決は正常に機能しているが、ネットワークの速度に何らかの影響があることを示しています。

サードパーティのツールを使用せずに問題を診断する場合、pingコマンドを使用します。コマンドの使用方法は、ローカルネットワークの接続をテストする場合と同じですが、ループバックアドレスではなく、パブリックIPまたはウェブアドレスを指定します。

以下のコマンドを実行して、外部の公開ウェブサイトにpingを送信します。 adamtheautomator.comを他のウェブアドレスに置き換えてください。

ping -c 5 adamtheautomator.com

すぐにわかるように、タイム値はlocalhostにpingを送信する場合よりも比較的高くなっています。この時間の増加は、ターゲットアドレスadamtheautomator.comが同じホスト内になく、同じネットワーク上にもないためです。

前の手順では、pingコマンドは成功しましたが、実際の使用では、さまざまな理由でpingコマンドが失敗することがあります。

以下に一部の一般的なエラーとトラブルシューティング方法を示します。

  • 宛先ホストに到達できません – このエラーは、宛先ホストへのルートが存在しないことを意味します。このエラーは、ホストまたはドメインがダウンしている場合に発生することがあります。
  • 要求のタイムアウト – このエラーは、宛先ホストへの要求が時間がかかりすぎて(4秒または4000ミリ秒を超えて)接続がタイムアウトしたことを意味します。このエラーは、宛先ホストが応答するのに忙しすぎる、接続をブロックしているファイアウォール、または不良なネットワーキングハードウェア(ケーブル、ルーターなど)が原因で発生することがあります。
  • 不明なホスト – このエラーは、DNSがホスト名をIPアドレスに解決できないことを意味します。正しいホスト名を入力しているか確認してください。ルーターが正常に動作していない可能性がある場合は、ルーターを再起動してみてください。
  • TTLが転送中に期限切れになりました – このエラーは、ICMPリクエストが宛先に到達する前に期限切れになったことを意味します。pingパケットが宛先ホストに到達する前にゼロ(0)になります。ほとんどの場合、ルーティングテーブルの設定ミスがこのエラーの原因となります。問題があるかどうかを確認するために、ルートテーブルを確認してください。

知らなかったら: ゲームコミュニティでは、プレイヤーはpingをゲームサーバーへの接続として参照しています。低いpingは、特に高速なゲームではより応答性のある接続を意味します。高いpingは、応答性の低い接続を示し、ゲームが遅く感じられることがあります。

一部のインターネットサービスプロバイダ(ISP)は、存在しないウェブサイトに接続しようとすると、エラーメッセージの代わりに検索ページを返すことがあります。エラーではなく応答を受け取るため、誤った結果が表示されることがあります。

pingの結果をファイルに保存する

ほとんどのコマンドは、画面に結果を表示するだけであり、Linuxのpingコマンドも同様です。Linuxのターミナルには、出力のリダイレクトに使用する組み込みの演算子があります。

以下のリダイレクト演算子があります:

>)文字は、ファイルの内容を上書きします。そして、

>>)文字は、出力を既存の内容に追加します。

では、なぜpingの結果をファイルに保存したいのでしょうか?主に記録と後でテキストエディタやログ解析ツールを使用した分析のためです。

また、スプレッドシートプログラムを使用して、ping時間の変化を示すグラフを作成することもできます。

以下のコマンドを実行して、pingの出力をファイルに保存します。このコマンドは、pingコマンドのすべての標準出力をディスク上のlog.txtという名前のファイルに書き込みます。

ping -c 10 localhost > log.txt

pingコマンドが実行されている間、画面には出力が表示されないことに注意してください。

今、log.txtファイルをテキストエディタ(例:nano)で開くか、catコマンドを実行してファイルの内容を表示します。

# テキストエディタで開く
nano log.txt
# または
# 内容を画面に表示する
cat log.txt
Opening the ping output file in a text editor
Displaying the ping output file contents on the screen

結論

このチュートリアルでは、さまざまな実用例を使用してLinuxでpingコマンドを使用する方法を学びました。また、pingの出力をディスク上のファイルに保存して後で分析できるようにする方法も学びました。

この時点で、pingコマンドの動作方法と役立つ方法について良い理解を持っているはずです。しかし、あなたがすぐにあらゆるものにpingを開始する前に、ICMPトラフィックを許可するためにいくつかのルールをセキュリティグループで有効にする必要があります

読んでいただき、楽しい学びを!

Source:
https://adamtheautomator.com/ping-command-in-linux/