Linux の netstat コマンドの詳細な紹介

Linux の netstat コマンドの詳細な紹介

1. はじめに

Netstat はコンソール コマンドであり、TCP/IP ネットワークを監視するための非常に便利なツールです。ルーティング テーブル、実際のネットワーク接続、各ネットワーク インターフェイス デバイスのステータス情報を表示できます。

Netstat は、IP、TCP、UDP、ICMP プロトコルに関連する統計データを表示するために使用され、通常はローカル マシン上の各ポートのネットワーク接続状態を確認するために使用されます。

2. 出力情報の説明

netstat を実行した後の出力は次のようになります。

[root@sy-suz-srv51 ~]# ネットスタット
アクティブなインターネット接続(サーバーなし)
プロトコル 受信-Q 送信-Q ローカルアドレス 外部アドレス 状態
tcp 0 0 k8sdev.sui:sun-sr-https k8sdev.suiyi.com.:34880 SYN_RECV
tcp 0 0 k8sdev.suiyi.com.c:2379 10.1.62.21:47910 確立
tcp 0 0 k8sdev.suiyi.com.c:2379 k8sdev.suiyi.com.:37790 確立
tcp 0 0 sy-suz-srv:pcsync-https 10.1.62.162:49200 確立
tcp 0 0 k8sdev.suiyi.com.:52866 k8sdev.sui:sun-sr-https 確立
tcp 0 0 k8sdev.suiyi.com.:37728 k8sdev.suiyi.com.c:2379 確立
tcp 0 0 k8sdev.sui:sun-sr-https k8sdev.suiyi.com.:52852 確立
tcp 0 0 k8sdev.sui:sun-sr-https 10.1.62.162:32841 確立されました
tcp 0 0 sy-suz-srv:pcsync-https sy-suz-srv51:60094 確立
tcp 0 0 localhost:webcache localhost:40136 確立
tcp 0 0 k8sdev.suiyi.com.:35466 10.1.62.21:sun-sr-https 確立されました
tcp 0 0 k8sdev.suiyi.com.:34358 10.1.62.21:sun-sr-https 確立されました
アクティブな UNIX ドメイン ソケット (サーバーなし)
Proto RefCnt フラグ タイプ 状態 I-ノード パス
unix 3 [ ] DGRAM 18442 /run/systemd/notify
unix 2 [ ] DGRAM 18444 /run/systemd/cgroups-agent
unix 2 [ ] DGRAM 23822 /var/run/chrony/chronyd.sock
unix 8 [ ] DGRAM 18455 /run/systemd/journal/socket
unix 18 [ ] DGRAM 18457 /dev/log
unix 2 [ ] DGRAM 14151 /var/run/nscd/socket
unix 2 [ ] DGRAM 584 /run/systemd/shutdownd
unix 3 [ ] ストリームが接続されました 124439388 /run/dbus/system_bus_socket
unix 3 [ ] ストリームが接続されました 42312 /run/systemd/journal/stdout
unix 3 [ ] ストリーム接続 39909
unix 3 [ ] ストリーム接続 21675
unix 3 [ ] ストリーム接続 47538
unix 3 [ ] ストリームが接続されました 124585242 /var/run/docker/containerd/docker-containerd.sock
unix 3 [ ] ストリーム接続 21658
unix 2 [ ] ストリーム接続 30160
unix 3 [ ] ストリームが接続されました 33750 /run/systemd/journal/stdout
unix 3 [ ] ストリームが接続されました 124614293 @/containerd-shim/moby/c44e49ee0f86d8a4109afb176701795c64f44655abb1861275bbd3b2a9f76394/shim.sock
unix 3 [ ] ストリームが接続されました 124609611 @/containerd-shim/moby/a736ba153c07f0bbf099ae1a1069530e35bfa28ae93f8f235d6c35a6c5ed9ce7/shim.sock
unix 3 [ ] ストリームが接続されました 124601653 @/containerd-shim/moby/20d3fd59d03455d45b1da2636fca25d0edd79dac1947c17045a797eb8506157c/shim.sock

netstatの出力は2つの部分に分けられます

1.アクティブなインターネット接続はアクティブな TCP 接続であり、「Recv-Q」と「Send-Q」は受信キューと送信キューを指します。これらの数値は通常 0 になります。そうでない場合、パッケージはキューに積み重なっています。この状況は非常にまれなケースでのみ見られます。

2.アクティブ UNIX ドメイン ソケットは、アクティブな Unix ドメイン ソケットです(ネットワーク ソケットと同じですが、ローカル通信にのみ使用でき、パフォーマンスを 2 倍にすることができます)。

列名の説明:

Proto: 接続で使用されるプロトコルを表示します。

RefCnt: このソケットに接続されているプロセス番号を示します。

タイプ: ソケットのタイプを表示します。

状態: ソケットの現在の状態を表示します。

パス: ソケットに接続されている他のプロセスによって使用されるパス名を示します。

3. netstatの共通パラメータ

-a (all) はすべてのオプションを表示します。デフォルトでは、LISTEN 関連のオプションは表示されません。

-t (tcp) tcp 関連のオプションのみを表示します。

-u (udp) udp関連のオプションのみを表示します。

-n はエイリアスの表示を拒否し、表示されるすべての数字を数字に変換します。

-l は、Listen 状態のサービスのみを一覧表示します。

-p 関連するリンクを作成するプログラムの名前を表示します

-r ルーティング情報、ルーティングテーブルを表示する

-e uid などの拡張情報を表示します。

-s プロトコル別の統計

-c 一定の時間間隔で netstat コマンドを実行します。

LISTEN および LISTENING 状態は -a または -l でのみ確認できます。

4. netstatネットワークステータスの詳細な説明

通常のTCP接続には3つの段階があります: 1. TCP 3ウェイハンドシェイク、2. データ転送、3. TCP 4ウェイハンドシェイク

図に示すように:

SYN : (シーケンス番号の同期) このフラグは、3 ウェイ ハンドシェイクを通じて TCP 接続が確立された場合にのみ有効です。新しい TCP 接続要求を示します。

ACK : (確認応答番号) は TCP 要求の確認マークであり、すべてのデータが正常に受信されたことをピア システムに通知します。

FIN : (終了フラグ、FINish) は TCP セッションを終了するために使用されます。ただし、対応するポートはまだ開いており、後続のデータを受信する準備ができています。

LISTEN : まず、サーバーはリスニング用のソケットを開く必要があります。ステータスは LISTEN です。ソケットは着信接続をリッスンしています。リモート TCP ポートからの接続要求をリッスンします。

SYN_SENT : クライアントはアプリケーションを通じて接続を呼び出し、アクティブオープンを実行します。次に、クライアント TCP は SYN を送信して接続の確立を要求し、状態は SYN_SENT に設定されます。ソケットはアクティブに接続を確立しようとしています。接続要求を送信した後、一致する接続要求を待機します。

SYN_RECV : サーバーはクライアントの SYN を確認するために ACK を送信し、同時にクライアントに SYN を送信し、その後状態が SYN_RECV に設定されます。

ネットワークから接続要求を受信しました。接続要求を受信および送信した後、接続要求の確認を待機しています。

ESTABLISHED : オープン接続を表します。双方がデータを交換できる、またはすでに交換しています。ソケットには確立された接続があります。オープン接続を表します。データをユーザーに送信できます。

FIN_WAIT1 : アクティブ クローズ アプリケーションが close を呼び出すため、TCP は FIN 要求を送信して接続をアクティブにクローズし、FIN_WAIT1 状態になります。ソケットが閉じられ、接続がシャットダウンしています。リモート TCP の接続シャットダウン要求、または以前の接続シャットダウン要求の確認を待機しています。

CLOSE_WAIT : FIN を受信した後、受動的なクローズエンド TCP は FIN 要求に応答して ACK を送信し (その受信はファイル終了マークとして上位層アプリケーションにも渡されます)、CLOSE_WAIT に入ります。リモートエンドはシャットダウンし、ソケットが閉じられるのを待っています。ローカルユーザーから送信される接続中断要求を待っています。

FIN_WAIT2 : アクティブなクローズ側が ACK を受信すると、FIN-WAIT-2 に入り、接続が閉じられ、ソケットはリモート側からのシャットダウン要求を待機します。リモート TCP からの接続中断要求を待機します。

LAST_ACK : 受動的なクローズ側で一定時間が経過すると、ファイル終了文字を受信したアプリケーションは CLOSE を呼び出して接続を閉じます。これにより、TCP も FIN を送信し、相手側の ACK を待ちます。次に LAST-ACK に入り、リモート側がシャットダウンし、ソケットが閉じられます。確認応答を待機しています。リモート TCP に最初に送信された接続中断要求の確認を待機しています。

TIME_WAIT : アクティブなクローズ側で FIN を受信した後、TCP は ACK パケットを送信し、TIME-WAIT 状態に入ります。ソケットは、閉じた後、ネットワーク内に残っているパケットを処理するために待機しています。リモート TCP が接続終了要求の確認を確実に受信できるように、十分な時間を待機してください。

CLOSING : あまり一般的ではありません。両方のソケットがシャットダウンされていますが、まだすべてのデータが送信されていません。リモート TCP が接続が中断されたことを確認するのを待機しています。

CLOSED : ACK パケットを受信すると、パッシブクローズエンドはクローズ状態になります。接続が終了しました。ソケットは使用されていません。接続ステータスはありません。

TIME_WAIT 状態の形成は、接続をアクティブに閉じる側でのみ発生します。

パッシブクローズ側からFIN要求を受信した後、アクティブクローズ側は他の相手にACKを正常に送信し、自身の状態をFIN_WAIT2からTIME_WAITに変更します。両方の相手が接続を完了するまでに、MSL(最大セグメント存続時間、MSLはデータグラムがインターネット上に存在できる時間)の2倍待つ必要があります。

そうすることで、ステータスを CLOSED に変更して接続を閉じることができます。現在、RHEL の TIME_WAIT 状態は 60 秒間維持されます。

Linux の関連キープアライブパラメータ

1. tcp_keepalive_time – 整数

キープアライブが有効な場合に TCP がキープアライブ メッセージを送信する頻度。(デフォルト: 2 時間)

TCP がキープアライブ プローブ パケットの送信を開始する前に接続がアイドル状態である必要がある時間 (秒単位)。

2. tcp_keepalive_probes – 整数

接続が切断されたと判断されるまで TCP が送信するキープアライブ プローブの数。(デフォルト値: 9)

送信される TCP キープアライブ検出パケットの最大数。デフォルトは 9 です。9 個のキープアライブ検出パケットを送信した後もピアが応答しない場合は、接続が閉じられます。

3. tcp_keepalive_intvl – 整数

プローブが送信される頻度。tcp_keepalive_probes を掛けると、応答のない接続を切断する時間になります。
プローブが開始された後。デフォルト値: 75 秒、つまり、約 11 分間の再試行後に接続が中止されます。

デフォルトでは、2 つの TCP キープアライブ検出パケットを送信する間隔は 75 秒です。

5. よく使われるnetstat関連コマンド

1. すべてのポートを一覧表示します #netstat -a

2. すべてのTCPポートを一覧表示します #netstat -at

3. すべてのudpポートを一覧表示します #netstat -au

4. リスニングポートのみを表示する#netstat -l

5. すべてのリスニングTCPポートのみを一覧表示します #netstat -lt

6. すべてのリッスンしている UDP ポートのみを一覧表示します #netstat -lu

7. すべてのUNIXリッスンポートを一覧表示します #netstat -lx

8. すべてのポートの統計情報を表示します #netstat -s

9. TCPまたはUDPポートの統計情報を表示する#netstat -stまたは-su

10. 出力にPIDとプロセス名を表示します #netstat -p

11. ホスト、ポート、ユーザー名がnetstat出力に表示されない(ホスト、ポート、またはユーザー)

ホスト、ポート、ユーザー名を表示したくない場合は、netstat -n を使用します。これらの名前の代わりに数字が使用されます。

比較クエリが不要なので、出力を高速化することもできます。

#netstat -an

3つの名前のうち1つだけを表示したくない場合は、次のコマンドを使用します。

# netsat -a --数値ポート
# netsat -a --数値ホスト
# netsat -a --数値ユーザー

12. netstat情報を継続的に出力する #netstat -c

13. プログラムが実行されているポートを確認します #netstat -ap | grep ':80'

14. サービスポートへの接続が最も多い IP アドレスを表示する (上位 20)

#netstat -nat | grep "10.1.62.23:443" |awk '{print $5}'|awk -F: '{print $1}'|sort|uniq -c|sort -nr|head -20

15. TCP各種ステータスリスト 

#netstat -nat |awk '{print $6}'

統計量

#netstat -nat |awk '{print $6}'|sort|uniq -c

ソート

#netstat -nat |awk '{print $6}'|sort|uniq -c|sort -rn

#netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'

16. TCPリスナーの数を直接カウントする

#netstat -ant | wc -l

Linux システムでの netstat コマンドの詳細な紹介に関するこの記事はこれで終わりです。Linux システムでの netstat コマンドに関するより関連性の高いコンテンツについては、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • Linux netstatコマンドの詳細な説明
  • Linux における netstat コマンドの一般的な使用例
  • Linux netstatコマンドの詳細な説明
  • Linux netstatコマンドの詳細な分析

<<: 

>>:  HTML 基本要約推奨事項 (タイトル)

推薦する

JavaScript を学ぶときに知っておくべき 3 つのヒント

目次1. 魔法の拡張演算子1. 配列をコピーする2. 配列を結合する3. オブジェクトを展開する2....

MySQL でコミットされていないトランザクションを見つけるための SQL の例の簡単な分析

以前、「MySQL でコミットされていないトランザクション情報を検索する方法」というタイトルのブログ...

プライベートレジストリ内の画像を照会または取得する方法

Dockerはプライベートレジストリ内のイメージを照会または取得するために、 docker 検索 1...

CentOS 8にdockerをインストールする最も詳細な方法

CentOS 8にDockerをインストールする公式ドキュメント: https://docs.doc...

MySQL 8.0.26 のインストールと簡易チュートリアル (インターネット上で最も完全)

目次1. MySQLをダウンロードする1.1 ダウンロード1.2 インストール1. MySQLをダウ...

jsBridgeの動作メカニズムを1つの記事で学ぶ

目次js 呼び出しメソッドアンドロイド1.jsはネイティブを呼び出す2. ネイティブコールjs iO...

JavaScript 型検出方法の例のチュートリアル

序文JavaScriptはWebフロントエンドで広く使われている言語の一つであり、Webアプリケーシ...

N キロメートル以内のデータを検索する MySQL の簡単な例

地球の円周率と半径、検索ポイントの経度と緯度から、検索ポイントと検索データテーブル間の距離はNキロメ...

Nginx ロケーション設定(ロケーションのマッチング順序)の詳細な説明

ロケーションは「位置指定」を意味し、主にさまざまな位置指定のための URI に基づいています。これは...

MacでDockerがホストマシンにpingできない問題を解決する

解決Docker for Macに付属するLinux仮想マシン(軽量ですが、ソケットファイルを使用し...

LinuxのバックグラウンドでPythonプログラムを実行するいくつかの方法

1. 最初の方法は、unhup コマンドを直接使用してプログラムをバックグラウンドで実行することです...

Linux プロセスの CPU 使用率が 700% に達し、終了できない場合の解決策

目次1. 問題の発見2. プロセスの詳細情報を表示する3. 解決策4. 大法を再開する1. 問題の発...

Vueのref属性の詳細な説明

要約するこの記事はこれで終わりです。皆さんのお役に立てれば幸いです。また、123WORDPRESS....

Docker で ElasticSearch と Kibana をインストールするためのサンプル コード

1. はじめにElasticsearchは現在非常に人気があり、多くの企業が利用しているため、esを...

Dockerイメージのインポートとエクスポートの実装

GitLabのDocker使用法gitlab ドッカー起動コマンド docker run -d -p...