netstat 〜ホストのネットワーク統計や状態を確認する 加地眞也 2002/1/30 |
目的と用途 |
netstatコマンドは、ホストのネットワーク接続状態やソケット/インターフェイスごとのネットワーク統計などを確認するためのコマンドだ。ホストが現在実行している接続一覧とそのステータスを確認できるほか、IPやTCP/UDP以下の各パケット統計やエラー状態なども調べられる。ホストにおけるネットワーク調査全般の総合的なコマンドを意図しているので、ルーティング・テーブルの確認など、ほかのコマンドと同様の機能も実装されている。
なお、各機能の設定については、ifconfigやrouteなどの専用コマンドまたはGUIによるプロパティ設定が必要だ。
書式 |
●Windowsの場合
netstat[ -a][ -e][ -n][ -s][ -p プロトコル][ -r][ インターバル]
オプションなし
|
現在の有効な接続(ESTABLISHED)のみを表示する |
-a
|
現在のすべての接続を表示する |
-e
|
インターフェイス・レベル(イーサネット)の統計情報を表示する |
-n
|
出力をIPアドレスなど数値のみに抑制する(DNS逆引きを行わないなど)。ほかのオプション内容へ影響する |
-s
|
プロトコルレベル(IP/TCP/UDP/ICMP)の統計情報を表示する |
-p
|
プロトコルごとの接続をリストする。プロトコルにはTCPかUDPを指定する。-sとともに使用すると、そのプロトコルに関する情報のみの表示を行う |
-r
|
ルーティング・テーブルを表示する |
インターバル
|
この間隔で連続自動実行する。単位は秒 |
●Linuxの場合
――接続一覧表示
netstat[ -vnNcaeol][ ソケットレベル]
――インターフェイスごとの統計表示
netstat[ -veenNac] -i
――マスカレード機能の統計表示
netstat[ -cnNe] -M
――ネットワーク全般の統計表示
netstat -s[ ソケットレベル]
――ルーティング・テーブルの表示
netstat[ -veenNcCF][ -A アドレスファミリ名] -r
――ヘルプやバージョン表示
netstat -V
netstat -h
オプションなし
|
現在の有効な接続(ESTABLISHED)のみを表示する |
-v
|
詳細モード |
-n
|
出力をIPアドレスなど数値のみに抑制する(DNS逆引きを行わないなど)。ほかのオプション内容へ影響する |
-N
|
インターフェイス名の解決を行う |
-c
|
連続表示 |
-a
|
現在のすべての接続を表示する |
-e
|
拡張表示モード。eeでさらに拡張された表示を行う(主に-rオプションと組み合わせて用いる) |
-o
|
ネットワーク・タイマを表示する |
-l
|
LISTEN状態の接続のみを表示する |
ソケットレベル
|
表示するソケット種別を指定する。TCP(「-t」または「--tcp」)、UDP(「-u」または「--udp」)、そのほかRAWやICMPなど(「-w」または「--raw」)、UNIXドメイン・ソケット(「-x」または「--unix」:-sオプションでは無効)などが指定できる。省略されると表示可能なソケットすべて |
-i
|
インターフェイスごとのパケット統計を表示する |
-M
|
マスカレード接続の表示を行う |
-s
|
ネットワーク統計を表示する |
-t | -u | -w
|
TCP(「-t」)、UDP(「-u」)、そのほかIPとICMP(「-w」)のみ表示する |
-C
|
カーネル・キャッシュでのルーティング・テーブル情報を表示する |
-F
|
FIB(Forwarding Information Base:Linuxにおけるルーティング・テーブルの実装方式。あて先IPアドレスをキーに経路情報を効率的に配置して、性能の向上を図っている)。テーブルからのルーティング・テーブル情報を表示する |
-r
|
ルーティング・テーブル情報を表示する |
-A
|
プロトコル種別ごとに結果を表示する。デフォルトは「inet(IPv4)」。「ipx(IPX)」「inet6(IPv6)」などが使用できる |
-V
|
バージョン情報を表示する |
-h
|
ヘルプを表示する |
使用方法 |
■ネットワーク接続一覧の確認
Windows/Linuxともに、「netstat -a」コマンドによって、現在のネットワーク接続の一覧が表示される。ネットワーク接続とは、主にTCP接続におけるコネクションだ。つまり、ホストのトランスポート層におけるプロトコル情報を表示する。ただし、UDPやRAW(TCP/UDPではないそのほかの任意のプロトコル)ソケットについてもリストアップされる。
単にパラメータなしの場合には、ESTABLISHED状態(接続中)のコネクションのみが表示される。Linuxの場合、単に-aオプションだけではUNIXドメイン・ソケットなども含めて表示されるので、「netstat -aA inet」としてIPv4のみに限定してもよいだろう。
●Windowsでの使用例 | |
|
この例では多少分かりやすくするために、-nオプションも指定して「IPアドレス」と「ポート番号」だけで表示させている。-nを付けない場合には、ポート番号ではなくサービス名が、Linuxで「/etc/sevices」ファイル、Windowsで「Windows ディレクトリ\system32\drivers\etc\services」ファイルで記載された名前で表示される。また、DNS逆引きによるホスト名解決も行われるが、DNSに登録されていないIPアドレスがあると、DNS検索がタイム・アウトするまで表示が行われないので注意しよう。
Linuxでは多少列が多くなるが、基本的には同じ内容だ。列はそれぞれ以下の意味を持っている。
(1) プロトコル種類
TCP/UDP/RAWなど、コネクションのトランスポート種別が表示される(2) ローカル(接続元)ホストのIPアドレスとポート名(番号)
IPアドレスは特定のアドレスとソケットがバインドされている場合にはそのアドレスが、特定されていない場合には「0.0.0.0」(自身が持つどのインターフェイスへの接続でも受け付ける場合)と表示される(3) 接続先ホスト名(IPアドレス)とポート名(ポート番号)
(4) 接続の現在のステータス
ここでまず、ローカルからどのホストのどのアプリケーション(ポート番号)への接続が行われているかに着目しよう。StateがESTABLISHEDとなっているのが現在有効な接続だ。例えば(c)では、ローカルのHTTPサーバ(ポート80)へ「192.168.1.11」から接続されていることが分かる。ただし、これは接続状態を持つTCPの場合だけだ。UDPはそもそも状態が存在しないので表示されない。
StateがLISTENである接続は、外部からの接続待ち受け(ソケットのLISTEN状態)を行っていることを示している。例えば(a)の行は、HTTPサーバ(ポート80)への接続を待ち受けている。つまり、サーバ・プロセスによって今後接続が開始されるかもしれないことを示している。特にインターネットに直接接続されているホストでは、不用意に起動して不正侵入の足掛かりになるプロセスやサービスがないかどうか確認することもできるだろう。例では、(b)はNetBIOSデータグラムへの接続待ち受けであり、大変危険であると判断できる。
また、TCPとUDPで同じポート番号を待ち受けしている場合もある(UDPでは「Foreign Address」が「*:*」となっている接続)。これはアプリケーションでの対応にもよるが、どちらの通信でも可能なアプリケーションということだ。Linuxの場合には-lオプションを用いて、明示的にLISTEN(とESTABLISHED)状態のソケットだけを表示することもできる。
●Linuxでの使用例 | |
|
なお、アドレスが「0.0.0.0」となっている場合は、そのソケットはホストに存在するあらゆるIPアドレスとも結び付けられている(バインド)。明示的にIPアドレスが振られている場合には、そのIPアドレスへの接続のみと通信する。ホストがマルチホームとなっていた場合には、どのインターフェイスから接続されるか分からないために必要となる。
■ネットワーク統計情報
「netstat -s」は、ホストのネットワーク統計情報を表示する。IPやTCP/UDP、ICMPといったプロトコルごとの統計情報が確認できる。それぞれ、該当するOSのプロトコル・スタックごとに処理された結果となっている。必然的に、IP統計にはTCP/UDP/ICMPの統計も含まれていることに注意しよう。こうした統計からは、そのホストでのプロトコルごとの処理の様子、正常にネットワーク機能が動作しているかどうかをうかがうことができる。例えば統計上処理されたパケットが0ならば、そのホストのネットワーク機能が正しく機能していないと考えることができる。ある特定のネットワーク処理を行って、その前後で比較するのもよいだろう。
なお、これらの統計値はOS起動時からの積算値だ。また明示されていない場合には、マルチホーム・ホストでは複数のインターフェイスの合計値となる。WindowsとLinuxでは統計情報に差異こそあるが、大体は似た内容だ。例を基に解説しよう。
●Windowsでの使用例 | |
|
●Linuxでの使用例 | |
|
(a) IP
処理したIPパケットの統計値。通常のクライアント機やサーバであれば、単にエラー・パケットが報告されていないかどうかなどを確認しよう。通常、かなりの高負荷がかかっているなどの状況でなければ、ほとんどエラーや破棄パケットの発生はないはずだ。また、マルチホーム・ホストでルーティングを行っている場合には、ルーティング関連パケット数のほか、IPパケットのフラグメンテーション(分割)と再構成パケット数にも着目しよう。あまり数や比率が高いようであれば、それだけ処理負荷がかかることになり、ネットワークのパフォーマンスにも影響する。それぞれのインターフェイスのMTUが適切かどうか検討すべきだ。
(1) 受信IPパケット総数
(2) IPヘッダにエラーが発生していた受信IPパケット数
(3) アドレスにエラーが発生していた受信IPパケット数
(4) IPフォワーディング(ルーティング)されたIPパケット数。つまり自身で受信したのではなく、ほかのホストのために転送したIPパケット数だ
(5) 上位プロトコルが不明なIPパケット数。TCPやUDPなど自身でハンドリング可能なプロトコルでなかったパケット数である
(6) 受信バッファが足りないなどの理由で上位プロトコル(TCP/UDPなど)へ届けられずに破棄された受信IPパケット数。ここが0でない場合には、受信バッファサイズを大きくすることも考慮しよう
(7) 上位プロトコル(TCP/UDPなど)へ正常に届けられた受信IPパケット数
(8) 下位プロトコル(イーサネットなど)へ転送できた送信IPパケット総数
(9) 破棄されたルーティングIPパケット数
(10) 破棄された送信IPパケット数
(11) 経路が不明であったルーティングIPパケット数
(12) 再構成が必要だったIPパケット数/成功IPパケット数/失敗IPパケット数
(13) フラグメントしたIPパケットの成功数/失敗数/作成したパケット数
(b) ICMP
ICMPは、ルータやホスト間で通信されるネットワーク状態通知のためのパケットだ。つまり、ここに現れるのは利用状態というよりも、よりシステム的な情報ということになる。あまり気にしなくてよい場合も多いが、例えば「Redirect」メッセージが多く表示されていれば、ルーティング経路が間違っている可能性がある。「Source
Quench」が発生していたら、経路上のどこかでバッファ不足が発生しているのかもしれない。また、より厳密には、パケット数ではなくメッセージ数であることにも注意しよう。
(14) 受信したICMPメッセージ総数
(15) 送信したICMPメッセージ総数
(16) 受信に失敗したICMPメッセージ数
(17) 送信に失敗したICMPメッセージ数
(18) 送受信したICMP Type別メッセージ数。メッセージタイプごとに集計表示される
(c) TCP
TCPはコネクション指向プロトコルであるので、パケット数ではなく主にコネクション数となることに注意しよう。
(19) Active Open(LISTENしている別のソケットへ能動的に接続:クライアントとしての動作)した総数
(20) Passive Open(LISTENしているソケットへ接続された受動的な接続:サーバとしての動作)した総数
(21) 接続失敗数
(22) リセットされた接続数(または送受信のそれぞれの数)
(23) 現在のコネクション総数。「netstat -a」でより詳細を確認できる
(24) 送信/受信/(TCPにおけるパケット喪失時の)再送されたTCPセグメント(データ)数。再送数が多い場合は、ネットワーク経路などでパケットを喪失する現象が発生している
(25) 不正なセグメントの受信数
(d) UDP
UDPではTCPと異なりコネクションの概念はないので、パケット単位の統計となる。
(26) 受信UDPパケット総数
(27) 該当する転送すべき上位アプリケーション(ポート番号)がなかったUDPパケット数。UDPは「勝手に送り付けられる」パケットなので、ここが比較的高い値になることもそれほど珍しくない
(28) エラー受信UDPパケット数
(29) 送信UDPパケット総数
■インターフェイスごと/イーサネット・レベルでの統計情報
Linuxでは「netstat -i」で設置されているインターフェイスごと(つまりイーサネット・レベルでもある)の統計情報を表示できる。
●Linuxでの使用例 | |
|
(1) インターフェイス名
このインターフェイスごとに集計された統計を各行に表示する(2) インターフェイスごとのMTU値
(3) インターフェイスごとのメトリック数
(4) 受信関連統計値
順に、正常パケット数/エラー・パケット数/破棄パケット数/オーバーロード・パケット数(5) 送信または転送関連統計値
順に、正常パケット数/エラー・パケット数/破棄パケット数/オーバーロード・パケット数を示す
Windowsでもインターフェイスごとではないが、イーサネット・レベルでの統計情報を表示できる。
●Windowsでの使用例 | |
|
(1) 受信/送信したデータの合計バイト
(2) 受信/送信したユニキャスト・フレーム数
(3) 受信/送信した非ユニキャスト(ブロードキャストなど)フレーム数
(4) 受信/送信時に破棄されたフレーム数
(5) 受信/送信時にエラーになったフレーム数
(6) 上位プロトコルが不明なフレーム数
■ルーティング・テーブルの確認
「netstat -r」でルーティング・テーブルの表示が行える。表示される内容などはrouteコマンドとほぼ同様だ。詳しくはrouteコマンドを参照してほしい。
関連記事 | |
ネットワークの設定は正しいか? 重要なのはIPアドレスとサブネットマスク |
|
ホストのネット接続は正しく行われているか? netstatによるネットワーク設定の確認 |
|
関連ネットワーク・コマンド/ツール | |
netstat 〜ホストのネットワーク統計や状態を確認する |
|
ネットワークトラブル解決法
|
ネットワークコマンド使い方
|
「Master of IP Network総合インデックス」 |
- 完全HTTPS化のメリットと極意を大規模Webサービス――ピクシブ、クックパッド、ヤフーの事例から探る (2017/7/13)
2017年6月21日、ピクシブのオフィスで、同社主催の「大規模HTTPS導入Night」が開催された。大規模Webサービスで完全HTTPS化を行うに当たっての技術的、および非技術的な悩みや成果をテーマに、ヤフー、クックパッド、ピクシブの3社が、それぞれの事例について語り合った - ソラコムは、あなたの気が付かないうちに、少しずつ「次」へ進んでいる (2017/7/6)
ソラコムは、「トランスポート技術への非依存」度を高めている。当初はIoT用格安SIMというイメージもあったが、徐々に脱皮しようとしている。パブリッククラウドと同様、付加サービスでユーザーをつかんでいるからだ - Cisco SystemsのIntent-based Networkingは、どうネットワークエンジニアの仕事を変えるか (2017/7/4)
Cisco Systemsは2017年6月、同社イベントCisco Live 2017で、「THE NETWORK. INTUITIVE.」あるいは「Intent-based Networking」といった言葉を使い、ネットワークの構築・運用、そしてネットワークエンジニアの仕事を変えていくと説明した。これはどういうことなのだろうか - ifconfig 〜(IP)ネットワーク環境の確認/設定を行う (2017/7/3)
ifconfigは、LinuxやmacOSなど、主にUNIX系OSで用いるネットワーク環境の状態確認、設定のためのコマンドだ。IPアドレスやサブネットマスク、ブロードキャストアドレスなどの基本的な設定ができる他、イーサネットフレームの最大転送サイズ(MTU)の変更や、VLAN疑似デバイスの作成も可能だ。
|
|