Windows TIPS
[Network]
  Windows TIPS TOPへ
Windows TIPS全リストへ
内容別分類一覧へ

netstatの統計情報を活用する

 

デジタルアドバンテージ
2003/07/05
 
対象OS
Windows 2000 Professional
Windows XP Professional
Windows XP Home Edition
Windows 2000 Server
Windows 2000 Advanced Server
Windows Server 2003
netstatでは、TCP/IPプロトコルやネットワーク・インターフェイスの稼働状況を示す各種の統計情報値を表示することができる。
ネットワークのトラブルシューティングのためには、これらの値も参考にするとよい。
正常なときの値や挙動と比べることにより、問題点を素早く見つけることができる。
 
解説

 Windows OSでは、TCP/IPネットワークの動作状態を確認するために、netstatというコマンドが用意されている。一般的には、単に「netstat」もしくは「netstat -n」と入力してTCPやUDPなどの通信の状態を調べたり、「netstat -r」と入力してルーティング・テーブルの状態などを調べたりするために使われる。これらの使い方についてはすでに本TIPSでもいくつか取り上げているので参考にしていただきたい。

 以上のほかにもう1つ、netstatには、TCP/IPプロトコル・スタックの動作状況を表す「統計値(statistics)」を表示するという機能も用意されている。プロトコル・スタックの動作状態を調査し、例えば何パケット送受信したかとか、エラーがいくつ発生したのかなどの統計値を表示することができる。これらの値はネットワークが正常に稼働している限りあまり気にする必要のないものであるが、何らかのネットワーク・トラブルが発生した場合には、ここで表示される各種の数値は貴重な情報源となる。特に、ネットワークのパケットを直接キャプチャして解析できないような場合には(パケットの解析ツールがすぐに使えるような状態になっていることは少ないだろう)、このnetstatで表示される統計値などを参考にしてトラブルの症状などを把握し、対処する必要がある。

 とはいうものの、netstatで表示される各種の統計値は、実際には単にTCP/IPのプロトコル・スタック内の各種の(エラー数などの)カウンタの値にすぎない。この数値を見るだけでたちどころにネットワークのトラブルの原因が分かるというものではないが、大ざっぱな判断を行うことはできるだろう。例えば正常な通信が行われているならば、ある種のカウンタの値が増えなければいけないが、それがまったく増えていないのなら、パケットがネットワークやプロトコル・スタック内のどこかでブロックされている、という判断を下すことができるだろう(例:pingを受けると、ICMP echoの送受信のカウンタが増えるはず、など)。また逆に、通常は増えるはずのないカウンタの値が非常に大きな値になっているとすると、何らかのトラブルや設定ミスが考えられる(例:ICMPのRedirectなどは通常は0のはずだが、ルーティン

グの設定ミスがあると値が大きくなる、など)。

 このように、netstatで表示される各種の統計値は貴重な情報源であり、その意味を理解しておけばトラブルシューティングの強い味方となる。常日頃からこの統計値の値を調査するように心がけ、ネットワークが正常な場合にはどのような数値になっているのか、どのように値が増加するのかなどを理解していると、トラブル発生時の原因究明にも役立つであろう。またこれらの値はTCP/IPプロトコルの仕組みと密接にかかわっているので、TCP/IPプロトコルの習得にも役立つはずである。またパフォーマンス・モニタのネットワーク関連オブジェクトをモニタする場合にも参考にしてほしい。

netstat -sによる統計値の表示

 netstatで統計値を表示させるには、「netstat -s」というコマンドを実行する。すると次のように、プロトコル別の統計値が表示されるだろう。これはルータとして使用しているWindows Server 2003における例なので、一般的なクライアントPCと比べると、例えば「Datagrams Forwarded(ルーティングされているパケットの総数)」などのカウンタの値が0以外になっている。また、Windows NTやWindows 2000などでは、「IPv4」ではなく単に「IP」などとなっているが、意味は同じである。

C:\>netstat -s

IPv4 Statistics

  Packets Received                   = 134852484
  Received Header Errors             = 17
  Received Address Errors            = 57130
  Datagrams Forwarded                = 83991087
  Unknown Protocols Received         = 0
  Received Packets Discarded         = 94402806
  Received Packets Delivered         = 3480990
  Output Requests                    = 4673583
  Routing Discards                   = 0
  Discarded Output Packets           = 2967628
  Output Packet No Route             = 0
  Reassembly Required                = 5043
  Reassembly Successful              = 1489
  Reassembly Failures                = 9
  Datagrams Successfully Fragmented  = 1493
  Datagrams Failing Fragmentation    = 0
  Fragments Created                  = 5042

ICMPv4 Statistics

                            Received    Sent
  Messages                  2749        20570
  Errors                    0           0
  Destination Unreachable   172         17229
  Time Exceeded             0           22
  Parameter Problems        0           0
  Source Quenches           0           0
  Redirects                 0           729
  Echos                     70          2520
  Echo Replies              2504        70
  Timestamps                0           0
  Timestamp Replies         0           0
  Address Masks             0           0
  Address Mask Replies      0           0

TCP Statistics for IPv4

  Active Opens                        = 47859
  Passive Opens                       = 2025
  Failed Connection Attempts          = 269
  Reset Connections                   = 993
  Current Connections                 = 1
  Segments Received                   = 1108502
  Segments Sent                       = 1227535
  Segments Retransmitted              = 2241

UDP Statistics for IPv4

  Datagrams Received    = 2344597
  No Ports              = 25148
  Receive Errors        = 0
  Datagrams Sent        = 3423236

 以下ではこれらの値について簡単に説明しておく。ただしこれらの値が正確に何を表しているかを詳細に記述したドキュメントはマイクロソフトからは提供されていないようなので、以下の説明は、標準的なTCP/IPプロトコル・スタックの統計情報やパフォーマンス・モニタのネットワーク関連オブジェクト(IPv4やICMP、TCPv4、UPDv4など)の説明、実環境における観測値などに基づいていることをあらかじめお断りしておく。

「IPv4 Statistics」セクション

 このセクションでは、IPプロトコルに関する各種統計値が表示されている。IPプロトコルはTCP/IPプロトコルにおける基幹プロトコルであり、TCPやUDP、ICMPの各パケットはこのIPプロトコル上に構築されている。IPプロトコルについては、別稿の「基礎から学ぶWindowsネットワーク 第10回 IPパケットの構造とIPフラグメンテーション」などを参照していただきたい。

 なお、「IPフラグメント(IP fragmentation)」とは、1度に送信することができないので(例:イーサネットでは、最大パケット・サイズは1500byteまで)、IPパケット(最大64Kbytes)をいくつかに分割することを指す。このとき、分割されたそれぞれの小さなパケットを「IPフラグメント」、IPフラグメントを全部集めて元のIPパケットに戻すことを「再構成(Reassemble)」という。

カウンタ 意味
Packets Received 全ネットワーク・インターフェイスから受信したIPパケットの総数
Received Header Errors IPヘッダ中にチェックサム・エラーやバージョン番号の間違いなど、何らかのエラーがあったので、破棄されたIPパケットの総数
Received Address Errors あて先IPアドレスが不正だった(0.0.0.0あてなど)ので破棄されたIPパケットの総数
Datagrams Forwarded ルータとして動作しているマシンにおいて、フォワードされた(別のインターフェイスへルーティングされた)IPパケットの総数
Unknown Protocols Received IPヘッダ中に記述されている上位プロトコルが未定義(不正な番号)であったIPパケットの総数
Received Packets Discarded バッファ領域不足や(OS組み込みの)ファイアウォール機能などにより、受信したけれども、上位プロトコルへは渡されずに破棄されたり、受信が拒否されたりしたIPパケットの総数
Received Packets Delivered ICMPやTCP、UDPなど、上位のプロトコル・スタックへ送られたIPパケットの総数
Output Requests 外部へ向けて送信されたIPパケットの総数
Routing Discards ルーティング・テーブルの設定ミスなどの理由により、ルーティングができないので破棄されたIPパケットの総数
Discarded Output Packets バッファ領域不足や(OS組み込みの)ファイアウォール機能によるブロックなどにより、送信されずに破棄されたり、送信が拒否されたりしたIPパケットの総数
Output Packet No Route あて先が未定義などの理由により、ルーティングできずに破棄されたIPパケットの総数
Reassembly Required 受信したフラグメント・パケット(フラグメント化された、不完全なIPパケット)の総数
Reassembly Successful フラグメントの再構成が成功した回数。つまりフラグメントの再構成によって完成したIPパケットの総数
Reassembly Failures タイムアウト(ある時間内に全フラグメントが揃わなかった)やリソース不足などの理由により、フラグメントの再構成が失敗した回数
Datagrams Successfully Fragmented 送信時にMTUサイズを超えるので、フラグメント化された送信IPパケットの総数。例えば1つのIPパケットを2つのフラグメント・パケットに分割すると、この値は1増加し、以下の「Fragments Created」の値は2増加する。ある種のファイアウォールでは、フラグメント化されたパケットは拒否するようになっている(IPフラグメントを使った攻撃を避けるため)。そのため、フラグメントが起こらないようにTCP/IPを設定しておく必要があるが、その設定が正しいかどうかをこの値で確認することができる
Datagrams Failing Fragmentation リソース不足やフラグメント禁止ビットが設定されていたなどの理由により、フラグメント化に失敗した送信IPパケットの総数
Fragments Created 送信IPパケットをフラグメント化して、作成されたフラグメント・パケットの総数。例えば1つのIPパケットを2つのフラグメント・パケットに分割すると、この値は2増加する

「ICMPv4 Statistics」セクション

 このセクションでは、ICMPプロトコルに関する統計値が表示される。送信と受信のそれぞれについて値が表示されるので、例えばping(ICMPエコー・コマンド)パケットを1つだけ送信すると、ICMPエコー応答を1つだけ受信して、それぞれの送信カウンタと受信カウンタが1つずつ増加する。ICMPプロトコルについては、別稿の「基礎から学ぶWindowsネットワーク 第12回 TCP/IPプロトコルを支えるICMPメッセージ」などを参照していただきたい。

カウンタ 意味
Messages 送受信したICMPパケットの総数
Errors コードが正しくないとかチェック・サムが不正など、エラーのあるICMPパケットの総数
Destination Unreachable 「Destination Unreachable(あて先へ送信することができなかった)」というICMPメッセージ・パケットの総数
Time Exceeded 最大ホップ数を決めるTTL(Time To Live)値が、ルーティングの途中で0になってしまったというICMPメッセージ・パケットの総数。この値が0でない場合は、TCP/IPプロトコル・スタックのTTLの初期値をより大きくする必要がある
Parameter Problems ICMPメッセージのパラメータが不正であるパケットの総数
Source Quenches 「Source Quenches(受信側のリソースが尽きた/尽きそうなので、送信を抑制してもらうために出すメッセージ)」というICMPメッセージ・パケットの総数
Redirects 「Redirect(より適切なルートがほかにあるのでリダイレクトせよ)」というICMPメッセージ・パケットの総数。ルーティングの設定ミスなどに起因することが多い
Echos 「ICMP Echo(pingの送信側から送るコマンド)」というICMPメッセージ・パケットの総数
Echo Replies 「ICMP Echo Reply(pingの応答側から返すコマンド)」というICMPメッセージ・パケットの総数
Timestamps 「Timestamp要求」のICMPメッセージ・パケットの総数
Timestamp Replies 「Timestamp要求」に対する応答のICMPメッセージ・パケットの総数
Address Masks 「アドレス・マスク要求」のICMPメッセージ・パケットの総数
Address Mask Replies 「アドレス・マスク要求」に対する応答のICMPメッセージ・パケットの総数

「TCP Statistics for IPv4」セクション

 ここでは、「TCP(信頼性のある、ストリーム通信を実現するための双方向通信プロトコル)」に関する統計値が表示される。

カウンタ 意味
Active Opens アクティブ・オープン(ローカル側から、外部のマシンへ向けてオープンすること)でオープンしたコネクションの総数。外部にあるサーバ(待ち受け側)に対して、こちら側から接続を要求して、接続が確立した回数
Passive Opens パッシブ・オープン(外部からの接続要求を受け付けるタイプのオープン)でオープンしたコネクションの総数。サーバ側の待ち受けに対して、外部からの接続要求を受け入れた回数
Failed Connection Attempts 接続要求が失敗した回数
Reset Connections 途中で接続が拒否された回数
Current Connections 現在アクティブなTCPコネクションの総数
Segments Received 受信したセグメント(TCPにおける1回のデータ送信単位)の総数
Segments Sent 送信したセグメントの総数
Segments Retransmitted 相手から受信確認が戻ってこないので、再送信したセグメントの総数

「UDP Statistics for IPv4」セクション

 ここでは、「UDP(信頼性のない、データグラム型通信プロトコル)」に関する統計値が表示される。

カウンタ 意味
Datagrams Received 受信したUDPパケットの総数
No Ports 受信したけれども、そのパケットを待っているサービス(プログラム)がなかったパケットの総数
Receive Errors エラーやそのほかの理由により、上位のサービスにまで届けることができなかったUDPパケットの総数
Datagrams Sent 送信したUDPパケットの総数

「Interface Statistics」セクション

 以上はTCPやUDP、IPに関する統計値であったが、netstatではこのほかに、ネットワーク・インターフェイス(イーサネット)に関する統計情報を表示することもできる。このためには「netstat -e」というコマンドを実行する。この値を調べることにより、イーサネット・ケーブル上で何らかの物理的なエラーが生じているなどのエラーを知ることができる。

C:\>netstat -e
Interface Statistics

                           Received            Sent

Bytes                    1791018046      2558550080
Unicast packets           132690959        83561275
Non-unicast packets          693594           30017
Discards                          0               0
Errors                            0               0
Unknown protocols             29426

 この値もICMPと同様に、送信と受信のそれぞれに関する統計値が表示される。そのため、送信カウンタは増加しているが、受信カウンタが0である、というような症状も見つけることができる。めったに起こらないが、例えば受信の割り込み設定が間違っているとこのような症状が発生することがある。たいていのネットワーク・カードでは、イーサネット・パケットの送信は自動的に行われるが、受信は割り込み駆動が普通なので(パケットを受信すると、割り込みを使ってOSへ通知する)、割り込みの設定が間違っていたりすると、このような症状が発生することがある。また、送信か受信のどちらかのケーブルが断線していても、いずれかのカウンタの値が0のままという症状が発生するので、これを見つけることができるだろう。

カウンタ 意味
Bytes 送受信したイーサネット・パケット(フレーム)のサイズ(イーサネットのヘッダ部分は除く)
Unicast packets ユニキャスト・パケット(あて先MACアドレスの先頭バイトの最下位bitが0のアドレスあてのパケット。特定の1ホストあてのパケット)の総数
Non-unicast packets ユニキャスト・パケット(あて先MACアドレスの先頭バイトの最下位bitが1のアドレスあてのパケット。不特定多数のあて先向けのパケット)の総数。マルチキャストやブロードキャスト・パケットの総数
Discards エラーのあるパケットやバッファ・オーバーフローなどの理由で、破棄されたパケットの総数
Errors 送信バッファ・オーバーフローや再送の上限を超えた、そのほかの理由で、送受信が正しく行えなかったパケットの総数
Unknown protocols あて先となる上位プロトコルが存在しないパケットの総数

統計値の連続表示

 netstatコマンドの引数に数値(単位は秒)を付けると、netstatを連続して繰り返し実行することができる。さらに-pオプションでプロトコルを指定すると(「-p ip」とか「-p icmp」「-p tcp」「-p udp」などとする)、そのプロトコルに関する情報だけを連続して継続的にモニタすることができる。例えば「netstat -s -p icmp 1」ならば、ICMPプロトコルに関する情報を1秒おきに繰り返し表示する。この状態で例えば別のコマンド・プロンプトからpingを行うと、該当するカウンタが増加するのが観察できるだろう。ネットワークのキャプチャ・ソフトウェアを起動するとか、パフォーマンス・モニタを起動するよりも、手軽にネットワークの状態を観察することができるので、(ほかに利用できるツールなどがないときに)活用してほしい。End of Article

「Windows TIPS」


Windows Server Insider フォーラム 新着記事
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Windows Server Insider 記事ランキング

本日 月間