PING6(8)

名称
ping6 - ネットワークホストに対して ICMPv6 ECHO_REQUEST パケットを送信する

書式
ping6 [-dfHnNqRtvwW] [-a addrtype] [-b bufsiz] [-c count] [-h hoplimit] [-I interface] [-i wait] [-l preload] [-p pattern] [-P policy] [-S sourceaddr] [-s packetsize] [hops...] host

解説
ping6 は、 ICMPv6 プロトコルで必須の ICMP6_ECHO_REQUEST データグラムを使用し、ホストまたはゲートウェイから ICMP6_ECHO_REPLY データグラムを返させます。 ICMP6_ECHO_REQUEST データグラム (``ping'') は、IPv6 ヘッダと ICMPv6 を持ちます。 ICMPv6 の書式は RFC2463 に記述されています。 オプションは次の通りです:

-a addrtype
    ECHO_REQUEST ではなく　ICMPv6 ノード情報 (アドレス) 問い合わせパケットを 生成します。 addrtype は以下の文字より構成される文字列でなければなりません。
    a   応答者の全てのユニキャストアドレスを要求します。 もし省略されると、応答者のアドレスを持つ インタフェースに属するアドレスのみ要求します。
    c   応答者の IPv4 互換アドレスと IPv4 にマップされたアドレスを要求します。
    g   応答者のグローバルスコープアドレスを要求します。
    s   応答者のサイトローカルアドレスを要求します。
    l   応答者のリンクローカルアドレスを要求します。
    A   応答者のエニーキャストアドレスを要求します。 この文字がない場合、応答者はユニキャストアドレスのみ返します。 この文字がある場合、応答者はエニーキャストのみ返します。 仕様では、応答者のエニーキャストアドレスをどのように取得するかは 述べられていないことに注意してください。 これは実験的なオプションです。

-b bufsiz
    ソケットのバッファサイズを設定します。

-c count
    ECHO_RESPONSE パケットを count 回送出 (そして受信) してから終了します。

-d  使用されているソケットに SO_DEBUG オプションを設定します。

-f  ECHO_REQUEST ping を垂れ流します。 パケットが返って来るとすぐ、もしくは 100 分の 1 秒に 1 回のうちの どちらか多い方の頻度でパケットを出力します。 ECHO_REQUEST パケットを送るたびに “”. が表示され、 ECHO_REPLY パケットを受信するたびにバックスペースが表示されます。 これによりどれだけのパケットが欠落したのかをすばやく表示することができます。 スーパユーザのみ使用可能です。 このオプションはネットワークに非常に負荷をかけるので、注意して使用する 必要があります。

-H  IPv6 アドレスの逆検索を試行するよう、指定します。 本オプションを指定しない場合、 ping6 コマンドは逆検索を試行しません。

-h hoplimit
    IPv6 の中継限界数を設定します。

-I interface
    与えられたインタフェースアドレスに対して、送ります。 このフラグは、ping の宛先アドレスが マルチキャストアドレスの場合か、 リンクローカル / サイトローカルなユニキャストアドレスの場合に適用できます。

-i wait
    wait で指定した秒数だけパケットの送出間隔を空けます。 デフォルトでは送出間隔は 1 秒です。 このオプションは -f オプションとは同時に指定できません。

-l preload
    ping6 は指定した preload 値だけ ECHO_REQUEST パケットを出来るだけ速く送信し、通常の動作に戻ります。 スーパユーザのみがこのオプションを使用できます。

-n  数値の出力のみになります。 応答中に含まれるホストアドレスに対し、シンボル名の解決を試みません。

-N  ノード情報マルチキャストグループ (node information multicast group) (ff02::2:xxxx:xxxx) をプローブします。 host はターゲットの文字列のホスト名であることが必要です (数値の IPv6 アドレスであってはなりません)。 ノード情報マルチキャストグループは、指定した host に基づいて計算し、最終的な終点として使用されます。 ノード情報マルチキャストグループは リンクローカルなマルチキャストグループなので、 終点リンクを -I で指定する必要があります。

-p pattern
    送出するパケットを埋める “pad” バイトを指定します。 “pad” バイトは 16 バイトを上限とします。 これはネットワーク上でデータ依存の問題を診断するときに有効です。たとえば “-p ff” は全て 1 の送出パケットを生成します。

-q  出力を抑制します。開始時と終了時の要約行しか表示しません。

-R  対象 ( hops を指定した場合には最初の hop) が到達可能であると、カーネルに信じさせます。 これは、上位層の到達可能性確認ヒントを挿入することで実現します。 本オプションは、対象 host (または最初のホップ) が隣である場合意味があります。

-S sourceaddr
    要求パケットの始点アドレスを指定します。 始点アドレスは、 送信元ノードのユニキャストアドレスのうちのひとつであることが必要です。 出力インタフェースを -I で指定する場合には、 sourceaddr は当該インタフェースに割り当てたアドレスであることが必要です。

-s packetsize
    送出するデータのバイト数を指定します。 デフォルトでは 56 バイトです。 これは、 ICMP ヘッダデータの 8 バイトをつけた 64 バイトの ICMP データに変換されます。 -b オプションも共に指定して、ソケットのバッファサイズを 拡張する必要があるかもしれません。

-v  冗長出力を有効にします。 ECHO_RESPONSE 以外の受信 ICMP パケットも表示されます。

-w  ECHO_REQUEST ではなく ICMPv6 ノード情報 (FQDN) 問い合わせパケットを生成します。 -w オプションを指定した場合 -s オプションは無効となります。

-W  -w オプションと同じですが、03 ドラフトベースの古いパケット書式を使用します。 このオプションは後方互換性のために残されています。 -w オプションを指定した場合 -s オプションは無効となります。

hops
    タイプ 0 ルーティングヘッダ中に置かれる、中間ノード用の IPv6 です。

host
    最終的な終点ノードの IPv6 アドレスです。

問題の切り分けのために ping6 を用いるには、ローカルインタフェースが up かつ running であることを 確認するため、まずローカルホスト上で実行します。 その後、より遠くのホストやゲートウェイに “ping” をしていきます。 経路周回時間 (round-trip time) と消失パケットの統計が計算されます。 重複したパケットが受信された場合、そのパケットは消失パケットの計算には 含まれませんが、経路周回時間の統計の計算には 使われます。 指定されたパケットの数が送信され (受信され) たとき、もしくはプログラムが SIGINT で終了した場合、簡単な要約が表示されます。 要約に書き出されるのは、送出したパケット数、受信したパケット数、そして 経路周回時間の最小/平均/最大/標準偏差です。

ping6 が SIGINFO シグナル ( stty(1) に対する status 引数を参照) を受信した場合、 現時点で送信および受信されたパケット数と 経路周回時間の最小/平均/最大/分散を、 標準の終了メッセージとして、標準出力に書き込みます。

このプログラムは主にネットワークのテスト、計測、管理に用いられることを 想定しています。 ping6 はそれ自体ネットワークに負荷をかけるので、トラブルのないときや自動スクリ プトで用いることは勧められません。

重複パケットと障害パケット
ping6 は重複パケットと障害パケットを報告します。重複パケットは ユニキャストアドレスに対して ping をかけている場合は起こるはずの ないものですが、 リンク層での不適切な再送信によって引き起こされるようです。 重複は様々な状況で起こる可能性があります。低いレベルの重複の存在は 必ずしも警告にならないかもしれませんが、 (まず) よい兆候ではありません。 ブロードキャストもしくは マルチキャストアドレスに ping する時には、 重複パケットが出ることが予想されます。 なぜなら、そのパケットは、実際には重複したパケットなのではなく、 異ったホストからの同じ要求に対する応答であるからです。

障害パケットは、警告を引き起こす重大な原因であることは間違いありません。 多くの場合、 ping パケットの経路のどこか (ネットワーク内かホスト内) のハードウェアの故障が 考えられます。

異なったデータパターンの試行
(インタ) ネットワーク層は、データ部分に含まれるデータによってパケットの扱い を変えません。不幸にも、パケットがネットワークに侵入し、 長い間検知されないままとなるというデータに依存した問題が知られています。 多くの場合、問題を引き起こす特殊なパターンは、 たとえば全部 1 や全部 0 のようなもの、あるいは右端以外が 0 であるようなものといった、十分な “遷移” を持たないものです。コマンドラインで (たとえば) 全部 0 のデータパターンを指定するだけでは不十分かもしれません。なぜな ら問題のパターンはデータリンク層にあり、コマンドラインで指定したものと コントローラが送信するものとの関係は複雑である可能性があるからです。

このことは、つまり、データに依存した問題があるとき、それを見付けるためには テストをたくさんしなければならないということです。運がよければ、 あるネットワークを通して送れない、あるいは同じような長さのファイル よりも送るのにずっと長時間かかるようなファイルを見付けることが できるかもしれません。 この場合、そのファイルを調べ、繰り返し現われるパターンを ping6 の -p オプションを使ってテストできます。

戻り値
ping6 は、成功時 (ホストが生きている場合) には 0 を、 引数が正しくない場合やホストが応答しない場合には非 0 を返します。

使用例
通常、 ping6 は、 ping(8) が動作するように動作します。 以下は、ICMPv6 エコー要求を dst.foo.com へ送ります。

    ping6 -n dst.foo.com

以下は、 wi0 インタフェースに接続されたネットワークリンク上の 全ノードのホスト名を検出します。 アドレス ff02::1 は、リンクローカル全ノードマルチキャストアドレスと名付けられており、 パケットはネットワークリンク上の全ノードに到達します。

    ping6 -w ff02::1%wi0

以下は、終点ノード dst.foo.com に割り当てられたアドレスを検出します。

    ping6 -a agl dst.foo.com

関連項目
netstat(1), ifconfig(8), ping(8), routed(8), traceroute(8), traceroute6(8) A. Conta, S. Deering, Internet Control Message Protocol (ICMPv6) for the Internet Protocol Version 6 (IPv6) Specification, RFC2463, December 1998. Matt Crawford, IPv6 Node Information Queries, draft-ietf-ipngwg-icmp-name-lookups-05.txt, October 22, 1999, work in progress material.

バグ
我々が何故 ping6 と ping(8) の実装を分けたのかという議論が沢山ありました。 IPv4 と IPv6 両用の ping コマンドに統一した方が便利だと言う人もいました。 この要求に対する答えは次の通りです。

開発者の視点から: IPv4 と IPv6 とで下位の raw ソケット API が全く異りますので、 2 種類のコードベースを持つことになります。 ふたつのコマンドをあわせて単一コマンドにしても、実際、 開発者の立場からは利益はないでしょう。

操作者の視点から: リモートログインツールのような通常のネットワークアプリケーションとは異り、 通常、ネットワーク管理ツールを使用するときはアドレスファミリを意識します。 単にホストへの到達可能性を知りたいのではなく、 IPv6 等の特定のプロトコルでのホスト到達性を知りたいのです。 よって、IPv4 と IPv6 用に統合された ping(8) コマンドがあったとしても、常に -6 または -4 のオプション (またはこれに類するもの) を入力して、 特定のアドレスファミリを指定することになるでしょう。 これは、本質的に、ふたつの異なったコマンドを持つのと同じことを意味します。

歴史
ping コマンドは 4.3BSD で登場しました。 IPv6 をサポートした ping6 コマンドは KAME IPv6 プロトコルスタックキットではじめて登場しました。

KAME Project (http://www.kame.net/) スタックを基とする IPv6 および IPsec のサポートは、 FreeBSD 4.0 で始めて組み込まれました。