Ping(ネットワークユーティリティ)

Ping
原作者Mike Muuss
開発者様々なオープンソースおよび商用開発者
初回リリース1983年;42年前 ( 1983 )
プラットフォームクロスプラットフォーム
タイプコマンド
ライセンスパブリックドメインBSDGPLMIT

Pingは、インターネットプロトコル(IP)ネットワーク上のホストの到達可能性をテストするために使用されるコンピュータネットワーク管理ソフトウェアユーティリティです。ほとんどの組み込みネットワーク管理ソフトウェアを含む、幅広いオペレーティングシステムで利用できます

pingは、送信元ホストから宛先コンピュータに送信され、送信元にエコーバックされるメッセージの往復時間を測定します。この名前は、音波を送信し、そのエコーを聴いて水中の物体を検出するアクティブソナーの用語に由来しています。 [1]

pingは、インターネット制御メッセージプロトコル(ICMP)パケットによって動作します。pingは、対象ホストにICMPエコー要求を送信し、 ICMPエコー応答を待機することを含みます。プログラムはエラー、パケット損失、および結果の統計概要を報告します。通常、最小値、最大値、平均ラウンドトリップ時間、および平均の標準偏差が含まれます。

コマンドラインオプション端末出力は実装によって異なります。オプションには、ペイロードのサイズ、テスト回数、プローブが通過するネットワークホップ数(TTL)の制限、要求間隔、応答を待機する時間などが含まれます。多くのシステムでは、ICMPv6を実装するインターネットプロトコルバージョン6 (IPv6)ネットワークでのテスト用に、コンパニオンユーティリティping6を提供しています。

歴史

DOS版のping

pingユーティリティは、 1983年12月にMike Muussが弾道研究所(現在は米国陸軍研究所)に勤務していたときに作成されました。David Millsによる、IPネットワークの診断と測定にICMPエコーパケットを使用するという発言が、Muussにネットワークの問題をトラブルシューティングするこのユーティリティの作成を促しました。[1]作者は、その方法論がソナーのエコーロケーションに似ていることから、ソナーの音にちなんでこのユーティリティに名前を付けました。 [1] [2] PINGの頭字語である Packet Internet Groperは、30年以上使用されています。Muussによると、彼の観点からするとPINGは頭字語として意図されたものではないとのことですが、Millsによる名前の拡張は認めています。[1] [3]最初にリリースされたバージョンはパブリックドメインソフトウェアでした。それ以降のバージョンはすべてBSDライセンスでライセンスされています。Pingは4.3BSDに初めて含まれていました[4] FreeDOSバージョンはErick Engelkeによって開発され、GPLでライセンスされています。[5] ReactOS版はTim Crawfordが開発しました。MITライセンスの下でライセンスされています[6]

すべてのホストはICMPエコー要求を処理し、それに応じてエコー応答を発行する必要があります。[7]

呼び出し例

以下は、Linux上でpingを実行し、ターゲットホストwww.example.comに5つのプローブ(デフォルトでは1秒間隔、-iオプションで設定可能)を送信した出力です。

 $ ping  -c 5 www.example.com  www.example.com (93.184.216.34) へのPING:56データバイト93.184.216.34からの64バイト:icmp_seq=0 ttl=56 time=11.632ms 93.184.216.34からの64バイト:icmp_seq=1 ttl=56 time=11.726ms 93.184.216.34からの64バイト:icmp_seq=2 ttl=56 time=10.683ms 93.184.216.34からの64バイト:icmp_seq=3 ttl=56 time=9.674ms 93.184.216.34からの64バイト:icmp_seq=4 ttl=56時間=11.127ミリ秒--- www.example.com ping統計 ---送信パケット5個、受信パケット5個、パケットロス0.0%、ラウンドトリップの最小/平均/最大/標準偏差=9.674/10.968/11.726/0.748ミリ秒

出力には、各プローブメッセージと取得された結果がリストされます。最後に、テスト全体の統計がリストされます。この例では、最短ラウンドトリップ時間は9.674ミリ秒、平均は10.968ミリ秒、最大値は11.726ミリ秒でした。測定値の標準偏差は0.748ミリ秒でした。

エラー表示

ターゲットホストからの応答がない場合、ほとんどの実装では何も表示されないか、タイムアウトに関する通知が定期的に表示されます。問題を示す可能性のあるping結果には、以下が含まれます。

  • H、 !N、または!P  – ホスト、ネットワーク、またはプロトコルに到達できません
  • S  – ソースルートが失敗しました
  • F  – フラグメンテーションが必要
  • Uまたは!W  – 宛先ネットワーク/ホスト不明
  • I  – 送信元ホストが分離されている
  • A  – 宛先ネットワークとの通信が管理上禁止されている
  • Z  – 宛先ホストとの通信が管理上禁止されている
  • Q  – このToSでは、宛先ネットワークに到達できません
  • T  – このToSでは、宛先ホストに到達できません
  • X  – 通信が管理上禁止されている
  • V  – ホストの優先順位違反
  • C  – 優先順位カットオフが有効

エラーが発生した場合、ターゲットホストまたは中間ルータは、ホスト到達不能転送中のTTL超過などのICMPエラーメッセージを返します。さらに、これらのメッセージには元のメッセージの最初の8バイト(この場合は、クエンチ値を含むICMPエコー要求のヘッダー)が含まれるため、pingユーティリティは応答を元のクエリと照合できます。[8]

メッセージ形式

IPv4で転送されるICMPパケット

IPv4で転送されるICMPパケットは次のようになります。

IPv4データグラム
オフセットオクテット0123
オクテットビット012345678910111213141516171819202122232425262728293031
00バージョン (4)IHL  (5)DSCP  (0)ECN  (0)全長
432識別フラグフラグメントオフセット
864存続時間プロトコル (1)ヘッダーチェックサム
1296送信元アドレス
16128宛先アドレス
ICMPエコー要求パケット
20160タイプ (8)コード (0)チェックサム
24192識別子シーケンス番号
28224(ペイロード)
32256
タイプ: 8ビット
「エコー要求」を示すには8に設定します。[9]
チェックサム:16ビット
チェックサムは、ICMPパケットのタイプフィールドから始まる16ビットの1の補数の合計の1の補数です。 [10]ペイロードを含みます。IPヘッダーは含まれません。
識別子:16ビット
クライアントは、応答とその応答の原因となった要求を照合するために使用できます。
シーケンス番号:16ビット
クライアントは、応答とその応答の原因となった要求を照合するために使用できます。
ペイロード:可変長
オプション。異なる種類の応答のペイロード。任意の長さにすることができ、実装の詳細に任せます。

ほとんどのLinuxシステムは、すべてのpingプロセスに一意の識別子を使用し、シーケンス番号はそのプロセス内で増加する番号です。Windowsは、Windowsのバージョンによって異なる固定の識別子と、起動時にのみリセットされるシーケンス番号を使用します。

エコー応答は次のように返されます

ICMPエコー応答パケット
20160タイプ (0)コード (0)チェックサム
24192識別子シーケンス番号
28224(ペイロード)
32256
タイプ: 8ビット
「エコー応答」を示すには0に設定します。[9]
識別子:16ビット
エコー要求からコピーされて返されます。
シーケンス番号:16ビット
エコー要求からコピーされて返されます。
ペイロード:可変長
オプション。ペイロードはエコー要求からコピーされて返されます。

IPv6で伝送されるICMPv6パケット

IPv6で伝送されるICMPパケットは次のようになります。

IPv6データグラム
オフセットオクテット0123
オクテットビット012345678910111213141516171819202122232425262728293031
00バージョン (6)トラフィッククラスフローラベル
432ペイロード長次ヘッダー (58)ホップリミット
864送信元アドレス
1296
16128
20160
24192宛先アドレス
28224
32256
36288
ICMPv6エコー要求パケット
40320タイプ (128)コード (0)チェックサム
44352識別子シーケンス番号
48384(ペイロード)
52416
タイプ: 8ビット
「エコー要求」を示すには128に設定します
識別子:16ビット
クライアントは、応答とその応答の原因となった要求を照合するために使用できます。
シーケンス番号:16ビット
クライアントは、応答とその応答の原因となった要求を照合するために使用できます。
チェックサム:16ビット
チェックサムはICMPメッセージ(タイプフィールドから始まる)から計算され、先頭にIPv6疑似ヘッダーが付加されます。[11]
ペイロード:可変長
オプション。異なる種類の応答のペイロード。任意の長さにすることができ、実装の詳細に任せます。

ほとんどのLinuxシステムは、すべてのpingプロセスに一意の識別子を使用し、シーケンス番号はそのプロセス内で増加する番号です。Windowsは、Windowsのバージョンによって異なる固定の識別子と、起動時にのみリセットされるシーケンス番号を使用します。

エコー応答は次のように返されます

ICMPv6エコー応答パケット
40320タイプ (129)コード (0)チェックサム
44352識別子シーケンス番号
48384(ペイロード)
52416
タイプ: 8ビット
「エコー応答」を示すには129に設定します。
識別子:16ビット
エコー要求からコピーされて返されます。
シーケンス番号:16ビット
エコー要求からコピーされて返されます。
ペイロード:可変長
オプション。ペイロードはエコー要求からコピーされて返されます。

ペイロード

パケットのペイロードは通常、ASCII文字で埋められます。tcpdumpユーティリティ出力では、次の例の最後の32バイト( 0x0800で始まる8バイトのICMPヘッダーの後)がそれを示します

 16:24:47 966461 IP (tos 0x0、ttl 12 8、id 1510 3、off set 0 flag s [ none]、proto: ICMP (1)、長さ: 60 ) 19 2. 16 8. 14 6. 22 > 19 2. 16 8. 14 4.5: ICMPエコー要求、id 1、seq 38 長さ40 0x 0000 : 4500 003c 3aff 0000 8001 5c55 c0a8 9216 E..<:.....\U .... 0x 0010 : c0a8 9005 0800 4d35 0001 0026 6162 6364 ......M5...&abcd 0x 0020 : 6566 6768 696a 6b6c 6d6e 6f70 7172 7374 efghijklmnopqrst 0x 0030 : 7576 7761 6263 6465 6667 6869  uvwabcdefghi                                                                

ペイロードには、送信時刻を示すタイムスタンプとシーケンス番号が含まれる場合がありますが、この例ではこれらは含まれていません。これにより、pingは各パケットの送信時刻を記録する必要なく、ステートレスな方法でラウンドトリップ時間を計算できます

ペイロードには、Wake-on-LANプロトコルのマジック パケットも含まれる場合がありますが、その場合の最小ペイロードは、示されているよりも長くなります。ホストが休止状態でスリープしている場合、エコー要求は通常応答を受け取りませんが、ホストのインターフェイスがウェイクアップ要求を受け入れるように構成されている場合は、ホストはスリープ状態からウェイクアップします。ホストがすでにアクティブであり、着信 ICMPエコー要求パケットへの応答を許可するように構成されている場合は、返される応答に同じペイロードが含まれている必要があります。これを使用して、リモート ホストが実際にウェイクアップされたことを検出し、一定の遅延後に新しい要求を繰り返してホストがネットワーク サービスを再開できるようにします。ホストが低電力アクティブ状態でスリープしていただけの場合は、1 回の要求で、エコー応答サービスが有効になっている場合は、そのサービスが即座に応答できる程度にホストがウェイクアップされます。ホストはすべてのデバイスを完全にウェイクアップする必要はなく、短い遅延後に低電力モードに戻ることができます。このような設定は、低電力アクティブモードでしばらく時間が経過した後、ホストが休止状態に入り、ウェイクアップ遅延が大幅に長くなるのを回避するために使用できます。[要出典]

IPヘッダーとICMPヘッダーを含むパケットは、ネットワークの最大転送単位を超えてはなりません。 そうしないと、断片化されるリスクがあります。

セキュリティの抜け穴

サービス拒否攻撃を実行するために、攻撃者は可能な限り高速にping要求を送信し、ICMPエコー要求で被害者を圧倒する可能性があります。この手法はpingフラッドと呼ばれます。[12]

複数のアドレスへのping要求、pingスイープは、ネットワーク上のすべてのホストのリストを取得するために使用される場合があります。

参照

参考文献

  1. ^ abcd Mike Muuss . 「PINGプログラムの物語」。米国陸軍研究所。2019年10月25日時点のオリジナルからのアーカイブ。 2010年9月8日閲覧。BSD UNIX 4.2a用にPINGを書くきっかけとなったのは、1983年7月にDave Mills博士が何気なく言った言葉でした…私はエコーロケーションの原理全体に触発され、ソナーの音にちなんでPINGと名付けました…私の見解では、PINGはPacket InterNet Grouperの頭字語ではなく、ソナーのアナロジーです。しかし、Dave Millsがこの名前の拡張を提案したと間接的に聞いたので、おそらく私たちのどちらも正しいのでしょう。
  2. ^ Salus, Peter (1994). UNIXの25年. Addison-Wesley . ISBN 978-0-201-54777-1.
  3. ^ Mills, DL (1983年12月). インターネット遅延実験. IETF . doi : 10.17487/RFC0889 . RFC 889. 2019年11月26日閲覧.
  4. ^ "man page ping section 8". www.manpagez.com .
  5. ^ "ibiblio.org FreeDOS Package -- ping (Networking)". www.ibiblio.org .
  6. ^ "GitHub - reactos/reactos: A free Windows-compatible Operating System". 2019年8月8日 – GitHub経由.
  7. ^ R. Braden編 (1989年10月). インターネットホストの要件 -- 通信層. ネットワークワーキンググループ. doi : 10.17487/RFC1122 . STD 3. RFC 1122 インターネット標準3。RFC 1349、4379、5884、6093、6298、6633、6864、8029、9293 により更新。すべてのホストは、エコー要求を受信し、対応するエコー応答を送信するICMPエコーサーバー機能を実装する必要があります。
  8. ^ 「ICMP:インターネット制御メッセージプロトコル」。repo.hackerzvoice.net 2000年1月13日。2016年8月4日時点のオリジナルからのアーカイブ。 2014年12月4日閲覧
  9. ^ ab J. Postel(1981年9月)。インターネット制御メッセージプロトコル - DARPAインターネットプログラムプロトコル仕様。ネットワークワーキンググループ。doi 10.17487 /RFC0792標準5。RFC 792 インターネット標準5。RFC 760、777、IEN 109、128 を更新。RFC 950、4884、6633、6918により更新。
  10. ^ 「RFCソースブックのICMPに関するページ」。2018年7月6日時点のオリジナルからのアーカイブ。 2010年12月20日閲覧
  11. ^ A. Conta; S. Deering (2006年3月). M. Gupta (編). インターネットプロトコルバージョン6 (IPv6) 仕様のためのインターネット制御メッセージプロトコル (ICMPv6). ネットワークワーキンググループ. doi : 10.17487/RFC4443 . STD 89. RFC 4443. インターネット標準89。RFC 2463 を廃止。RFC 2780を更新。RFC 4884により更新
  12. ^ 「Pingフラッドとは | ICMPフラッド | DDoS攻撃用語集 | Imperva」ラーニングセンター。 2021年7月26日閲覧

参考文献

「https://en.wikipedia.org/w/index.php?title=Ping_(ネットワークユーティリティ)&oldid=1320953756」より取得