@IT > Master of IP Network > ネットワークの疎通を確認するには? |
連載:ネットワーク・コマンドでトラブル解決(1) ネットワークの疎通を確認するには? 〜ping/traceroute〜 加地眞也 2001/8/30
「ping」は簡単な接続の可否をOK/NGで確認できるコマンドであり、「traceroute」は目的のホストまでの経路を順に表示する詳細な調査向けのコマンドである。エラーメッセージや経路表示から、ネットワーク接続が正常でない場合に、どこに問題がありそうか、ある程度の切り分けが可能になるわけだ。 こうしたネットワークの疎通確認に用いるコマンド/ツールは、ICMPプロトコルの性質をうまく利用している。 ■ICMP(Internet Control Message Protocol)とは?pingやtracerouteでは一般に、ICMP(Internet Control Message Protocol : RFC792/ RFC1812)と呼ばれる特別なプロトコルを用いてネットワークの疎通を確認している。 もともとICMPは、ネットワークに障害があり正常な通信が行えない場合に、経路に位置するルータやホストが送信元ホストへその障害を知らせるためのプロトコルである。そのため、エラー報告プロトコルとも呼ばれる。 IP自体は到達信頼性の低いプロトコルだが、仮に途中でパケットが破棄されたとしても、再送などによりエラーをハンドリングすることは可能だ。しかし永続的な障害などの場合には、非常に効率が悪い結果となる。そこで、ICMPによってエラーを通知することで、復旧やエラーハンドリングの効率を上げる目的を持っている。ICMPはIP上で動作するプロトコルであり、TCPやUDPと同一階層と考えてよい。IPヘッダにおけるProtocolフィールドは1が設定される。こうした障害時通知など特殊な目的のためには、通常のTCPやUDPに比べ、より詳細な情報が通知できるように設計されている。
ICMPの種類(目的)は、Typeフィールドの性質によって「Queryメッセージ」と「Errorメッセージ」に大きく分けられる。 「Queryメッセージ」は、pingやtracerouteなどの調査コマンドに対して返答されるメッセージだ。pingやtracerouteでは、Echo Request(Type=8)と呼ばれるTypeがリクエストとして送られる。これに対して調査対象ホストは、Echo Reply(Type=0)レスポンスを返答し、正常に稼動していることを示す。Echo Typeの組み合わせは俗に「Are you Alive」機能とも呼ばれ、「存在確認」機能を提供する。そのほか、Queryメッセージでは、レスポンスタイムを計測するために到達時刻を返答するTimestamp Request(Type=14)/Timestamp Reply(Type=14)などもよく用いられる。 一方、「Errorメッセージ」は障害を通知するためのメッセージだ。通常のIP通信において何らかの問題が発生した場合には、経路途中のルータやホストが単独でメッセージを送信元ホストへ返答する。Destination Unreachable(Type=3)エラーの場合、Codeフィールドには以下のような障害時の詳細情報が格納されることになっている。
Dataフィールドには、Echo Requestの場合は任意の文字列が埋められるが、Errorメッセージの場合ではどのパケットに対するエラーかを示すために、対応するパケットのIPヘッダが格納される。 ■ICMPの動作例
図の送信元ホストAでは、パケット送信時に目的のホストが存在しているのかどうかまでは分からない(送信元ホストが把握しているルーティングは、せいぜいネットワークのサブネット単位までのため)。それを把握できるのはルータのみである。パケットがルータに到着すると、ルータはルーティングテーブルから経路を探すが、目的のホストは存在していないため、ルータがDestination Unreachable/Host Unreachable(Type=3 Code=1)を返答し、エラーを報告する。ホストYへのEcho Requestへの場合には、ホストY自身がEcho Reply(Type=0)を報告することになる。 では実際に、このICMPを利用した、pingとtraceroute(tracert)の使い方や動作の仕組みを解説していこう。
本企画では、各種コマンド/ツール紹介やそれらを活用したTipsを順次追加、各種索引を用意して、読者の方々に手軽にご利用いただける、便利なリソース集としてアップデートしていく予定です。ぜひご期待ください。 |