netstat出力でTCPサーバーとクライアントを区別する

netstat出力でTCPサーバーとクライアントを区別する

マイコンピュータで実行されているクライアントプロセスとサーバープロセスの間にソケット接続があります。接続マークには、次の2つの項目があります。

sudo netstat -ntp | grep 56442
tcp        1      0 127.0.0.1:56442         127.0.0.1:8002          CLOSE_WAIT  8276/python
tcp        0      0 127.0.0.1:8002          127.0.0.1:56442         FIN_WAIT2   -

この場合、サーバーが何であるかをどうやって知ることができますか?

私はTCPサーバーがポートで実行されていて8002、クライアントがポートからリスニングサーバーに接続していることを知っています56442

netstat出力項目を見て、サーバーとクライアントを区別する方法を見つけようとします。

FIN_WAIT2ソケットが状態にあるときにプロセスID /説明が表示されないのはなぜですか?

ベストアンサー1

netstatを使用せずに実行すると、中央のgrep左側の列に「ローカルアドレス」などのヘッダーがあり、中央の右側の列に「外部アドレス」などのヘッダーがあることがわかります。サーバーのポート番号を含むローカルアドレスを示す行はサーバーです。

両方のクライアントプロセスを同時に起動し、次を実行すると、これをよりよく感じることができます。

sudo netstat -ntp | grep -E "Address|8002"

ソケットFIN_WAIT2が状態にあるときにプロセスID /説明が表示されないのはなぜですか?

それはおそらくプロセスが終了したからです。これは最終的にFIN「完了」または「最終」を意味します。 FINパケットとFIN_ステータスはTCP接続のクローズ(クローズ)に関連しており、これは通常プロセスが完了したときにのみ発生します(プロセスの一方または両方が終了すると自動的に発生します)。ソケットを開いたプロセスが消えた後でも、ソケットは一定時間システムに残ることがあります。繰り返しますが、netstat 両方のプロセスをうまく実行してから、シャットダウン時にどのように変化するかを観察すると、これをよりよく理解できます。

おすすめ記事