@IT > Master of IP Network > ネットワークの疎通を確認するには?
 
連載:ネットワーク・コマンドでトラブル解決(1)

ネットワークの疎通を確認するには?
〜ping/traceroute〜

加地眞也
2001/8/30

関連するコマンド
ping
traceroute(tracert)


 マシンのネットワーク設定を行い、外部のネットワークやサーバとつながるかどうかを確認する際など、実際にネットワーク・アプリケーションを使う前に、「ping」「traceroute(tracert)」などのコマンドを用いる方法が有効だ。

 「ping」は簡単な接続の可否をOK/NGで確認できるコマンドであり、「traceroute」は目的のホストまでの経路を順に表示する詳細な調査向けのコマンドである。エラーメッセージや経路表示から、ネットワーク接続が正常でない場合に、どこに問題がありそうか、ある程度の切り分けが可能になるわけだ。

 こうしたネットワークの疎通確認に用いるコマンド/ツールは、ICMPプロトコルの性質をうまく利用している。

ICMP(Internet Control Message Protocol)とは?

 pingやtracerouteでは一般に、ICMP(Internet Control Message Protocol : RFC792RFC1812)と呼ばれる特別なプロトコルを用いてネットワークの疎通を確認している。

 もともとICMPは、ネットワークに障害があり正常な通信が行えない場合に、経路に位置するルータやホストが送信元ホストへその障害を知らせるためのプロトコルである。そのため、エラー報告プロトコルとも呼ばれる。

 IP自体は到達信頼性の低いプロトコルだが、仮に途中でパケットが破棄されたとしても、再送などによりエラーをハンドリングすることは可能だ。しかし永続的な障害などの場合には、非常に効率が悪い結果となる。そこで、ICMPによってエラーを通知することで、復旧やエラーハンドリングの効率を上げる目的を持っている。ICMPはIP上で動作するプロトコルであり、TCPやUDPと同一階層と考えてよい。IPヘッダにおけるProtocolフィールドは1が設定される。こうした障害時通知など特殊な目的のためには、通常のTCPやUDPに比べ、より詳細な情報が通知できるように設計されている。

図1 ICMPのプロトコルフォーマット

Type
説明
意味
種類
0
Echo Reply Echo要求への返答
Query
3
Destination Unreachable 宛先到達不能
Error
4
Source Quench 軋轢発生による転送抑制指示
Error
5
Redirect より最適な経路への変更指示
Error
8
Echo Request Echo要求
Query
9
Router Advertisment ルータ通知
Query
10
Router Solicitation ルータ要求
Query
11
Time Exceeded TTLの超過によるパケットの破棄報告
Error
12
Paramter Problem パケットパラメータにおけるエラー
Error
13
Timestamp Request タイムスタンプ保持要求
Query
14
Timestamp Reply タイムスタンプ保持要求への返答。
Query
15
Information Request
(未使用)
Query
16
Information Reply
(未使用)
Query
17
AddressMask Request アドレスマスク要求。サブネット内のサブネットマスク値を要求する
Query
18
AddressMask Reply アドレスマスク要求への返答
Query
表1 Type一覧

 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フィールドには以下のような障害時の詳細情報が格納されることになっている。

Code
説明
0
Network Unreachable
1
Host Unreachable
2
Protocol Unreachable
3
Port Unreachable
4
Fragmentation Needed and DF set
5
Source Route Failed
6
Destinantion Network Unknown
7
Destinantion Host Unknown
8
Source Host Isolated
9
Network Administartively Prohibited
10
Destinantion Host Administartively Prohibited
11
Network Unreachable For TOS
12
Host Unreachable For TOS
13
Communication Administratively Prohibited
14
Host Precedence Violation
15
Precedence Cutoff in Effect
表2 Code一覧

 Dataフィールドには、Echo Requestの場合は任意の文字列が埋められるが、Errorメッセージの場合ではどのパケットに対するエラーかを示すために、対応するパケットのIPヘッダが格納される。

ICMPの動作例

図2 ICMPの動作例

 図の送信元ホストAでは、パケット送信時に目的のホストが存在しているのかどうかまでは分からない(送信元ホストが把握しているルーティングは、せいぜいネットワークのサブネット単位までのため)。それを把握できるのはルータのみである。パケットがルータに到着すると、ルータはルーティングテーブルから経路を探すが、目的のホストは存在していないため、ルータがDestination Unreachable/Host Unreachable(Type=3 Code=1)を返答し、エラーを報告する。ホストYへのEcho Requestへの場合には、ホストY自身がEcho Reply(Type=0)を報告することになる。

 では実際に、このICMPを利用した、pingとtraceroute(tracert)の使い方や動作の仕組みを解説していこう。

 

ネットワーク・コマンド/ツール
  ping
〜ネットワークの疎通を確認する
  traceroute(tracert)
〜ネットワークの経路を調査する
 


「Master of IP Network総合インデックス」


 本企画では、各種コマンド/ツール紹介やそれらを活用したTipsを順次追加、各種索引を用意して、読者の方々に手軽にご利用いただける、便利なリソース集としてアップデートしていく予定です。ぜひご期待ください。