クライアントプロセスとサーバープロセスの間にソケット接続があり、どちらも自分のマシンで実行されています。接続には、次のように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 /説明が表示されないのはなぜですか?
私は信じている netstat -ntp
は、ローカルアドレス列にクライアント(非リスニング)ソケットのみを表示します。
-l
フラグにより、netstat
はサーバー(リスニング)ソケットのみをリストし、-a
両方を取得する必要があります。そうすれば、[〜#〜] state [〜#〜]に基づいて区別できます。
netstat
なしでgrep
を実行すると、中央の左側の列に「Local Address」のような見出しがあり、中央の右側の列に「LocalAddress」のような見出しがあることがわかります。 「Foreign Address」のような見出し。サーバーのポート番号を含むローカルアドレスを示す行がサーバーです。
2つのクライアントプロセスを同時に開始してから実行すると、これをよりよく感じることができる場合があります。
Sudo netstat -ntp | grep -E "Address|8002"
また、ソケットが
FIN_WAIT2
状態のときに、プロセスID /説明が表示されないのはなぜですか?
おそらくプロセスが終了したためです。結局のところ、FIN
は「finish」または「final」を表します。 FINパケットとFIN_
状態は、TCP接続のシャットダウン(クローズ)に関連しています。これは通常、プロセスが完了したときにのみ発生します(一方または両方の場合に自動的に発生します)。ソケットは、開いていたプロセスがなくなった後、しばらくの間システム内でハングアップする可能性があります。繰り返しになりますが、両方の場合にnetstat
を実行すると、これをよりよく感じることができます。プロセスは正常に動作しており、シャットダウンするとプロセスがどのように変化するかを監視します。