1999/06/07

ネットワーク(8)


Ping

Ping (Packet InterNet Groper) は、 という動作により「あるホストに到達可能かどうか」を調べる。

[注意]セキュリティ上の理由から(ファイアウォールなどにより)、 Pingに応えないよう設定されたサイトもある。 したがって、「pingには応えないからといって、全てのプロトコルで 到達不能かどうかはわからない」ので注意が必要である。

Unixマシンなどでは、ICMPエコー要求は、カーネルで処理するように実装されている。 そのため、システムがハングしてNFSなどに応えなくなってもpingには応える 場合も多い。 pingにも応えなくなるのはkernelもハングしてしまった場合など。

[ICMP Echo Request/Reply]
                     1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 3 3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 (32bits width)
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|    Type       |     Code      |        Checksum               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|            Identifer          |      Sequence Number          |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                                                               |
|          Option Data                                          |
                  ...
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    エコー要求の場合:  type=8, code=0
    エコー応答の場合:  type=0, code=0
Ping クライアントは、Identifier(識別子)として、pingプロセスのプロセスID を使う(複数のpingプロセスがあっても応答を区別できるように)。

Pingサーバは、Pingクライアントが送ってきた 「Identifier(識別子)、Sequence Number (シーケンス番号)、 オプションデータ」を含めて送り返す

degas$ ping -c 600 vermeer
PING vermeer.tsuda.ac.jp (133.99.10.3): 56 data bytes
64 bytes from 133.99.10.3: icmp_seq=1 ttl=250 time=5227.4 ms
64 bytes from 133.99.10.3: icmp_seq=7 ttl=250 time=58.6 ms
64 bytes from 133.99.10.3: icmp_seq=8 ttl=250 time=58.0 ms
64 bytes from 133.99.10.3: icmp_seq=9 ttl=250 time=58.1 ms
^C
--- vermeer.tsuda.ac.jp ping statistics ---
10 packets transmitted, 4 packets received, 60% packet loss
round-trip min/avg/max = 58.0/1350.5/5227.4 ms

Record Route

IPヘッダのオプションに Record Route (経路上のルータを記録する)がある。

ping に -R をつけると IP の Record Route の様子を見ることができる。 ただし、マニュアルにも書いてあるように経路を見るには traceroute を 使う方が適切である(IP Headerのオプションでは9個までしかIP Addressを 記録できないので→図7.3参照)。

FreeBSD % man ping
	...
     -R      Record route.  Includes the RECORD_ROUTE option in the
             ECHO_REQUEST packet and displays the route buffer on returned
             packets.  Note that the IP header is only large enough for nine
             such routes; the traceroute(8) command is usually better at de-
             termining the route packets take to a particular destination.
             Many hosts ignore or discard the RECORD_ROUTE option.
	...

renoir % ping -R nws1170
nitta@renoir 104% ping -R nws1170
PING nws1170.tsuda.ac.jp (133.99.128.170): 56 data bytes
64 bytes from 133.99.128.170: icmp_seq=0 ttl=252 time=3.350 ms
RR:     karel.tsuda.ac.jp (133.99.194.1)
        cisc250.tsuda.ac.jp (133.99.144.250)
        cismina.tsuda.ac.jp (133.99.128.254)
        nws1170.tsuda.ac.jp (133.99.128.170)
        cisckan.tsuda.ac.jp (133.99.144.254)
        cisc194.tsuda.ac.jp (133.99.194.250)
        karel1.tsuda.ac.jp (133.99.10.1)
        renoir.tsuda.ac.jp (133.99.10.7)
64 bytes from 133.99.128.170: icmp_seq=1 ttl=252 time=3.483 ms  (same route)
64 bytes from 133.99.128.170: icmp_seq=2 ttl=252 time=3.437 ms  (same route)
64 bytes from 133.99.128.170: icmp_seq=3 ttl=252 time=3.581 ms  (same route)
^C
--- nws1170.tsuda.ac.jp ping statistics ---
4 packets transmitted, 4 packets received, 0% packet loss
round-trip min/avg/max/stddev = 3.350/3.463/3.581/0.083 ms


traceroue

IPヘッダの TTL (Time To Line)フィールドにより、パケットが 無限に転送されることはない。 ルータは「TTLが0または1のパケット」を受け取ると、そのパケットを破棄して、 発信元のホストにICMPメッセージ「Time Exceed (時間超過)」を送り返す。 したがって、TTLを1つずつ増やしながらIPパケットを送ると、経路にある ルータからのICMPメッセージを順番に受け取ることができる。
[ICMP Time Exceed]
                     1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 3 3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 (32bits width)
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|    Type       |     Code      |        Checksum               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|             Unused  (must be 0)                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                                                               |
|          Option Data                                          |
                  ...
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    Type = 11
	配送中のTTL=0の場合: Code = 0   ← tracerouteの場合
	リアセンブル中のTTL=0の場合: Code = 1
	
renoir% traceroute nws1170
traceroute to nws1170.tsuda.ac.jp (133.99.128.170), 30 hops max, 40 byte packets
 1  karel1 (133.99.10.1)  0.748 ms  0.687 ms  0.679 ms
 2  cisc194 (133.99.194.250)  1.321 ms  1.303 ms  1.283 ms
 3  cisckan (133.99.144.254)  1.869 ms  1.772 ms  1.751 ms
 4  nws1170 (133.99.128.170)  2.394 ms *  2.167 ms


Source Route

IPヘッダのオプションとして、Source Route がある。 IPヘッダのオプションは40バイトまでで、3バイトのオーバヘッドがあるので IPアドレスは9個まで指定できる(図8.6参照)。