本文へジャンプ



第3章 VoIPとネットワーク
3.6 ネットワーク管理

3.6.1 ネットワークコマンド
(1) PING
Packet internet griper
ネットワークの基本的な接続を診断。 pingは、ネットワーク疎通を確認したいホストに対してIPパケットを発行し、そのパケットが正しく届いて返答が行われるかを確認するためのコマンドだ。この調査にはICMPを用い、さまざまなエラーに応じたステータスを把握することも可能。

 pingコマンドが正常に実行できれば、通常はホスト間のネットワークは正常であると判断される。また統計値を表示することで、基本的なネットワーク性能を簡易に計測することもできる。

 エラーが発生した場合には、何らかのネットワーク障害が発生していると考えられる。ただし、pingコマンドでもICMPパケットの返答内容からある程度のエラーの原因は把握できるものの、実際には、別の方法でも詳細に調査すべきであることに注意しよう。例えば、NICのハード障害なのかルーターの障害なのかの切り分けは、それぞれの機器を実際に調査しなければ、あくまで推測内である。


10Mbpsのイーサネットで、スイッチやルーターを介在しない通信ならば、4ミリ以内で返ってくる。

 ルーター ========= ルーター 
64kbps デジタル回線
64kbyte のPING、 往復、約30Msec

●Windowsの場合
ping[ -t][ -a][ -n 試行回数][ -l パケットサイズ][ -f][ -i TTL][ -v TOS][ -r ルータ個数][ -s ルータ個数][[ -j ゲートウェイ・リスト]|[ -k ゲートウェイ・リスト]][ -w タイムアウト時間] 疎通確認対象先ホスト(ホスト名またはIPアドレス)

-t ユーザーからの停止が要求されない限り、パケットの送受信を無限に繰り返す。停止するには「Ctrl」+「C」を押す
-a 指定された対象先ホストがIPアドレスであった場合には、ホスト名をDNSから逆引きして表示する
-n パケット送受信の回数(試行回数)を指定する
-l パケットのデータ部サイズを指定する。デフォルトは32バイト
-f IPパケットの分割(フラグメント)を禁止する
-i パケットのTTL(Time To Live)を指定された値に設定する
-v パケットのTOS(Type Of Service:サービスタイプ)を指定された値に設定する
-r IPパケットのオプション部(Route Recording)に、経由したルータのアドレスを記録する(最大9個まで)
-s IPパケットのオプション部(Time Stamping)に、経由したルータのアドレスと時間を記録する(最大4個まで)
-j 経由すべきゲートウェイ(ルータ)のアドレスを最大9個まで指定できる。ただし、指定されていないゲートウェイも経由できる(loose source routed)
-k 経由すべきゲートウェイ(ルータ)のアドレスを最大9個まで指定できる。ただし、指定されていないゲートウェイは経由しない(strict source routed)
-w タイムアウト時間を指定する。単位はミリ秒

●Linuxの場合
ping[ -LRdfnqrv][ -c 試行回数][ -i 間隔時間][ -w 起動時間][ -p パディング・パターン][ -s パケットサイズ][ -t TTL][ -I インターフェイス・アドレス] 疎通確認対象先ホスト(ホスト名またはIPアドレス)

-L マルチキャストのループの制限を行う
-R IPバケットのオプション部(Route Recording)に経由したルータのアドレスを記録する(最大9個まで)
-d パケットのSO_DEBUGオプションを指定する
-f Flood pingモードを指定する
-n 出力をIPアドレスのみに抑制する(DNS逆引きを行わない)
-q 出力抑制モード。途中経過を表示しない
-r ルーティングテーブルを無視して、指定したホストに直接パケットを転送するように指示する。すなわち、同一の物理ネットワーク上に目的のホストがない場合はエラーになる
-v 詳細モード。通常は無視される他のICMPパケットも表示する
-c パケット送受信の回数(試行回数)を指定する
-i 送信パケットの間隔時間。デフォルトは1秒。-fオプションと同時に指定できない
-w コマンドの起動時間を指定する。単位は秒
-p パケットのパディング(埋め合わせ)データのパターンを指定する。例えば、「ff」はすべてのデータを「1」で埋めることを示す
-s パケットのデータ部サイズを指定する。デフォルトは56バイト
-t パケットのTTLを指定された値に設定する
-I 指定されたインターフェイス(ネットワークカード名。バインドされたIPアドレスでも可)を用いて実行する


使用方法

 pingコマンドで最も単純な使い方は、疎通を確認したいホストのホスト名またはIPアドレスを指定する。

●Windowsでの使用例
C:\>ping 192.168.1.10

Pinging 192.168.1.10 with 32 bytes of data: <-(1)

Reply from 192.168.1.10: bytes=32 time<10ms TTL=128 <-+-(2)
Reply from 192.168.1.10: bytes=32 time=20ms TTL=128 |
Reply from 192.168.1.10: bytes=32 time=20ms TTL=128 |
Reply from 192.168.1.10: bytes=32 time=30ms TTL=128 <-+

Ping statistics for 192.168.1.10: <-+-(3)
Packets: Sent = 4, Received = 4, Lost = 0 (0% loss), |
Approximate round trip times in milli-seconds: |
Minimum = 0ms, Maximum = 30ms, Average = 20ms <-+

この例では、192.1.1.10に対してpingが成功していることを示している。表示内容を確認してみよう。


(1) コマンドの対象ホストを示す。これは引数で与えられた疎通確認対象先ホストだ。また「32bytes」とは、送信されるICMPパケットのデータサイズを示している。ここではデフォルト値が用いられているが、必要であればこの値はオプションで変更できる。

(2) コマンドの途中経過を示すのがこのパートだ。この例ではパケットの送受信を4回行い、それぞれの回のステータスを表示している。この試行回数は変更することもできる。対象ホストのIPアドレスとともに、「bytes」は受信したICMPパケットのデータサイズを示している。「time」はパケットを送信してから受信するまでにかかった時間だ。単位はミリ秒(1000分の1秒)である。「<」あるいは「>」で表示された場合は、示された時間以下または以上の時間がかかっていることを示す。あまりに小さい、あるいは大きな時間の場合はこのように省略されてしまう。「TTL」はTime To Live(tracerouteを参照)を示す。IPパケットにおける「生存時間」(通過可能なゲートウェイ/ルータ数)である。ここでは結果が表示されているわけで、届くまでに通過したルータでの減算をすでに含んでいるはずだ。

(3) 最後に試行の結果(statistics)を表示する。「Sent」「Received」はそれぞれ送信/受信したパケットの総数だ。「Lost」は送信したが受信できなかったパケットの数とその損失率を示す。ここでは4回の試行で失敗した送受信はなかったので、損失率は0%となっている。また全体の試行のうち、送受信にかかった最小時間、最大時間、平均時間を示すのが「Minimum」「Maximum」「Average」だ。対象ホスト間のネットワークのスループットをここから測定できる。

■結果から何が分かるか
●対象ホストとのネットワーク疎通が正常であること
 pingコマンドが成功すれば、物理的なネットワークまでは正常に機能していることは確認できる。


自身のホストのネットワーク設定と稼動
対象ホストのネットワーク設定と稼動
途中のネットワーク/ルータの設定と稼動

 以上が揃わなければ、pingコマンドは正常終了しないはずだからだ。pingコマンドが正常なのに、ほかのコマンドやWebブラウザなどのアプリケーションが使用できない場合は、それらアプリケーション特有の問題である、と切り分けることができる。

●ネットワーク性能の推測
 statisticsの表示からネットワークのスループットが推測できる。例えば、「Minimum」「Maximum」などの試行時間に着目したとき、目の前のホストでは0msでも、海外のホストとの通信では数百〜数千msだったりと、ネットワーク環境に応じてかなりの差が出ることが分かるだろう。

 逆に、ほぼ同じネットワーク環境にあるホスト同士での差が激しいようであれば、対象ホスト自身やネットワークの経路に何らかの問題があると推測可能だ。同じホストの調査において差が非常にばらつくという場合には、時間帯によってネットワークが込み合っているなど、利用頻度が高いことが想定される。


■失敗例からネットワーク障害を推測する
●失敗例1:IPアドレスへのルーティング不可時など
(存在しないIPアドレス/ネットワーク指定)

C:\>ping 192.168.10.1

Pinging 192.168.10.1 with 32 bytes of data:

Reply from 203.100.100.49: Destination net unreachable.
Reply from 203.100.100.49: Destination net unreachable.
Reply from 203.100.100.49: Destination net unreachable.
:


 経過で現れている203.100.100.49は、(おそらくは)エラーを報告しているルータのIPアドレスを示している。経路上、このルータの時点でルーティングが不可であることが確認されたのだろうと理解できる。

 「Destination net unreachable」というメッセージは、ICMPの「Type」および「Code」に関係している。「Destination Unreachable(Type=3)/Net Unreachable(Code=0)」の結果を表示しているわけだ。「Destination Host Unreachable」とともに最も多いエラーだろう。

●失敗例2:ルーティング設定ミスによるループ

C:\>ping 150.224.XXX.XXX

Pinging 150.224.XXX.XXX with 32 bytes of data:

Reply from 130.XXX.76.17: TTL expired in transit.
Reply from 130.XXX.76.17: TTL expired in transit.
Reply from 130.XXX.76.17: TTL expired in transit.
Reply from 130.XXX.76.17: TTL expired in transit.

Ping statistics for 150.224.XXX.XXX:
Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
Minimum = 0ms, Maximum = 0ms, Average = 0ms


 TTL(Time To Live)の超過によるエラーがルータから報告されている。詳しくはtracerouteによる調査が必要だが、多くの場合、途中のルータのルーティング設定ミスによるループに陥っていると考えられる。特に、社内システムなどでサブネットマスクやデフォルトゲートウェイの設定ミスなどで引き起こされることがある。ごくまれだが、接続されている物理ネットワーク(セグメント)数が数多く、古いOSやアプリケーションではTTLが小さいために発生する場合もある。

●失敗例3:ホスト名解決の失敗

C:\>ping www.unknown.net
Unknown host www.unknown.net.


 これは、パケット送出以前に、DNS検索においてIPアドレスの名前解決に失敗している。おそらくはホスト名が間違っているか、DNSの設定ミスであることが推測される。

●失敗例4:対象ホストが停止

C:\>ping host1.example.net

Pinging host1.example.net [211.XXX.XXX.190] with 32 bytes of data:

Request timed out.
Request timed out.
Request timed out.
Request timed out.
:


 ルーティングなどは正しいが、対象ホストから返答されない場合である。単純にホスト自身が停止している場合のほか、途中のルータがICMPパケットなどをフィルタしてしまっている可能性もある。



(2) Tracert
経路調査


(3) ARP (Address Resolution Protocol)
ブロードキャストパケットを流す。 MACアドレスを知るため。 IPアドレスが分かって、MACアドレスが分からない時、つまり通信できないとき、に使用。 分かったら自分のARPテーブルにIPアドレスをMACアドレスを記憶する。


(4) Echo
PINGでOKで、Echoでだめなら、トランスポート層に問題があると考えられる。


(5) winipconfg, ipconfig
ネットワークカードの詳しい状況を表示


(6) netstat
通信中のTCPコネクションの表示機能(つまりアクティブなセッションの表示)


※>netstat
1ページ以上の出力で、全てが見られない場合は、"more"子もアンドを併用する。 「スペース」キーで次の1ページ。 「Enter」キーで次の行を表示させる。

**表示**
Proto Local Address Foreign Address State
TCP r4q7x8:3128 r4q7x8:2908TIME_WAIT
CLOSED 未使用状態でのTCPポート
LISTENING 待ち受け状態(リッスン状態)のポート。 Netstat -aとすると、表示される。
SYS_SENT 通信の開始要求(SYN)を送信したが、まだそれに対する確認応答を受け取っていない状態。 相手が無応答の時も、この状態になる。 ACKを受け取るとESTABLISHEDへ移る。
ESTABLISHED TCPコネクションが確立して通信している状態。 どちらかが終了処理を始めると、FIN_WAIT_1またはCLOSED_WAITへ遷移する。
FIN_WAIT_1 自分の側からFINを送信した状態。 そのFINに対するACKを相手から受信すると、FIN_WAIT_2へ遷移するか、先に相手からのFINを受けるとCLOSINGへ遷移する。
FIN_WAIT_2 FINに対するACKを受信した状態。 相手からのFINを受信して、それに対するACKを返すと、TIME-WAITへ遷移する。
CLOSE_WAIT 相手からのFINを受け取った状態。 アプリケーションが終了すると、FINを送信してからLAST_ACKへ遷移する。
CLOSING FINに対する相手からのACKを受け取ると、TIME_WAItへ遷移する。
LAST_ACK 送信したFINに対するACK待ち状態。 ACKを受け取ると、CLOSEDへ遷移して終了する。
TIME_WAIT コネクションの終了待ち状態。 しばらく待った後、CLOSEDへ遷移して終了する。

オプション
netstat (なし) 現在の有効な接続(ESTABLISHED)のみを表示
netstat -a 現在の現在の全ての接続を表示
netstat -e インターフェースレベル(イーサネット)の統計情報を表示
netstat -n 出力をIPアドレスなどを数値のみで表示
netstat -s プロトコルレベル(IP/TCP/UDP/ICMP)の統計情報を表示
netstat -p プロトコルごとの接続をリストする。 プロトコルにはTCPがUDPが指定できる。
Netstat -r ルーティングテーブルを表示
Netstat -o そのコネクションを所有しているプロセスのIP(PID)を表示 (Windows XPだけ)

インターバル この間買う(秒単位)で連続自動実行


Proto: TCPかUDPか
Local Address: ローカルのIPアドレス
State: UDPでは表示されないTCPコネクションの状態


c:\>netstat/r  ルーティングの内容を表示
c:\>netstat/e イーサネットの状況を表示





Opening
   Copy Rights 2006 Hishou Techno Com All rights reserved