netstat
100%

トラブルシューティング · レッスン 4

netstat

`ss` を使って Linux のソケット、リスナー、キュー、TCP 状態を調べる方法を学びます。

従来の netstat ツールは、ソケット、ルート、インターフェース統計を表示します。現代の Linux では、カーネルのソケット状態を効率よく公開し、iproute2 とともに保守されている ss が、ソケット調査に推奨されます。

待ち受けソケットの一覧

TCP と UDP の待ち受けソケットを数値で表示し、権限があれば所有プロセスも表示します。

$ sudo ss -lntup

-l はリスナー、-n は名前検索の抑止、-t-u は TCP と UDP、-p はプロセス情報を指定します。UDP はコネクションレスなので、接続されていないバインド済みソケットに TCP のような LISTEN ハンドシェイクはありません。

ソケットのトラブルシューティングで -n を使うのはなぜですか?

ポート、エンドポイント、サービス

ローカルソケットのエンドポイントは、アドレス、トランスポートプロトコル、ポートの組み合わせです。TCP 接続は、プロトコルと、送信元・宛先それぞれのアドレスおよびポートで区別されます。/etc/services は慣例的な名前と番号を対応付けますが、現在どのプロセスがポートを所有しているか、どのアプリケーションプロトコルを話すかは証明しません。

/etc/serviceshttps 443/tcp というエントリは何を示しますか?

TCP 状態を読む

代表的な状態は次のとおりです。

  • SYN-SENT:ローカルエンドポイントが接続要求を送り、進展を待っている。
  • ESTAB:TCP 接続が確立している。
  • CLOSE-WAIT:相手側は送信を閉じたが、ローカルアプリケーションがまだソケットを閉じていない。
  • TIME-WAIT:能動的に閉じたエンドポイントが、遅延セグメントの期限切れと最終交換の安全な処理を待っている。

CLOSE-WAIT が大量に存在し増え続ける場合、ローカルアプリケーションの後始末に問題があることがよくあります。TIME-WAIT は正常なプロトコル状態であり、運用上の問題かどうかは量とリソースへの影響で判断します。

CLOSE-WAIT のソケットを、まだ閉じる必要があるのはどちら側ですか?

キューの解釈

Recv-QSend-Q の意味は、状態とプロトコルによって異なります。確立済み TCP ソケットでは、アプリケーションによる受信待ち、または送信確認待ちのデータを示す場合があります。待ち受けソケットのキューフィールドは、同じ意味のアプリケーションペイロード量ではなく、接続バックログの状態を表します。

一回のスナップショットだけで、リークやボトルネックは確定できません。時間を追って測定し、プロセス動作、アプリケーション遅延、再送、リソース上限と照合します。

一度だけ観測した大きなソケットキューでは、診断に不十分なのはなぜですか?

調査対象を絞り込む

対象のプロトコル、状態、エンドポイント、プロセスだけに出力を限定します。

$ ss -tn state established
$ ss -ltn 'sport = :443'

リスナーが証明するのはローカルのトランスポート準備だけであり、リモートから到達できることやアプリケーションが正常なことではありません。症状に応じて、経路、ファイアウォール、パケット、TLS、アプリケーションを続けてテストしてください。

ポート 443 の TCP リスナーが存在しても証明できないものはどれですか?

レッスン完了

netstat を完了しました

これで、ポートとアプリケーションを混同せず、ss でソケット状態を調査できます。

  • プロセス情報付きのリスナーを数値で一覧表示する。

  • 慣例的なサービス名と実行時の所有者を区別する。

  • ローカルエンドポイントの視点で TCP の終了状態を解釈する。

  • ワークロードの文脈とともに、時間を追ってキューを測定する。

  • ローカルリスナーだけでなく、リモートでのアプリケーション動作も確認する。

学習進捗を保存

無料アカウントを作成してこのレッスンを保存し、どのデバイスからでも学習を続けられます。

無料アカウントを作成
次のレッスン
トラブルシューティング に戻る