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での使用例
C:\>netstat -an

Active Connections

  Proto(1)  Local Address(2)       Foreign Address(3)     State(4)
  TCP       0.0.0.0:53             0.0.0.0:0              LISTENING
  TCP       0.0.0.0:80             0.0.0.0:0              LISTENING  <--(a)
  TCP       0.0.0.0:135            0.0.0.0:0              LISTENING
  TCP       0.0.0.0:443            0.0.0.0:0              LISTENING
  TCP       0.0.0.0:445            0.0.0.0:0              LISTENING
  TCP       0.0.0.0:1032           0.0.0.0:0              LISTENING
  TCP       0.0.0.0:1034           0.0.0.0:0              LISTENING
  TCP       0.0.0.0:1984           0.0.0.0:0              LISTENING
  TCP       0.0.0.0:1987           0.0.0.0:0              LISTENING
  TCP       0.0.0.0:1990           0.0.0.0:0              LISTENING
  TCP       192.168.1.10:80        192.168.1.11:1031      ESTABLISHED <--(c)
  TCP       192.168.1.10:139       0.0.0.0:0              LISTENING
  TCP       192.168.1.10:1984      192.168.1.11:23        ESTABLISHED
  TCP       192.168.1.10:3342      192.168.20.04:80       TIME_WAIT
  UDP       0.0.0.0:135            *:*
  UDP       0.0.0.0:162            *:*
  UDP       0.0.0.0:445            *:*
  UDP       0.0.0.0:1031           *:*
  UDP       0.0.0.0:1033           *:*
  UDP       0.0.0.0:1035           *:*
  UDP       0.0.0.0:1989           *:*
  UDP       0.0.0.0:3456           *:*
  UDP       127.0.0.1:53           *:*
  UDP       127.0.0.1:1206         *:*
  UDP       127.0.0.1:1988         *:*
  UDP       192.168.1.10:53        *:*
  UDP       192.168.1.10:137       *:*
  UDP       192.168.1.10:138       *:*                               <--(b)

 この例では多少分かりやすくするために、-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での使用例
[root@host1 ~]# netstat -alnA inet
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State
tcp        0    138 192.168.1.11:23         192.168.1.10:2935       ESTABLISHED
tcp        0      0 0.0.0.0:139             0.0.0.0:*               LISTEN
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN
tcp        0      0 0.0.0.0:5680            0.0.0.0:*               LISTEN
tcp        0      0 0.0.0.0:901             0.0.0.0:*               LISTEN
tcp        0      0 0.0.0.0:98              0.0.0.0:*               LISTEN
tcp        0      0 0.0.0.0:79              0.0.0.0:*               LISTEN
tcp        0      0 0.0.0.0:143             0.0.0.0:*               LISTEN
tcp        0      0 0.0.0.0:110             0.0.0.0:*               LISTEN
tcp        0      0 0.0.0.0:23              0.0.0.0:*               LISTEN
tcp        0      0 0.0.0.0:21              0.0.0.0:*               LISTEN
tcp        0      0 0.0.0.0:113             0.0.0.0:*               LISTEN
tcp        0      0 0.0.0.0:111             0.0.0.0:*               LISTEN
udp        0      0 192.168.1.11:138        0.0.0.0:*
udp        0      0 192.168.1.11:137        0.0.0.0:*
udp        0      0 192.168.2.11:138        0.0.0.0:*
udp        0      0 192.168.2.11:137        0.0.0.0:*
udp        0      0 0.0.0.0:138             0.0.0.0:*
udp        0      0 0.0.0.0:137             0.0.0.0:*
udp        0      0 192.168.1.11:123        0.0.0.0:*
udp        0      0 127.0.0.1:123           0.0.0.0:*
udp        0      0 0.0.0.0:123             0.0.0.0:*
udp        0      0 0.0.0.0:111             0.0.0.0:*

 なお、アドレスが「0.0.0.0」となっている場合は、そのソケットはホストに存在するあらゆるIPアドレスとも結び付けられている(バインド)。明示的にIPアドレスが振られている場合には、そのIPアドレスへの接続のみと通信する。ホストがマルチホームとなっていた場合には、どのインターフェイスから接続されるか分からないために必要となる。

ネットワーク統計情報

 「netstat -s」は、ホストのネットワーク統計情報を表示する。IPやTCP/UDP、ICMPといったプロトコルごとの統計情報が確認できる。それぞれ、該当するOSのプロトコル・スタックごとに処理された結果となっている。必然的に、IP統計にはTCP/UDP/ICMPの統計も含まれていることに注意しよう。こうした統計からは、そのホストでのプロトコルごとの処理の様子、正常にネットワーク機能が動作しているかどうかをうかがうことができる。例えば統計上処理されたパケットが0ならば、そのホストのネットワーク機能が正しく機能していないと考えることができる。ある特定のネットワーク処理を行って、その前後で比較するのもよいだろう。

 なお、これらの統計値はOS起動時からの積算値だ。また明示されていない場合には、マルチホーム・ホストでは複数のインターフェイスの合計値となる。WindowsとLinuxでは統計情報に差異こそあるが、大体は似た内容だ。例を基に解説しよう。

●Windowsでの使用例
C:\>netstat -s

IP Statistics(a)

  Packets Received                   = 291212 (1)
  Received Header Errors             = 0 (2)
  Received Address Errors            = 0 (3)
  Datagrams Forwarded                = 0 (4)
  Unknown Protocols Received         = 0 (5)
  Received Packets Discarded         = 0 (6)
  Received Packets Delivered         = 291212 (7)
  Output Requests                    = 237348 (8)
  Routing Discards                   = 0 (9)
  Discarded Output Packets           = 0 (10)
  Output Packet No Route             = 0 (11)
  Reassembly Required                = 0 <-+
  Reassembly Successful              = 0   +-(12)
  Reassembly Failures                = 0 <-+
  Datagrams Successfully Fragmented  = 0 <-+
  Datagrams Failing Fragmentation    = 0   +-(13)
  Fragments Created                  = 0 <-+

ICMP Statistics(b)

                            Received    Sent
  Messages                  220 (14)    208 (15)
  Errors                    0 (16)      0 (17)
  Destination Unreachable   160         144 <-+
  Time Exceeded             0           0     |
  Parameter Problems        0           0     +-(18)
  Source Quenches           0           0     |
  Redirects                 0           0     |
  Echos                     28          36    |
  Echo Replies              32          28    |
  Timestamps                0           0     |
  Timestamp Replies         0           0     |
  Address Masks             0           0     |
  Address Mask Replies      0           0   <-+

TCP Statistics(c)

  Active Opens                        = 18613 (19)
  Passive Opens                       = 737 (20)
  Failed Connection Attempts          = 132 (21)
  Reset Connections                   = 1547 (22)
  Current Connections                 = 0 (23)
  Segments Received                   = 256836 <-+
  Segments Sent                       = 220719   +-(24)
  Segments Retransmitted              = 512    <-+

UDP Statistics(d)

  Datagrams Received    = 35313 (26)
  No Ports              = 353 (27)
  Receive Errors        = 3 (28)
  Datagrams Sent        = 15710 (29)

●Linuxでの使用例
[root@host1 ~]# netstat -s
Ip:(a)
    38930 total packets received(1)
    0 forwarded(4)
    0 incoming packets discarded(6)
    35306 incoming packets delivered(7)
    7557 requests sent out(8)
Icmp:(b)
    3040 ICMP messages received (14)
    0 input ICMP message failed. (16)
    ICMP input histogram:             <-+
        destination unreachable: 3040   +-(18)
        timeout in transit: 117         |
        echo replies: 14              <-+
    3040 ICMP messages sent (15)
    0 ICMP messages failed (17)
    ICMP output histogram:            <-+-(18)
        destination unreachable: 3040 <-+
Tcp:(c)
    0 active connections openings (19)
    0 passive connection openings (20)
    0 failed connection attempts (21)
    0 connection resets received (22)
    1 connections established (23)
    581 segments received    <-+
    392 segments send out      +-(24)
    0 segments retransmited  <-+
    0 bad segments received. (25)
    0 resets sent (22)
Udp:(d)
    3205 packets received (26)
    3040 packets to unknown port received. (27)
    0 packet receive errors (28)
    4122 packets sent (29)
TcpExt:


(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での使用例
[root@host1 ~]# netstat -i
Kernel Interface table
                         <-----------(4)---------->    <-----------(5)---------->
Iface(1)   MTU(2) Met(3) RX-OK RX-ERR RX-DRP RX-OVR    TX-OK TX-ERR TX-DRP TX-OVR Flg
eth0      1500      0    32110      0      0      0      962      0      0      0 BRU
eth1      1500      0        0      0      0      0      541      0      0      0 BRU
lo        3924      0     6080      0      0      0     6080      0      0      0 LRU

(1) インターフェイス名
このインターフェイスごとに集計された統計を各行に表示する

(2) インターフェイスごとのMTU値

(3) インターフェイスごとのメトリック数

(4) 受信関連統計値
順に、正常パケット数/エラー・パケット数/破棄パケット数/オーバーロード・パケット数

(5) 送信または転送関連統計値
順に、正常パケット数/エラー・パケット数/破棄パケット数/オーバーロード・パケット数を示す

 Windowsでもインターフェイスごとではないが、イーサネット・レベルでの統計情報を表示できる。

●Windowsでの使用例
C:\>netstat -e
Interface Statistics

                           Received            Sent

Bytes                       6852472         3329039 (1)
Unicast packets               34716           34287 (2)
Non-unicast packets             737             522 (3)
Discards                          0               0 (4)
Errors                            0               0 (5)
Unknown protocols                 0                 (6)

(1) 受信/送信したデータの合計バイト
(2) 受信/送信したユニキャスト・フレーム数
(3) 受信/送信した非ユニキャスト(ブロードキャストなど)フレーム数
(4) 受信/送信時に破棄されたフレーム数
(5) 受信/送信時にエラーになったフレーム数
(6) 上位プロトコルが不明なフレーム数

ルーティング・テーブルの確認

 「netstat -r」でルーティング・テーブルの表示が行える。表示される内容などはrouteコマンドとほぼ同様だ。詳しくはrouteコマンドを参照してほしい。

 

関連記事
  ネットワークの設定は正しいか?
重要なのはIPアドレスとサブネットマスク
  ホストのネット接続は正しく行われているか?
netstatによるネットワーク設定の確認
 

関連ネットワーク・コマンド/ツール
netstat
〜ホストのネットワーク統計や状態を確認する
 


ネットワークトラブル解決法
- 通信の疎通を確認 - TCP/UDPの状態
- 設定は正しいか? - DHCPの設定
- ルーティングの設定 - DNSの設定
- イーサネット通信確認  
ネットワークコマンド使い方
- ping - route
- traceroute - arp
- ipconfig - netstat
- ifconfig - nslookup


ツールを使ってネットワーク管理

 名前しか知らない後輩君がやってきた。彼によると、コマンドはすでに古くツールがクールだという。ならば教えてもらおうではないか

最終更新 2007/3/26
「Master of IP Network総合インデックス」

 

Master of IP Network フォーラム 新着記事

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

RSSフィード

アイティメディアの提供サービス

ホワイトペーパー(TechTargetジャパン/閲覧には会員登録が必要です)

スキルアップ/キャリアアップ(JOB@IT)

- PR -

お勧め求人情報

キャリアアップ 〜JOB@IT
@IT Special -PR-
  New! 半分以上が使われていない? 利用効率を
高める“ストレージ仮想化”のメリットは

  New! 「セキュリティソフト=重い」は昔の話?
@IT編集部の3人が実際に体験してみた

  New! ファルコンストア会長兼CEOに訊く――
事業継続を考える企業にとって必要なこと

  New! 一通り眺めて「同意する」をクリック、に
潜むワナ……知れば“得”する対処法は?

  New! 「物理サーバと同じ手法でいいの?」
“仮想化”に適したバックアップとは?

  New! 変化するセキュリティリスクに対応した
情報漏えい対策の方法とは?

  New! 凄腕プロジェクトマネージャがチェックする
リスクマネジメントで重要な5つのポイント

  New! 米・国防総省(ペンタゴン)も採用!
最上級のセキュリティをカンタン導入する

  New! 次期OSへの鍵!Windows Vistaのご提案
今Vista導入を検討すべき3つの理由とは!

  「スーパープログラマ」になるための資質
〜エンジニア・キャリア進化論(第13回)〜

  「あなたが何を食べているかで、あなたが
何者かが分かる」マーケティングとは?

  開発環境にも、「使いやすい」――
さくらの専用サーバプランが新しくなった

  「“監視ツール”だけで安心ですか?」
高可用性を追求した“クラスタ構築”とは

  24H稼働のオンライントレードを支える
エンジニアフレンドリー仕様のDB複製

  コストをかけずに迅速復旧!!
事業継続性を高める為の“3つの要素”?

  @IT編集部主催「データベース勉強会」
3人のプロが語ったカイゼン術とは?

  世界中で1万件の導入実績!我々の使命は
「日本のSOAをキックオフする」こと!

  ビジネスは、小さく生んで大きく育てたい
そんな願いを叶えてくれるサーバって?

  「週末だけリソースが増やせればなぁ…」
が実現するクラウドホスティング

  プレゼン力UPからセキュアな情報共有まで
“デキる”企業の『ソフトウェア選択術』

  SaaS、クラウドコンピューティング時代
必要となるITインフラの要件とは!?

  導入事例を通してSDKの実績を検証しよう
これがワザあり開発ツールの“技”だ!!

  宅急便のように、データも運んで、守る。
クロネコヤマト流「事業継続」を解説する

  【劇的】1357台のサーバが231台に!
仮想化+ストレージの最新技術で効率性UP

  従来の職種が、SOAによって大きく変わる!
SOA時代、新たに生まれる“6つの職種”とは?


ソリューションFLASHPR