IP Network: netstat
COMMAND
netstat - ホストのネットワーク統計や状態を確認
DESCRIPTION
netstatは、ホストのネットワーク接続状態やソケット/インターフェイスごとのネットワーク統計などを確認するためのコマンドです。ホストが現在実行している接続一覧とそのステータスを確認できるほか、IPやTCP/UDP以下の各パケット統計やエラー状態なども確認できます。ホストにおけるネットワーク調査全般の総合的なコマンドを意図しているので、ルーティング・テーブルの確認など、ほかのコマンドと同様の機能も実装されている。
使用方法
■ ネットワーク接続一覧の確認
現在のネットワーク接続の一覧を確認するには「-a」オプションを用います。ネットワーク接続とは、主にTCP接続におけるコネクションとなります。つまり、ホストのトランスポート層におけるプロトコル情報を表示します。ただし、UDPやRAW(TCP/UDPではないそのほかの任意のプロトコル)ソケットについてもリストアップされます。
単にパラメータなしの場合には、ESTABLISHED状態(接続中)のコネクションのみが表示されます。また、-aオプションだけではUNIXドメイン・ソケットなども含めて大量に表示されるので、「netstat -aA inet」としてIPv4に限定して表示すると見やすいかもしれません。
$ netstat -4 -6 -aA inet Active Internet connections (servers and established) Proto Recv-Q Send-Q Local Address Foreign Address State tcp 0 0 localhost:mysql *:* LISTEN tcp 0 0 localhost:ipp *:* LISTEN tcp 0 0 192.168.1.5:55048 nrt19s02-in-f23.1e1:www ESTABLISHED tcp 0 0 192.168.1.5:55047 nrt19s02-in-f23.1e1:www ESTABLISHED tcp 0 0 192.168.1.5:35956 nrt19s17-in-f19.1e1:www ESTABLISHED tcp 0 0 192.168.1.5:58792 privet.canonical.co:www TIME_WAIT tcp 0 0 192.168.1.5:38825 avocado.canonical.c:www ESTABLISHED tcp 0 0 192.168.1.5:55046 nrt19s02-in-f23.1e1:www ESTABLISHED tcp 0 0 192.168.1.5:39161 nrt19s01-in-f15.1e1:www ESTABLISHED tcp6 0 0 [::]:www [::]:* LISTEN tcp6 0 0 localhost:ipp [::]:* LISTEN udp 0 0 *:bootpc *:* $
この例では分かりやすくするために、IPv4, IPv6 に限定して表示しています。
Proto | プロトコルの種類。TCP/UDP/RAWなど、コネクションのトランスポート種別が表示されます。 |
Local Address | 接続元(ローカル)ホストの IPアドレスとポート名(番号)。IPアドレスは特定のアドレスとソケットがバインドされている場合にはそのアドレスが、特定されていない場合には「0.0.0.0」が表示されます。ポート名は /etc/servicesファイルに登録されている名称になります。-n オプションにより、すべて IPアドレスとポート番号で表示することが出来ます。 |
Foreign Address | 接続先ホスト名(IPアドレス)とポート名(番号)。 |
State | 接続の現在のステータス。 |
Stateが「ESTABLISHED」となっているものが、現在ローカルから接続先ホストのアプリケーション(ポート番号)へ接続が行われているものです。例えば、tcp の3行目では、ローカルの「192.168.1.5」から 55048番ポートを利用して、「nrt19s02-in-f23.1e100.net」の Webサーバー(port 80)へ接続されていることが分かります。
Stateが「LISTEN」である接続は、外部からの接続待ち受け(ソケットのLISTEN状態)であることを示しています。
また、TCPとUDPで同じポート番号を待ち受けしている場合があります(UDPでは「Foreign Address」が「*:*」となっている接続)。
アドレスが「0.0.0.0」となっている場合は、そのソケットはホストに存在するあらゆるIPアドレスとも結び付けられています(バインド)。明示的にIPアドレスが振られている場合には、そのIPアドレスへの接続のみと通信します。
■ ネットワークの統計情報
「netstat -s」により、ホストのネットワーク統計情報を表示することが出来ます。IPやTCP/UDP、ICMPといったプロトコルごとの統計情報が確認できます。それぞれ、該当する OSのプロトコル・スタックごとに処理された結果となっています。
$ netstat -s Ip: 13245 total packets received 0 forwarded 0 incoming packets discarded 13243 incoming packets delivered 6808 requests sent out Icmp: 0 ICMP messages received 0 input ICMP message failed. ICMP input histogram: 0 ICMP messages sent 0 ICMP messages failed ICMP output histogram: Tcp: 44 active connections openings 5 passive connection openings 4 failed connection attempts 5 connection resets received 2 connections established 13073 segments received 6660 segments send out 0 segments retransmited 0 bad segments received. 9 resets sent Udp: 187 packets received 0 packets to unknown port received. 0 packet receive errors 189 packets sent UdpLite: TcpExt: 22 TCP sockets finished time wait in fast timer 37 delayed acks sent Quick ack mode was activated 2 times 12330 packet headers predicted 58 acknowledgments not containing data payload received 3 predicted acknowledgments 2 DSACKs sent for old packets 5 connections reset due to unexpected data IpExt: InMcastPkts: 6 OutMcastPkts: 9 InBcastPkts: 26 OutBcastPkts: 1 InOctets: 18566450 OutOctets: 428542 InMcastOctets: 1859 OutMcastOctets: 1979 InBcastOctets: 4171 OutBcastOctets: 71 $
IP | 処理したIPパケットの統計値。この統計にはTCP/UDP/ICMPの統計も含まれています。通常のクライアントやサーバーであれば、単にエラー・パケットが報告されていないかどうかなどを確認します。通常、かなりの高負荷がかかっているなどの状況でなければ、ほとんどエラーや破棄パケットの発生はないはずです。また、マルチホーム・ホストでルーティングを行っている場合、ルーティング関連パケット数や、IPパケットのフラグメンテーション(分割)と再構成パケット数を確認すると良い。数や比率が高いようであれば、それだけ処理負荷がかかることになるので、ネットワークのパフォーマンスにも影響します。それぞれのインターフェイスのMTUが適切かどうか検討すると良い。 |
ICPM | ルータやホスト間で通信されるネットワーク状態の通知用のパケットです。ここは利用状態というよりも、システム的な情報になります。「Redirect」メッセージが多く表示されている場合、ルーティング経路が間違っている可能性があります。「Source Quench」が発生していた場合、経路上のどこかでバッファ不足が発生している可能性があります。パケット数ではなくメッセージ数になります。 |
TCP | TCPはコネクション指向プロトコルなので、パケット数ではなく主にコネクション数となります。 |
UDP | UDPはTCPと異なりコネクションの概念はないので、パケット単位の統計となります。 |
■ インターフェイス/イーサネット・レベルでの統計情報
「netstat -i」で設置されているインターフェイスごと(イーサネット・レベルでもある)の統計情報を表示できます。
$ netstat -i Kernel Interface table Iface MTU Met RX-OK RX-ERR RX-DRP RX-OVR TX-OK TX-ERR TX-DRP TX-OVR Flg eth0 1500 0 13288 0 0 0 6825 0 0 0 BMRU lo 16436 0 48 0 0 0 48 0 0 0 LRU $
Iface | インターフェース名 |
MTU | インターフェースごとの MTU値 |
Met | インターフェースごとのメトリック値 |
RX- | 受信関連の統計値。正常パケット数/エラー・パケット数/破棄パケット数/オーバーロード・パケット数。 |
TX- | 送信、転送関連の統計値。正常パケット数/エラー・パケット数/破棄パケット数/オーバーロード・パケット数。 |
■ ルーティング・テーブルの確認
「netstat -r」でルーティング・テーブルの表示が行えます。表示される内容などはrouteコマンドとほぼ同じです。