輪講: 詳解TCP/IP ACE B3 suzuk
第7章 Pingプログラム
Table of Contents 7.1 イントロダクション 7.2 Pingプログラム 7.3 IPレコード・ルート・オプション 7.1 イントロダクション 7.2 Pingプログラム 7.3 IPレコード・ルート・オプション 7.4 IPタイムスタンプ・オプション 7.5 まとめ
7.1 イントロダクション Ping、それは診断プログラム 到達可能ホストかどうかをテストする 7.1 イントロダクション Ping、それは診断プログラム 到達可能ホストかどうかをテストする ICMPエコー要求メッセージを送る ICMPエコー応答を待つ ネットワーク構造・障害を調べる時のスタートポイント 往復時間を計測し、ホスト間の”距離”を示す Packet InterNet Groperの略
7.2 Pingプログラム クライアント サーバ エコー要求を送るping プログラム pingの対象となるサーバ カーネルで実装されているTCP/IPがサポート (ユーザプロセスではない) 識別子とシーケンス番号をオプションデータエコーする 識別子フィールドを送り手プロセスのUIDにセット シーケンス番号は0からスタートし、1ずつ増加する
7.2 Pingプログラム 最近のOSでは? 新しい実装では –s オプションを渡さないと1つのエコー要求しか投げない ping hogehoge.com ping –s hogehoge.com Pinging www.yahoo.co.jp [210.81.150.5] with 32 bytes of data: Reply from 210.81.150.5: bytes=32 time=4ms TTL=242 Reply from 210.81.150.5: bytes=32 time=3ms TTL=242 Reply from 210.81.150.5: bytes=32 time=5ms TTL=242 Ping statistics for 210.81.150.5: Packets: Sent = 4, Received = 4, Lost = 0 (0% loss), Approximate round trip times in milli-seconds: Minimum = 3ms, Maximum = 5ms, Average = 4ms host is alive or no answer
7.2 Pingプログラム LANでpingすると? pingは往復時間を計測できる OSのタイマーの精度によって往復時間算出の制度も異なる ICMPメッセージのデータ部分にエコー要求が送られた時間を格納する OSのタイマーの精度によって往復時間算出の制度も異なる 宛先のMACアドレスが送り手のARPキャッシュに存在しない場合 ARP要求と応答のために数ミリ秒を要する 最初のエコー要求が数ミリ秒長いことの原因
7.2 Pingプログラム WANでpingすると? 出力結果にシーケンス番号がない 往復時間が大きく分散する 順番の入れ違いが発生する(送った順に返ってこない) パケットの重複が発生(同じシーケンス番号が返る) 往復時間が大きく分散する パケットの消失が起こることもある ホストは生きているのに・・・
7.2 Pingプログラム ハードワイヤードSLIPリンク 9600bit/sec 以下の低速な非同期速度 何がわかるのか? ICMPエコー要求はそれ自身の応答が返ってくる前に、次の要求を送っている 応答時間は1.4秒 ICMPエコー要求間隔は1秒
7.2 Pingプログラム ダイヤルアップSLIPリンク 双方のエンドにモデムが存在する モデムはping計測に大きく影響する モデムのエラー制御とデータ圧縮が最たる原因 ある程度の遅延の発生 コンピュータ自身の受信データバッファ、割り込み間隔
7.3 IPレコード・ルート・オプション IPRR(IPレコード・ルート)オプション パケットが通過したルータのIPが分かる pingの -R オプションで有効になる 9つのアドレスまでカバーできる 往復で追加される 行きでも帰りでも追加
7.3 IPレコード・ルート・オプション RRオプションのIPデータグラムの構造 コード データ長 ポインタ
7.3 IPレコード・ルート・オプション 実験 svr4 % ping -R slip PING slip (140.252.13.65): 56 data bytes 64 bytes from 140.252.13.65: icmp_seq=0 ttl=254 time=280 ms RR: bsdi (140.252.13.66) slip (140.252.13.65) bsdi (140.252.13.35) svr4 (140.252.13.34) 64 bytes from 140.252.13.65: icmp_seq=1 ttl=254 time=280 ms (same route) 64 bytes from 140.252.13.65: icmp_seq=2 ttl=254 time=270 ms (same route) ^? --- slip ping statistics --- 3 packets transmitted, 3 packets received, 0% packet loss round-trip min/avg/max = 270/276/280 ms
7.3 IPレコード・ルート・オプション 実験 tcpdump で見てみよう 1 2 0.0 svr4 > slip: icmp: echo request (ttl 32, id 35835, optlen=40 RR{39}=RR(#0.0.0.0/0.0.0.0/0.0.0.0/ 0.0.0.0/0.0.0.0/0.0.0.0/0.0.0.0/0.0.0.0/0.0.0.0} EOL) 2 0.267746 (0.2677) slip > svr4: icmp: echo reply (ttl 254, id 1976, optlen=40 RR{39}= RR(140.252.13.66/140.252.13.65/ 140.252.13.35/#0.0.0.0/0.0.0.0/0.0.0.0/0.0.0.0/ 0.0.0.0/0.0.0.0} EOL)
7.4 IPタイムスタンプ・オプション 0x44 フラグ3がよい どのルータがタイムスタンプを記録するか選択できる
7.4 IPタイムスタンプ・オプション タイムスタンプのスペースがなくなった場合 ルーターでUTC時間をサポートしていない場合 ルーターはオーバーフロー・フィールドを増加させる ルーターでUTC時間をサポートしていない場合 タイムスタンプのハイ・オーダー・ビットをOn
7.5 まとめ Pingは基本的な接続テスト TCP/IPが稼動する2つのシステム間で使う 7.5 まとめ Pingは基本的な接続テスト TCP/IPが稼動する2つのシステム間で使う Pingサーバは通常、カーネルのICMP実装の一部