用語辞典・コマンド・確認ツール

netstat

netstatとは

netstat(ネットスタット)は、接続中の通信、待受ポート、経路情報などを表示するコマンドです。名称はnetwork statistics(ネットワーク・スタティスティクス)に由来し、OSカーネルが持つソケット、経路制御、インターフェース、プロトコルカウンター等を選択肢に応じて表示します。

Windows、Linuxのnet-tools、BSD、macOS等に同名コマンドがありますが、既定表示と選択肢は異なります。Windowsで引数なしならアクティブTCP接続、Linux net-tools版では開くソケットを中心に表示するなど、対象OSの案内を基準にします。

netstatはカーネル内の表をその時点で写すツールです。ネットワーク上を流れるパケットそのものをキャプチャーするツールではなく、過去の接続履歴を完全保存するログでもありません。

カーネルが持つソケット・経路・インターフェース・プロトコル統計から必要な情報を表示する接続、待ち受けソケット、UDP、プロセス、カウンターとパケットキャプチャーを分ける
OSカーネルの複数表をmagnifierで読み、アクティブTCP、待ち受けポート、UDPエンドポイント、経路制御signpost、インターフェース送受信、プロトコルstatistics、処理gearを別パネルへ表示し、名前解決経路、一定間隔のスナップショット、パケットキャプチャーではないことを示すピクトグラム図解
図1表示の途中にもソケットは生成・終了します。表の各行は同一時刻の永久記録ではなく、観測時点付近の状態です。

選択肢で観測対象を切り替える

ConnectionsアクティブTCPソケット

ローカルエンドポイント、リモートエンドポイント、ESTABLISHED等のTCP状態を表示します。

Listeners接続を待つローカルポート

どのアドレス・ポートでアプリケーションが新規接続を受け付けるかを示します。

UDP endpoints接続を持たないソケット

ローカルアドレス・ポートを中心に表示し、TCPと同じ状態列を期待しません。

Processesソケットを持つPID・プログラム

権限とOS選択肢が許せば、処理IDや実行ファイルを対応付けられます。

Routesカーネルの経路表

宛先、マスク・プレフィックス、ゲートウェイ、インターフェース、指標等を表示します。

Statisticsインターフェース・プロトコル累積カウンター

バイト・パケット、エラー、TCP・UDP・IP・ICMP統計等を差分で調べます。

ローカルと外部エンドポイントを読む

TCPの行にはローカルアドレスとポート、外部またはリモートのアドレスとポート、状態が並びます。クライアント接続ではローカル側が一時ポート、リモート側がサーバーのwell-known port(ウェルノウン・ポート)になることが多く、サーバーの待ち受けソケットではローカル側がサービスポートです。

0.0.0.0::で待受けしていれば複数ローカルアドレスを対象にし、127.0.0.1::1なら原則ローカルホスト内だけです。ただし実際に外部から届くかはファイアウォール、経路、NAT、コンテナー、クラウドセキュリティ規則にも依存します。

LISTENINGはアプリケーションの準備状態

LISTENINGはTCPソケットが新しい接続を受け付ける状態です。「Internetへ公開済み」や「正常応答する」と同義ではありません。処理がポートを割り当てしていても、ファイアウォールが遮断し、アプリケーション内部がエラーを返す場合があります。

UDPにはTCPのような接続確立がないため、待ち受け相当のソケットでもLISTENING状態を表示しません。状態列が空だから停止しているとは判断せず、まずプロトコルを確認します。

TCP状態は通信の段階

ESTABLISHEDは双方で接続が成立、SYN_SENT・SYN_RECEIVEDは確立途中、FIN_WAIT・CLOSE_WAIT・LAST_ACKは終了処理、TIME_WAITは遅れて届くセグメントとの混同を防ぐ待機です。

TIME_WAITが多数あることだけで障害とは言えません。CLOSE_WAITが継続増加する場合はアプリケーションがピアのclose後にソケットを閉じていない可能性がありますが、観測時間、トラフィック量、プログラム設計を合わせます。

名前解決を切ると元のエンドポイントを見やすい

数値表示選択肢を使わないと、IPアドレスをホスト名へ、ポート番号をサービス名へ変換して表示する実装があります。名前変換は読みやすい一方、DNS待ちで遅くなり、サービス名が実際の処理と同じとは限りません。

問題調査ではまずnumeric表示でアドレス・ポートを保存し、必要な項目だけ後から名前へ変換します。Windowsの-n、Unix系の同名選択肢など、実装の案内を確認します。

処理対応は権限と時点に依存する

Windowsの-oはPID、-bは各接続・待ち受けソケットの作成に関わる実行ファイルを表示できます。ただし、-bには十分な権限が必要で、表示に時間がかかる場合があります。Unix系でもPID・プログラム表示には他の利用者の情報を読む権限が必要です。

短命処理は表示前に終了し、PIDは後で再利用されます。重要な調査では出力時刻、処理一覧、サービス管理者、アプリケーションログを同時に採ります。

経路表示は経路追跡ではない

経路表選択肢はローカルカーネルが持つ宛先プレフィックス、ゲートウェイ、インターフェース等を表示します。Internet途中のルーター列を測るtracerouteとは別です。

経路表は候補と方針の一部で、送信元アドレス、方針規則、名前空間、VPN、マーク等が選択へ影響します。Linuxではip経路の方が現代の詳細を扱えます。

カウンターは累積値とサンプリング間隔で読む

インターフェースstatisticsやプロトコルstatisticsは、送受信バイト・パケット、エラー、discard、TCP再送等の累積カウンターです。一回の大きな値より、二回の差分と経過時間、カウンターリセットやwrapを確認します。

Windows netstatは間隔を指定して同じ種類の表示を繰り返せます。ただし大量行が流れるだけでは変化追跡が難しく、時刻付きログや監視ツールを併用します。

Linuxではss・ipへ役割が移っている

Linuxのnet-tools版netstatは従来ツールで、多数ソケットの列挙が遅い場合があります。ソケットはss、経路はip経路、インターフェースはipリンクへ機能を分けるのが現在の一般的な方法です。

Windowsではnetstatが標準コマンドとして引き続き提供されています。「netstatは廃止」と全OSへ一般化せず、OSごとの実装を見ます。

netstatは、カーネルが持つ接続、待ち受けソケット、経路、通信統計などをオプションで切り替えて表示する確認ツールです。プロトコル、エンドポイント、状態、PIDを読めますが、外部から到達できるか、パケット内容、過去の履歴までは分かりません。

Windows netstatのactive connection、listener、PID、routing・interface・protocol statistics:Microsoft Learn「netstat」、Linux net-tools版とss推奨:netstat(8) manual page

関連用語