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

ssコマンド

ssコマンドとは

ss(エスエス)コマンドは、Linuxでソケットや接続状態を高速に表示する、netstatの代替として使われるコマンドです。iproute2に含まれ、カーネルのソケット診断情報を使って、TCP・UDP・UNIX等のソケットを詳しく絞り込めます。

オプションなしでは、通常は接続済みの非待ち受けソケットを表示します。「何も出ない=ソケットがない」ではありません。待ち受けソケットや特定プロトコルを含めるオプション、状態・エンドポイントのフィルターを目的に合わせて指定します。

ssは大量のソケットをすべて眺めるより、プロトコル・アドレスファミリー・状態・アドレス・ポートの条件でカーネル側の候補を絞り、必要なソケットのキュー、プロセス、タイマー、TCP内部情報を読むツールです。

カーネルのソケット情報へフィルター条件を渡し、該当するソケットだけを表示するエンドポイント、キュー、プロセス、タイマー、TCP内部値をパケット内容と分けて読む
カーネル内の多数のソケットから、プロトコル、IPv4・IPv6、状態、エンドポイント、ポートの条件で対象を絞り、キュー、プロセス、タイマー、TCP内部値を持つ少数の結果だけを表示する流れのピクトグラム図解
図1フィルターで表示を減らしてもソケット自体を削除するわけではありません。表示コマンドと、ソケットを強制終了する操作は明確に分けます。

絞り込みの軸

ProtocolTCP・UDP・RAW・UNIXなど

目的のトランスポートまたはローカルIPCの種類だけを選びます。

Address familyIPv4・IPv6・PACKET・UNIX

同じポート番号でもアドレスファミリーが違うソケットを分けます。

State待受け・接続確立済み・終了中等

TCP状態式で必要な段階だけを抽出します。

Endpointローカル・ピアアドレスとポート

ソース・宛先条件、プレフィックス、ポート比較で対象通信を絞ります。

Processプロセス・cgroup等との対応

権限があればPID、プログラム、サービスの情報などを表示します。

Internalsキュー・タイマー・TCP情報

メモリー、タイマー、RTT、輻輳ウィンドウ、再送などを必要に応じて追加します。

ソケットはIP通信だけではない

ソケットはアプリケーションとカーネルが通信エンドポイントを扱う仕組みで、TCP・UDPのインターネットソケットだけでなく、同一ホスト内のUNIXドメインソケット、RAWソケット、Netlinkソケットなどがあります。ssはアドレスファミリーとプロトコルを選んで表示できます。

Webサーバーの調査ならTCPの待ち受け、DNSならUDPとTCP、ローカルデーモンとの連携ならUNIXソケットというように、アプリケーションの通信方式から対象を決めます。

既定表示に待ち受けソケットは含まれない

オプションなしのssは、開かれている非待ち受けソケットのうち、確立済みの接続などを表示します。サーバーポートを確認するには待ち受け表示を明示し、TCP・UDPなどのプロトコルも指定します。

すべて表示する選択肢は便利ですが、使用中ホストでは大量行になります。最初からすべてを保存するより、プロトコル、状態、ポート、処理の順に絞ると誤読を減らせます。

LocalとPeerを状態に合わせて読む

接続済みTCPではLocal Address:PortとPeer Address:Portが通信の両端です。待ち受けソケットではローカル側が割り当て先となり、ピア側は未特定を示すワイルドカードになります。UDPソケットはconnectされていない場合、通信相手が特定されません。

IPv6の::で待ち受けるソケットがIPv4も受け付けるかは、システム設定とソケットオプションに依存します。表示一行だけでデュアルスタック動作を断定せず、IPv4・IPv6それぞれの待ち受けと実際の接続を確認します。

Recv-QとSend-Qの意味はソケット状態で変わる

接続済みソケットのRecv-Qはアプリケーションがまだ読んでいない受信データ、Send-Qは送信済みだが確認応答待ち等のデータを表すのが基本です。値が継続増加すれば、アプリケーション処理停滞、ピア受信、ネットワーク損失等を候補にします。

待ち受けソケットでは、キューの列が未accept接続数やバックログ上限など、接続済みソケットとは別の意味になります。両者の値を同じバイト量として比較してはいけません。詳しい意味はカーネルのバージョンとマニュアルでも確認します。

プロセス表示には権限が必要

プロセス表示のオプションは、ソケットを持つプログラム名、PID、ファイル記述子などを表示します。自分以外の利用者が動かすプロセスや詳しい情報は、特権がないと欠ける場合があります。空欄だから所有プロセスがないとは限りません。

コンテナーやネットワーク名前空間内のソケットは、調査している名前空間から見えない場合があります。ホスト、コンテナー、ポッド、名前空間のどこでコマンドを実行したかを記録します。

TCP内部情報は速度測定ではない

詳細表示のオプションでは、RTT、RTTのばらつき、輻輳制御、輻輳ウィンドウ、MSS、再送、ペーシングなどを表示できる場合があります。これらはそのTCPソケットの現在または累積状態であり、インターネット回線全体の最大速度ではありません。

短命接続では表示前に終了し、アイドル接続では最新状態が古い場合があります。アプリケーションログ、パケットキャプチャー、インターフェースカウンター、継続監視と照合します。

Netlink利用で大量ソケットを扱いやすい

ssはカーネルのソケット診断インターフェースへNetlink経由で問い合わせ、条件に合う情報を取得します。Linux net-tools版netstatが大量ソケットで遅くなる場合に、より詳しい状態とフィルターを扱えます。

ただしssはnetstatの選択肢をそのまま置き換えるコマンドではありません。構文と既定表示が違い、経路表やインターフェース統計はipコマンド等へ役割が分かれます。

スナップショットでありパケットキャプチャーではない

ssが表示するのはソケット状態とカーネル統計です。パケットのペイロード、TCPオプションを含む個々のパケット、途中のルーター、過去に終了したすべての接続は表示しません。

短い問題を捕まえるには間隔実行、継続監視、イベント追跡、アプリケーションメトリクス等を使います。パケット順序や再送原因を詳しく見る必要があれば、権限とプライバシーへ配慮してパケットキャプチャーを行います。

ssはLinuxソケットを条件で絞り、エンドポイント・状態・待ち行列・処理・タイマー・TCP内部値を読むツールです。既定表示の範囲、権限、名前空間、スナップショットという限界を含めて解釈します。

ssの既定表示、protocol・family・state・endpoint filter、process・timer・memory・TCP詳細:ss(8) manual page

関連用語