マイコンピュータで実行されているクライアントプロセスとサーバープロセスの間にソケット接続があります。接続マークには、次の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
両方のプロセスをうまく実行してから、シャットダウン時にどのように変化するかを観察すると、これをよりよく理解できます。
答え2
netstat -ntp
クライアント(聞こえない)ソケットだけが表示されると思います。ローカルアドレス柱。
これ-l
netstat
フラグはサーバー(受信)ソケットのみをリストするようにしてください。-a
どちらも手に入れなければならないので、基盤をつかむことができます。状態S.