PING(8) | System Manager's Manual | PING(8) |
ping
— ICMP
ECHO_REQUEST
パケットをネットワーク上のホストに送る
ping
[-LRdfnqrv
]
[-c
count]
[-i
wait]
[-l
preload]
[-p
pattern]
[-s
packetsize]
[-t
ttl]
[-w
waittime]
[-I
interface address]
ping
は ICMP の ECHO_REQUEST
データグラムを用いて、指定したホストやゲートウェイからの
ICMP ECHO_RESPONSE を引き出す。
ECHO_REQUEST データグラム (``pings'')
は IP と ICMP
ヘッダを持ち、それに
“struct timeval”
が続き、そして、パケットの残りを埋めるために任意個の
``pad'' バイトがある。
オプションは以下の通り:
その他のオプションは:
-c
countping
は応答を受け取るまで
10
秒間待ち、終了する。-d
SO_DEBUG
オプションを設定する。-f
-i
wait-f
オプションとは同時に指定できない。-l
preload-n
-p
pattern-p
ff
” は全て 1
で埋められたパケットを送る。-q
-R
-r
-s
packetsize-v
-w
waittimeping
を waittime
秒後に終了させる。以下のオプションに関する記述は、
ping
のソース、ならびに
FreeBSD の man
ページを参考に
日本語訳に際して追加された。
-I
interface-L
-t
ttl問題の切り分けのために
ping
を用いる場合、そのネットワークインタフェースが
up かつ running である
ことを確認するために、まずローカルホスト上で実行するべきである。
その後により遠くのホストやゲートウェイに
“ping” する。
往復時間 (round-trip time)
と消失パケットの統計が計算される。
重複した応答メッセージを受け取った場合、
それらはパケットの損失の計算には使われないが、
それにもかかわらずそうしたパケットの往復時間は、
その最小値・平均値・最大値の計算に用いられる。
指定した数のパケットが送られた
(そしてその応答を受け取った)
か、プログラムが
SIGINT
で終了させられた場合は、簡単な要約が表示される。
もし ping
が全く応答パケットを受け取らなかった場合には、終了コード
1 で終了する。
エラーがあればコード
2
で終了する。それ以外の場合はコード
0 で終了する。
これにより、終了コードで、あるホストが動いているかどうかを判断すること
ができる。
このプログラムはネットワークのテスト・計測・管理についての使用を意図している。
このプログラムがネットワークに強いる負荷を考えれば、
ping
をトラブルのないときや自動スクリプトから実行することは奨められない。
オプションなしの IP ヘッダは 20 バイトである。 ICMP ECHO_REQUEST パケットは、さらなる 8 バイトの ICMP ヘッダとそれに続く任意の量のデータからなる。 packetsize が与えられた時には、それは付加的なデータ部分のサイズ (デフォルトは 56) を示す。 よって ICMP ECHO_REPLY パケットの IP パケット内で受け取るデータの量は、 要求されたデータ領域より 8 バイト (ICMP ヘッダの分) 多い。
もしデータ領域が 8
バイトよりも大きければ、
ping
はその領域の先頭 8
バイトを、往復時間を計算するのに使うタイムスタンプを
含めるために使用する。
もし 8
バイトよりも少なければ、往復時間は得られない。
ping
は、重複パケットと障害パケットについて報告する。
重複パケットは
(ユニキャストアドレスに対しては)
起きるはずはないが、
不適切なリンク層での再送によって引き起こされるように思われる。
重複は様々な状況で起こる可能性がある。低いレベルの重複の存在は
必ずしも警告にはならないかもしれないが、よい兆候ではない。
障害を受けたパケットは、明らかに深刻な警告であり、多くの場合
ping
パケットの経路上
(ネットワーク内、もしくはそのホスト内)
のどこかに
壊れたハードウェアがあることを示す。
(インター) ネットワーク層は、決してデータ部分に含まれるデータによって パケットの扱いを変えたりしない。 不幸にも、データに依存した問題がネットワークへと侵入し、 長い時間発見されないままとなってしまう可能性が知られている。 問題のあるパケットの特定のパターンは多くの場合、 全てが 0 または全てが 1 のようなもの、 あるいは右端以外が殆んど 0 のような、 十分な ``遷移 (transitions)'' を持たないものである。 コマンドラインで (例えば) 全て 0 というデータパターンを指定することは、 必ずしも十分ではない。 なぜならば、その関心のあるのはデータリンク層におけるパターンであり、 あなたが入力したものと、コントローラーが送信するものとの関係は 複雑だからである。
これは、もしあなたがデータ依存性の問題を抱えているなら、
それを発見するためには
何回ものテストをしなければならないかもしれないことを意味する。
もし運が良ければ、ネットワークを通して送ることのできないファイルか、
同じような長さのファイルより、転送にずっと時間のかかるファイルを
発見することができるかもしれない。
そうしたら、そのファイルを調べ繰り返し現われるパターンを
ping
の -p
オプションを使ってテストできる。
IP パケットの TTL という値は、パケットが破棄される前に通過することができる IP ルータの最大値を示す。 現在の慣例から、インターネットの各ルータは TTL フィールドを正確に 1 減らすことを期待できる。
TCP/IP 規格は、 TCP パケットの TTL フィールドは 60 に設定されるべきであるとしているが、多くのシステムは もっと小さな値を使用している (4.3 BSD は 30、4.2 は 15)。
このフィールドの設定可能な最大値は 255 で、殆んどの Unix システムは ICMP ECHO_REQUEST の TTL フィールドを 255 に設定している。 これは、あるホストでは ``ping'' が通るのに、 telnet(1) や ftp(1) ではそのホストに届かない理由 (の一つ) である。
ping の通常の操作では、受け取ったパケットの ttl の値が表示される。 リモートのシステムが ping パケットを受け取った時、その応答における TTL フィールドには以下の 3 つのうちの 1 つを取ることができる。
ping
を行ったホストへの経路上のルータの数を、255
から引いたものである。多くのホストとゲートウェイは RECORD_ROUTE オプションを無視する。
RECORD_ROUTE を完全に有効にするには、IP ヘッダの最大長は短過ぎる。 しかし、これについてできることは多くない。
flood ping は一般的には推奨されないし、ブロードキャストアドレスへの flood ping は、きちんと条件を整えた場合においてのみ使用されるべきである。
日本語訳に際し、いくつかのオプションに関する記述を加えたが、正しいかど うか分からない。
ping
コマンドは 4.3BSD
から登場した。
August 30, 1996 | Linux NetKit (0.17) |