[Network] | |||||||||||||||
netstatの統計情報を活用する
|
|||||||||||||||
|
解説 |
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 |
以下ではこれらの値について簡単に説明しておく。ただしこれらの値が正確に何を表しているかを詳細に記述したドキュメントはマイクロソフトからは提供されていないようなので、以下の説明は、標準的な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 |
この値も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を行うと、該当するカウンタが増加するのが観察できるだろう。ネットワークのキャプチャ・ソフトウェアを起動するとか、パフォーマンス・モニタを起動するよりも、手軽にネットワークの状態を観察することができるので、(ほかに利用できるツールなどがないときに)活用してほしい。
この記事と関連性の高い別の記事
- Windowsのレジストリを設定してIPルーティングを有効にする(WindowsマシンをIPルーターにする)(TIPS)
- ICMPリダイレクト使用時のファイアウォール設定に注意(TIPS)
- pingでネットワークの速度を調査する(TIPS)
- Windows XPのファイアウォール機能を活用する(1)(TIPS)
- netstatコマンドを使いこなす(TIPS)
このリストは、デジタルアドバンテージが開発した自動関連記事探索システム Jigsaw(ジグソー) により自動抽出したものです。
「Windows TIPS」 |
- Azure Web Appsの中を「コンソール」や「シェル」でのぞいてみる (2017/7/27)
AzureのWeb Appsはどのような仕組みで動いているのか、オンプレミスのWindows OSと何が違うのか、などをちょっと探訪してみよう - Azure Storage ExplorerでStorageを手軽に操作する (2017/7/24)
エクスプローラのような感覚でAzure Storageにアクセスできる無償ツール「Azure Storage Explorer」。いざというときに使えるよう、事前にセットアップしておこう - Win 10でキーボード配列が誤認識された場合の対処 (2017/7/21)
キーボード配列が異なる言語に誤認識された場合の対処方法を紹介。英語キーボードが日本語配列として認識された場合などは、正しいキー配列に設定し直そう - Azure Web AppsでWordPressをインストールしてみる (2017/7/20)
これまでのIaaSに続き、Azureの大きな特徴といえるPaaSサービス、Azure App Serviceを試してみた! まずはWordPressをインストールしてみる
|
|