LinuxシステムでのTCP接続状態の確認方法

Linux環境では、現在のTCP接続状況を確認するための複数のコマンドが利用可能です。接続ステータス、送信元/宛先IPアドレス、ポート番号などの情報を取得できます。

1. netstat コマンド(従来型ツール)

netstat -tunap

  • オプション説明

  • -t:TCP接続情報を表示

  • -u:UDP接続情報を表示(任意)

  • -n:名前解決を無効化(ホスト名ではなくIPアドレスを表示)

  • -a:すべての接続状態を表示(リッスン中および非リッスン中を含む)

  • -p:プロセス情報を表示(root権限が必要)

  • 出力例

Proto Recv-Q Send-Q Local Address    Foreign Address    State       PID/Program name
tcp   0      0      0.0.0.0:22       0.0.0.0:*          LISTEN      1234/sshd
tcp   0      0      192.168.1.10:22  203.0.113.5:12345  ESTABLISHED 5678/sshd

  • 重要なフィールド
  • State:接続状態(LISTENESTABLISHEDTIME_WAIT など)
  • PID/Program name:接続を使用しているプロセス(-p オプションと権限が必要)

補足:最新のシステムでは netstat が非推奨となっており、ss を使用することが推奨されます。

2. ss コマンド(推奨代替ツール)

ss -tunap

  • オプション説明netstat と同様の機能を持つが、パフォーマンスが向上

  • 出力例

Netid State  Recv-Q Send-Q Local Address:Port  Peer Address:Port
tcp   LISTEN 0      128    0.0.0.0:22         0.0.0.0:*        users:(("sshd",pid=1234,fd=3))
tcp   ESTAB  0      0      192.168.1.10:22    203.0.113.5:12345 users:(("sshd",pid=5678,fd=3))

  • 利点
  • 高速な実行性能
  • デフォルトでより多くのカーネル情報を表示(タイマー情報など)

3. lsof コマンド(プロセスが開いたファイル/接続の確認)

sudo lsof -i tcp

  • 機能:TCP接続と対応するプロセス、ユーザー情報をリスト表示

  • 出力例

COMMAND  PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
sshd    1234 root    3u  IPv4  12345      0t0  TCP *:ssh (LISTEN)
sshd    5678 root    3u  IPv4  67890      0t0  TCP 192.168.1.10:ssh->203.0.113.5:12345 (ESTABLISHED)

4. 接続状態の集計

ss -tun | awk '{print $1}' | grep -v "State" | sort | uniq -c

  • 機能:各種状態のTCP接続数を集計(ESTABLISHEDTIME_WAIT など)

  • 出力例

5 LISTEN
12 ESTABLISHED
3 TIME-WAIT

5. 接続変化のリアルタイム監視

watch -n 1 "ss -tunap | grep ESTAB"

  • 機能:確立された接続(ESTABLISHED)を1秒ごとに更新表示

6. 特定ポートの接続確認

ss -tunap | grep ':22'  # SSHポート(22)の接続を確認

主要TCP接続状態の解説

状態 意味
LISTEN サーバーがポートをリッスン中
ESTABLISHED アクティブな接続(データ転送中)
TIME\_WAIT 接続終了後、リモートがACKを受信したことを保証するための待機状態(高負荷時の短時間接続で発生)
CLOSE\_WAIT 接続が正しくクローズされていない(アプリケーションコードの確認が必要)
SYN\_SENT クライアントが接続要求を送信中(ネットワーク問題やファイアウォールブロックの可能性)

留意事項

  1. 権限要件:プロセス情報(-p オプション)を表示するには、sudo またはroot権限が必要です。

  2. ツールのインストール

  • sslsof が存在しない場合、パッケージマネージャーでインストール可能です:
sudo apt install iproute2 lsof  # Debian/Ubuntu
sudo yum install iproute lsof   # CentOS/RHEL

  1. パフォーマンス分析:多数の TIME_WAIT 接続が見られる場合は、カーネルパラメータの調整(net.ipv4.tcp_tw_reuse など)が必要になることがあります。

これらのコマンドを使用することで、システムのTCP接続状態を詳細に把握し、ネットワークやアプリケーション層の問題を迅速に特定できます。

タグ: linux TCP Networking ss netstat

7月16日 16:24 投稿