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 基本要約推奨事項 (タイトル)

推薦する

Nginx の高同時実行最適化の実践

1. チューニングの必要性​ 私は、どのように書けばいいのか本当に分からないので、共有するために最適...

Windows10 での MySQL msi インストール チュートリアル (画像とテキスト付き)

1. ダウンロード1. MySQL msi 公式 Web サイトから最新のダウンロードをクリックす...

HTML でのアンカータグの使用例の共有

アンカータグの使用法:同じドキュメント内の特定の場所にリンクすることをアンカー リンクと呼びます。ア...

ブログデザイン ウェブデザイン デビュー

私がデザインした最初の Web ページは次のとおりです。 私はこの業界に7年間在籍し、プログラミング...

js を使用してウォーターフォール効果を実現する

この記事の例では、滝の流れの効果を実現するためのjsの具体的なコードを参考までに共有しています。具体...

電子メールの HTML ページを作成するための原則の概要

HTML メールはこのサイト上の独立したホスト ページではないため、他の誰かによってホストされていま...

Tomcat CentOS インストールプロセス図

Tomcat CentOS インストールこのインストール チュートリアルでは、次の内容について説明し...

効果的なウェブフォームのための 8 つのルール

ユーザーから情報を収集する場合、Web フォームを使用するより簡単で直接的な方法はありません。適切に...

::before/:before と ::after/:after の使用に関する深い理解

パート1: 基礎1. :active や :hover などの疑似クラスとは異なり、これらはすべて疑...

Linux サーバーのグラフィック カードのクラッシュの解決策

ログインインターフェースの解像度が特に大きい場合、グラフィカルインターフェース全体が特に大きくなり、...

JS でクリップボード API を使用する方法

目次1. Document.execCommand() メソッド(1)コピー操作(2)貼り付け操作(...

Linux dirnameコマンドの具体的な使い方

01. コマンドの概要dirname - ファイル名からディレクトリ以外のサフィックスを削除しますd...

Vite+ElectronでVUE3デスクトップアプリケーションを素早く構築

目次1. はじめに2. Viteプロジェクトを作成する1. viteをインストールする2. プロジェ...

Flask アプリケーションの Docker デプロイ実装手順

1. 目的Flask アプリケーションをローカルで作成し、Docker でパッケージ化し、独自のサー...