コマンドラインのマニュアル

Man » pingマニュアルオンライン - ping manページの詳細なオンラインドキュメント

🌍
ping - ネットワークホストにICMP ECHO_REQUESTを送信する

概要

ping [-aAbBdCDfhHLnOqrRUvV346] [-c count] [-e identifier] [-F flowlabel] [-i interval]
[-I interface] [-l preload] [-m mark] [-M pmtudisc_option] [-N nodeinfo_option]
[-w deadline] [-W timeout] [-p pattern] [-Q tos] [-s packetsize] [-S sndbuf] [-t ttl]
[-T timestamp option] [hop...] {destination}

説明

pingは、ICMPプロトコルの必須のECHO_REQUESTデータグラムを使用して、ホストまたはゲートウェイからICMP ECHO_RESPONSEを要求します。ECHO_REQUESTデータグラム(「ping」)には、IPおよびICMPヘッダー、`struct timeval`、およびパケットを埋めるために使用される任意の数の「パディング」バイトが含まれます。

pingは、IPv4とIPv6の両方をサポートします。-4または-6のいずれかを指定することにより、一方のみを使用するように強制できます。

pingは、IPv6ノード情報クエリ(RFC4620)も送信できます。中間ホップは許可されない場合があります。これは、IPv6ソースルーティングが非推奨になったためです(RFC5095)。

オプション

-3
RTT精度の設定(結果時間を切り上げない)。

-4
IPv4のみを使用します。

-6
IPv6のみを使用します。

-a
音声によるping。

-A
適応型ping。パケット間隔は往復時間に応じて調整され、結果としてネットワークに存在する未応答のプローブは1つ(またはpreloadが設定されている場合はそれ以上)になります。デフォルトのインターバルは2msです。詳細については、-iオプションを参照してください。RTTが低いネットワークでは、このモードは基本的にフラッドモードと同等です。

-b
ブロードキャストアドレスへのpingを許可します。

-B
pingがプローブの送信元アドレスを変更しないようにします。アドレスは、pingが開始されたときに選択されたアドレスにバインドされます。

-c count
`count`個のECHO_REQUESTパケットを送信した後で停止します。deadlineオプションを使用すると、pingは`count`個のECHO_REPLYパケットを待機し、タイムアウトが発生すると終了します。

-C
ソケットの作成時にconnect()システムコールを呼び出します。

-d
使用中のソケットでSO_DEBUGオプションを設定します。基本的に、このソケットオプションはLinuxカーネルでは使用されません。

-D
各行の前にタイムスタンプ(gettimeofdayと同じ形式のUnix時間+マイクロ秒)を出力します。

-e identifier
ECHO_REQUESTの識別フィールドを設定します。値0は、生のソケットを使用することを示します(ICMPデータグラムソケットではサポートされていません)。このフィールドの値は、-vオプションで出力できます。

-f
フラッドping。送信される各ECHO_REQUESTに対して、「.」が1つ出力され、受信される各ECHO_REPLYに対して、バックスペースが出力されます。これにより、ドロップされたパケットの数が迅速に表示されます。インターバルが指定されていない場合は、インターバルをゼロに設定し、パケットが受信されるか、または1秒間に100回、いずれか多い方でパケットを出力します。このオプションをゼロのインターバルで使用できるのは、スーパーユーザーのみです。

-F フローラベル
IPv6 のみ。エコーリクエストパケットで、20ビットのフローラベル(16進数)を割り当てて設定します。値がゼロの場合、カーネルはランダムなフローラベルを割り当てます。

-h
ヘルプを表示します。

-H
出力に対してDNS名解決を強制します。数値の宛先、またはデフォルトでは実行されない-fオプションの場合に役立ちます。DNS解決の問題を回避するのにも役立つ場合があります。以前に定義された-nオプションをオーバーライドします。IPUTILS_PING_PTR_LOOKUP環境変数も参照してください。

-i 間隔
各パケットを送信する間の待機時間を秒単位で設定します。小数点区切り文字としてピリオドを使用する実数も許可されます(ロケール設定に関係なく)。デフォルトでは、通常1秒間待機するか、フラッドモードでは待機しません。2ミリ秒未満の間隔を設定できるのはスーパーユーザーのみです。ブロードキャストおよびマルチキャストpingの場合、通常ユーザーに対する最小制限は1秒です。

-I インターフェース
インターフェースは、アドレス、インターフェース名、またはVRF名です。インターフェースがアドレスの場合、指定されたインターフェースのアドレスを送信元アドレスとして設定します。インターフェースがインターフェース名の場合、指定されたインターフェースを送信元インターフェースとして設定します。インターフェースがVRF名の場合、各パケットは対応するルーティングテーブルを使用してルーティングされます。この場合、-Iオプションを繰り返して、送信元アドレスを指定できます。注:IPv6の場合、リンクローカルスコープアドレスへのpingを実行する場合、リンク指定(宛先の末尾の'%'表記、またはこのオプション)を使用できますが、必須ではなくなりました。

-l プリロード
プリロードが指定されている場合、pingは応答を待たずに、指定された数のパケットを送信します。3より大きいプリロードを選択できるのはスーパーユーザーのみです。

-L
マルチキャストパケットのループバックを抑制します。このフラグは、pingの宛先がマルチキャストアドレスの場合にのみ適用されます。

-m マーク
送信するパケットにマークを設定します。これは、カーネル内のさまざまな理由(ポリシーベースのルーティングを使用して、特定の送信処理を選択するなど)で役立ちます。CAP_NET_ADMINまたはCAP_NET_RAW(Linux 5.17以降)機能が必要です。socket(7)を参照してください。

-M pmtudisc_opt
パスMTU検出戦略を選択します。pmtudisc_optionは、do(DFフラグを設定しますが、カーネルによるPMTUチェックの対象となり、サイズが大きすぎるパケットは拒否されます)、want(PMTU検出を実行し、パケットサイズが大きい場合にローカルでフラグメント化します)、probe(DFフラグを設定し、PMTUチェックをバイパスします。プローブに役立ちます)、またはdont(DFフラグを設定しません)のいずれかです。

-N nodeinfo_option
IPv6のみ。エコーリクエストの代わりに、IPv6ノード情報クエリ(RFC4620)を送信します。CAP_NET_RAW機能が必要です。

help
NIサポートに関するヘルプを表示します。

name
ノード名のクエリを行います。

ipv6
IPv6アドレスのクエリを行います。いくつかのIPv6固有のフラグがあります。

ipv6-global
IPv6グローバルスコープアドレスを要求します。

ipv6-sitelocal
IPv6サイトローカルアドレスを要求します。

ipv6-linklocal
IPv6リンクローカルアドレスを要求します。

ipv6-all
他のインターフェース上のIPv6アドレスを要求します。

ipv4
IPv4アドレスのクエリを行います。IPv4固有のフラグが1つあります。

ipv4-all
他のインターフェース上のIPv4アドレスを要求します。

subject-ipv6=ipv6addr
IPv6サブジェクトアドレス。

subject-ipv4=ipv4addr
IPv4サブジェクトアドレス。

subject-name=nodename
サブジェクト名。複数のドットが含まれている場合、完全修飾ドメイン名であると想定されます。

subject-fqdn=nodename
サブジェクト名。常に完全修飾ドメイン名であると想定されます。

-n
数値出力のみ。ホストアドレスのシンボリック名の参照は行いません(逆引きDNS解決)。これは、数値宛先または-fオプションの場合のデフォルトです。以前に定義された-Hオプションをオーバーライドします。IPUTILS_PING_PTR_LOOKUP環境変数も参照してください。

-O
未処理のICMP ECHO応答を、次のパケットを送信する前に報告します。これは、-Dオプションと組み合わせて、出力診断ファイルにログを記録し、応答が欠落しているかどうかを検索する場合に役立ちます。

-p pattern
送信するパケットを埋めるために、最大16バイトの「パディング」バイトを指定できます。これは、ネットワーク内のデータに依存する問題を診断するのに役立ちます。たとえば、-p ffとすると、送信するパケットはすべて1で埋められます。

-q
静かな出力。起動時と終了時に表示される要約行を除いて、何も表示されません。

-Q tos
ICMPデータグラムのQuality of Service関連ビットを設定します。tosは10進数(pingのみ)または16進数の数値にすることができます。

RFC2474では、これらのフィールドは8ビットのDifferentiated Services(DS)として解釈され、次のものを含みます。最下位2ビット(ビット0-1)は、個別のデータ、最上位6ビット(ビット2-7)は、Differentiated Services Codepoint(DSCP)です。RFC2481およびRFC3168では、ビット0-1はECNに使用されます。

歴史的には(RFC1349、RFC2474によって廃止)、これらのフィールドは次のように解釈されていました。最下位ビット(ビット0)は予約済み(現在は輻輳制御として再定義されています)、1〜4はType of Service、最上位ビット(ビット5〜7)はPrecedenceです。

-r
通常のルーティングテーブルをバイパスし、接続されたインターフェイス上のホストに直接送信します。ホストが直接接続されたネットワークにない場合、エラーが返されます。このオプションは、-Iオプションも使用して、ルーティングを提供しないインターフェイスを介してローカルホストにpingするために使用できます。

-R
pingのみ。ルートを記録します。ECHO_REQUESTパケットにRECORD_ROUTEオプションを含め、返されたパケットでルートバッファーを表示します。IPヘッダーは、9つのルートにすぎないことに注意してください。多くのホストはこのオプションを無視または破棄します。

-s packetsize
送信するデータバイト数を指定します。デフォルトは56で、これは8バイトのICMPヘッダーデータと組み合わせると、64バイトのICMPデータになります。最大許容値は、IPv4の場合は65507(-R、-T、またはIntermediate hopsの場合、65467)、IPv6の場合は65527ですが、ほとんどのシステムでは、この値をシステムに依存するより小さい値に制限します。

-S sndbuf
ソケットsndbufを設定します。指定しない場合、1つ以上のパケットをバッファーに格納するように選択されます。

-t ttl
pingのみ。IP Time to Liveを設定します。

-T timestamp option
特別なIPタイムスタンプオプションを設定します。timestamp optionは、tsonly(タイムスタンプのみ)、tsandaddr(タイムスタンプとアドレス)、tsprespec host1 [host2 [host3 [host4]]](タイムスタンプが事前に指定されたホップ)のいずれかになります。

-U
完全なユーザー間の遅延を印刷します(以前の動作)。通常、pingはネットワークのラウンドトリップ時間を表示しますが、これはDNS障害などによって異なる場合があります。

-v

詳細な出力を表示します。マルチキャストアドレスにpingを実行する際に、重複応答を抑制しません。

-V

バージョンを表示して終了します。

-w 期限

pingが終了するまでのタイムアウト(秒単位)を指定します。この場合、指定されたパケット数が送信または受信された後でも、pingは停止しません。指定された期限が切れるか、指定されたプローブの応答がすべて受信されるか、またはネットワークからのエラー通知が発生するまで待ちます。

-W タイムアウト

応答がない場合に待機する時間(秒単位)を指定します。このオプションは、応答がない場合のみタイムアウトに影響します。それ以外の場合は、pingは2回の往復時間(RTT)を待ちます。小数点としてピリオドを使用する実数(ロケール設定に関係なく)を指定できます。0は無限のタイムアウトを意味します。

pingをフォールト分離に使用する場合、最初にローカルホストで実行して、ローカルネットワークインターフェースが正常に動作していることを確認する必要があります。次に、より遠くにあるホストとゲートウェイに対して「ping」を実行します。往復時間とパケット損失の統計が計算されます。重複パケットを受信した場合、それらはパケット損失の計算には含まれませんが、これらのパケットの往復時間は、最小/平均/最大/標準偏差の往復時間の計算に使用されます。

母集団標準偏差(mdev)は、基本的に各ping RTTが平均RTTからどれだけ離れているかの平均値です。mdevが高いほど、RTTの変動が大きくなります(時間とともに)。RTTの変動が大きいと、バルク転送の速度に問題が発生します(厳密には必要な時間よりも長くなり、変動により送信側はACKを待つことになるため)。また、VoIPの品質も中程度から劣悪になります。

指定された数のパケットが送信(および受信)された場合、またはプログラムがSIGINT信号で終了された場合、簡単な概要が表示されます。SIGQUIT信号を使用して、プロセスの終了なしで、より短い現在の統計情報を取得できます。

このプログラムは、ネットワークのテスト、測定、および管理を目的としています。ネットワークに負荷をかける可能性があるため、通常の使用時や自動化されたスクリプトからpingを使用することは避けるべきです。

環境

IPUTILS_PING_PTR_LOOKUP環境変数を0に設定すると、デフォルトで逆DNS解決(PTRルックアップ)が無効になります。ただし、-Hまたは-nオプションによって上書きされます。

終了ステータス

pingが応答パケットをまったく受信しない場合、終了コード1で終了します。パケット数と期限の両方が指定され、期限が切れるまでに指定された数よりも少ないパケットを受信した場合、終了コード1で終了します。その他のエラーが発生した場合、終了コード2で終了します。それ以外の場合は、終了コード0で終了します。これにより、終了コードを使用して、ホストがアクティブであるかどうかを確認できます。

IPv6リンクローカル宛先

IPv6の場合、宛先アドレスがリンクローカルスコープであり、pingがICMPデータグラムソケットを使用する場合、出力インターフェースを指定する必要があります。pingがrawソケットを使用する場合、出力インターフェースを指定することは厳密には必要ありませんが、複数の可能な出力インターフェースがある場合に曖昧さを回避するために、指定することをお勧めします。


出力インターフェースを指定する方法は2つあります。

% 記号を使用する
宛先アドレスの末尾に%を付け、出力インターフェース名またはifindexを指定します。
例:

ping fe80::5054:ff:fe70:67bc%eth0

ping fe80::5054:ff:fe70:67bc%2

-I オプションを使用する
ICMPデータグラムソケットを使用する場合、この方法は以下のカーネルバージョン以降でサポートされます。5.17、5.15.19、5.10.96、5.4.176、4.19.228、4.14.265。また、musl libcではサポートされていません。

ICMPパケットの詳細

オプションを含まないIPヘッダーは20バイトです。ICMP ECHO_REQUESTパケットには、追加の8バイトのICMPヘッダーと、任意の量のデータが含まれます。packetsizeが指定された場合、これはこの追加データのサイズを示します(デフォルトは56)。したがって、ICMP ECHO_REPLYタイプのIPパケット内に受信されるデータの量は、要求されたデータスペースよりも常に8バイト多くなります(ICMPヘッダー)。

データスペースがstruct timevalのサイズ以上の場合、pingは往復時間の計算に使用するタイムスタンプをこのスペースの先頭のバイトに含めます。データスペースが短い場合、往復時間は表示されません。

重複パケットと破損パケット

pingは、重複パケットと破損パケットを報告します。重複パケットは決して発生すべきではなく、不適切なリンクレベルでの再送によって引き起こされるようです。重複パケットは多くの状況で発生する可能性があり、通常は(ほとんどの場合)良い兆候ではありませんが、少量の重複パケットの存在が必ずしもアラームの原因になるとは限りません。

破損パケットは明らかに深刻な問題であり、通常はpingパケットのパスにあるどこかのハードウェア(ネットワーク内またはホスト内)の故障を示します。

IDの衝突

TCPやUDPとは異なり、TCPやUDPはポートを使用してデータを配信する受信者を一意に識別しますが、ICMPは識別フィールド(ID)を使用して識別します。したがって、同じマシン上で、同時に2つのpingプロセスが同じIDを使用する場合、エコー応答が誤った受信者に配信される可能性があります。これは、16ビットのIDフィールドのサイズの制限による既知の問題です。これは、pingパケットのペイロードにIDをエンコードしない限り、現時点では修正できないプロトコルの歴史的な制限です。pingはDIFFERENT ADDRESSエラーを出力し、パケット損失は負の値になります。

pingはPIDを使用して一意の番号を取得します。/proc/sys/kernel/pid_maxのデフォルト値は32768です。pingを頻繁に使用し、pid_maxが65535を超えるシステムでは、衝突が発生することが避けられません。

異なるデータパターンを試す

(インター)ネットワーク層は、データ部分に含まれるデータに応じてパケットを異なる扱いをするべきではありません。残念ながら、データに依存する問題がネットワークに侵入し、長期間検出されずに残っていることが知られています。多くの場合、問題を引き起こす特定のパターンは、「トランジション」が不十分なパターンであり、たとえばすべて1またはすべて0、またはエッジにあるパターン(ほとんどすべて0など)です。コマンドラインで(たとえば)すべて0のデータパターンを指定するだけでは十分ではない場合があります。なぜなら、問題のあるパターンはデータリンクレベルにある可能性があり、入力した内容とコントローラーが送信する内容との関係は複雑になる可能性があるからです。


これは、データに依存する問題がある場合、それを発見するために多くのテストを行う必要があることを意味します。幸運なことに、ネットワーク経由で送信できないファイル、または他の類似の長さのファイルよりも転送に時間がかかるファイルを見つけることができるかもしれません。次に、そのファイルを調べて、-p オプションを使用した ping でテストできる繰り返しのパターンを探します。

TTL の詳細

IP パケットの TTL 値は、パケットが破棄される前に通過できる IP ルーターの最大数です。現在の運用では、インターネット上の各ルーターは TTL フィールドを正確に 1 ずつ減分することが予想されます。

TCP パケットの TTL フィールドは、さまざまな値をとることができます。このフィールドの可能な最大値は 255 で、推奨される初期値は 64 です。詳細については、RFC9293 の TCP/下位レベルインターフェイスのセクションを参照してください。

通常、ping は受信したパケットから TTL 値を出力します。リモートシステムが ping パケットを受信すると、その応答で TTL フィールドに対して次の 3 つのいずれかの処理を行うことができます。

変更しない。これは、4.3BSD Tahoe リリース前の Berkeley Unix システムで行っていました。この場合、受信パケットの TTL 値は 255 からラウンドトリップパス上のルーターの数を取り除いた値になります。

255 に設定する。これは、現在の Berkeley Unix システムが行っています。この場合、受信パケットの TTL 値は 255 からリモートシステムから ping を実行しているホストまでのパス上のルーターの数を取り除いた値になります。

別の値に設定する。一部のシステムは、ICMP パケットに対して TCP パケットで使用するのと同じ値を、たとえば 30 または 60 を使用します。また、完全に異なる値を設定するシステムもあります。

バグ

多くのホストとゲートウェイは RECORD_ROUTE オプションを無視します。

RECORD_ROUTE などのオプションを完全に活用するには、IP ヘッダーの最大長が短すぎます。ただし、これについてできることはあまりありません。

flood ping は一般的には推奨されません。ブロードキャストアドレスへの flood ping は、非常に制御された条件下でのみ行う必要があります。

関連項目

ip(8)、ss(8)。

履歴

ping コマンドは 4.3BSD に登場しました。

ここに説明されているバージョンは、Linux 専用のその派生バージョンです。

バージョン s20150815 以降、ping6 バイナリは存在しません。ping にマージされました。ping6 という名前のシンボリックリンクを作成すると、以前と同じ機能になります。

セキュリティ

ping は、次のいずれかの条件が満たされる場合に CAP_NET_RAW 機能を使用して実行する必要があります。1) プログラムが非エコークエリ(-N オプションを参照)に使用される場合、または ICMP_REQUEST の識別フィールドが 0 に設定されている場合(-e オプションを参照)、または 2) カーネルが ICMP データグラムソケットをサポートしていない場合、または 3) ユーザーが ICMP エコーソケットを作成することを許可されていない場合。このプログラムは set-uid root として使用できます。

入手可能性

ping は iputils パッケージの一部です。