◆ Cisco IOS - ネットワーク診断ツール
Cisco IOSでは、Cisco機器自身からネットワークの接続性を確認するためにpingやtracerouteコマンド
を実行できます。IOSのpingやtracerouteは、Windowsのpingやtracertコマンドと考え方は同じですが
WindowsのtracertはプロトコルにICMPを使用するのに対して、IOSのtracerouteではUDPを使用する
ので注意しましょう。debugコマンドではCisco機器での現在のデータのやりとりを詳細に確認できます。 ※ pingやtracerouteコマンドはユーザモードまたは特権モードで実行できます。debugコマンドは特権モードのみで実行可。
◆ Cisco IOS - ping
Cisco機器でpingコマンドを使用することで、そのCisco機器から相手先にIP通信できるかを確認できます。
pingコマンドは「ping 宛先IPアドレス」または「ping 宛先ホスト名」構文で、コマンド入力を行います。
例えば、以下では192.168.0.1のIPアドレスを持つ機器に対して、Cisco機器からpingを実行した結果です。
【 pingの成功 】
上図では、192.168.0.1に対してICMPのエコー要求を5回送信した後、エコー応答が5回受信できた結果を
示しています。つまり、192.168.0.1へのPINGが成功したことを意味します。「 ! ! ! ! ! 」の出力結果が
ICMPのエコー応答を受信したことを意味しています。round-trip min/avg/max = 1/2/4 ms については
RTTを最小時間、平均時間、最大時間で表示しています。RTT(Round Trip Time)とはある機器から発信
したパケットが相手から返ってくるまでの時間のことです。今回は、5回のICMPエコー要求を送信した結果
最も早くて1ミリ秒で応答、最も遅くて4ミリ秒で応答、平均すると2ミリ秒で応答があったと分かります。
一方で、下図のように「.....」の出力結果はエコー応答が受信できなかったことを意味しています。
つまり、以下ではCisco機器から192.168.0.2の機器とはICMPでの通信ができなかったことが分かります。
【 pingの失敗 】
pingの応答結果は「!」や「 .」以外に以下の結果があり「!」「 .」「U」の3つがよく見られます。
ping結果 |
ping結果の意味 |
! |
Pingの成功。ICMPエコー応答を受信。 |
. |
Pingの失敗。デフォルト値の2秒以内にICMPエコー応答を受信できなかった。 |
U |
Pingの失敗。宛先に到達できなかった。(Destination Unreachableの受信) |
Q |
Pingの失敗。宛先がビジー状態であった。 |
M |
Pingの失敗。フラグメンテーションに失敗した。 |
? |
Pingの失敗。パケットタイプが不明であった。 |
& |
Pingの失敗。パケットのTTLが超過した。 |
◆ Cisco IOS - 拡張 ping
通常のpingコマンドの場合、ICMPエコー要求は5回送信、タイムアウトは2秒以内、送信パケットサイズは
100byteなどの値が決まっています。拡張pingではこれらの値を変更することがでます。拡張pingは特権
モードで実行する必要があります。以下のようにpingとだけ入力すると色々なパラメータを指定できます。
最初にプロトコルを指定します。ここではデフォルト値の[ ip ]でOKなので何も入力せずにEnterキーを
入力します。次に、「Target IP address」で宛先アドレスを指定し「Repeat Count」でICMPエコー要求
回数を指定、「Datagram size」で送信するパケットサイズを指定します。次に「Extended commands」
で y と入力するとICMPパケットを送信するインターフェースを指定できます。これ以降に表示されていく
パラメータは、一般的に全てデフォルト値を使用します。従って、"Enterキー" だけを入力していきます。
上の拡張pingはレガシーな入力方法です。現在では以下のように、pingコマンドの後にパラメータを入力
していきます。例えば、以下のpingの内容は上記と同じです。pingの実行回数を100回、pingパケットの
データサイズを1500バイト、pingを実行する送信元I/FをFastEthernet0/0を指定してpingをしています。
「ping 宛先IPアドレスのを入力後に「?」を入力すると、指定できるパラメータが表示されます。
pingパラメータ |
pingパラメータの意味 |
data |
送信するICMPエコー要求のパケットのデータパターンを指定する。一般的に使用しないパラメータ。 |
df-bit |
送信するICMPエコー要求のパケットに対して、DFビットを設定するかどうかを指定。 |
repeat |
送信するICMPエコー要求のパケットを何回にするかを指定。 |
size |
送信するICMPエコー要求のパケットのサイズを指定。 |
source |
送信するICMPエコー要求のパケットを、どのインターフェースから送信するかを指定。 |
timeout |
送信するICMPエコー要求のパケットのタイムアウト値を指定。 |
validate |
送信するICMPエコー要求に対して受信するエコー応答のパケットを検証するかどうかを指定。 |
◆ Cisco IOS - traceroute
Cisco機器でtracerouteコマンドを使用することで、そのCisco機器から相手先までの経路が分かります。
tracerouteコマンドは 「traceroute 宛先IPアドレス」または「traceroute 宛先ホスト名」と入力し実行
します。以下では「192.168.2.2」のIPアドレスを持つ機器に対してCisco機器からtraceを実行した結果。
traceコマンドの応答結果は、応答がある場合は「〜msec」とRTT値(3回分)が表示されます。一方、
応答がない場合「*」が表示されます。それ以外のメッセージは以下の通りです。traceコマンドでは
pingと同様に特権モードで使用できる拡張traceコマンドがあります。使用方法は拡張pingとほぼ同じ。
trace結果 |
trace結果の意味 |
〜 msec |
traceの成功。ネクストホップの機器からICMP Time Exceedを受信した時にかかったRTTの値。 |
* |
デフォルト値の2秒以内にICMP Time Exceedメッセージを受信できなかった。 |
A |
traceの失敗。管理上の理由による禁止 ( 例:アクセスリスト ) |
Q |
traceの失敗。宛先がビジー状態であった。 |
I |
traceの失敗。ユーザによりテストが中断された。 |
U |
traceの失敗。ポートが不明であった。 |
H |
traceの失敗。ホストが到達不能であった。(ルーティングテーブルに経路がない場合でもHが表示される) |
N |
traceの失敗。ネットワークが到達不能であった。 |
P |
traceの失敗。プロトコルが到達不能であった。 |
T |
traceの失敗。タイムアウトした。 |
? |
traceの失敗。パケットタイプが不明であった。 |
Cisco機器はデフォルトでtrace結果のIPアドレスの名前解決を試みるので、traceの表示結果が遅いです。
そこで、以下コマンドでCisco機器自身で名前解決を行わないように設定すれば表示結果が速くなります。
※ このコマンドはグローバルコンフィグレーションモードでコマンドを入力するので、機器の設定変更というかたちになります。
traceコマンドでは、デフォルトでは30ホップまでtraceの結果を表示します。traceの宛先IPアドレスの
機器が存在しなかったり、宛先IPアドレスを間違えて入力してしまうと30行まで表示が続いてしまいます。
このtraceを途中で中止したい場合【Ctrl】+【Shift】+【6】キーを同時に入力することで中断できます。
◆ Cisco IOS - debug
IOSでは、debugというトラブルシューティングで役立つコマンドがあります。debugコマンドにより
Cisco機器で送受信するパケットやステータスを詳細に表示することができます。debugコマンドには
多くの種類があるので、確認したいトラフィックの種類を明確にした上で実行することが重要。例えば
以下では、IPプロトコルの上位で動作するICMPパケットの情報を確認するための debug コマンドです。
※ debug ip icmpと入力後にpingを実行すると、192.168.2.1の宛先機器からICMPエコー応答が受信していると分かります。
最後に重要なことをお伝えします。debugコマンドは、一般的に障害切り分けの際に一時的に使用したり
あるいはCisco機器の導入時の構築中に使用したりします。debugコマンドはとても役立つコマンドですが
非常にCPUを消費するコマンドであります。ネットワーク管理者が、現在稼動しているCisco機器にこの
コマンドを入力しようものなら、debugコマンドの内容によってはCPUを消費しすぎて機器が正常に動作
しなくなる可能性があります。例えばdebug all を使用すれば、稼動環境なら間違いなく機器停止します。
debugコマンドを入力した後、そのdebugを中止するためには以下のundebug allコマンドを入力します。
debugコマンドはundebugコマンドを入力しない限り、または機器を再起動しない限り動き続けますので
必ずundebugコマンドを入力しましょう。これを入力し忘れて、痛い目にあったネットワークエンジニアは
少なくないと思います。debugを入力した後には必ず undebug です。これを決して忘れてはいけません。
※ debugコマンド以外にshow tech-supportコマンドも負荷の高いコマンドなので、安易に稼働環境では入力してはいけません。
|