私はLinux組み込みディストリビューションで作業していて、着信および発信接続(まだアクティブである場合など)を監視する必要があり、リモートホストが接続をオフにした場合でも、 [〜#〜] established [〜#〜]としてのnetstatを介した接続。
このLinux組み込みシステムには2つの異なるバージョンがあります。1つは古い2.6.34カーネルを使用しており、正常に動作しますが、失敗したバージョンはカーネル3.18.18を使用します。
詳細情報を探して TCPタイムアウト を設定/変更する必要があると思われるので、syctl.confを使用して設定しましたが、何も変更しません。 2.6.34カーネルを使用するシステムでは、TCPタイムアウトが構成されていないため、TCPは私の問題の根本原因ではないと思います。
接続が[〜#〜]確立済み[〜#〜]のままであるという事実の理由について考えがありますか?
ホストが他のホストから切断されても、その接続がESTABLISHED
として表示される場合は、おそらく、それがTCP
プロトコルを順守しておらず、接続を完全に閉じていないことに関連しています。
netstat
出力は、TCP
接続の現在の状態のインタープリターです。クライアントが以前に開いて確立したソケットを切断または閉じる場合は、リモートシステムに通知する必要があります。これは、FIN request
他のノード(詳細情報 ここ )、この場合はサーバー。
クライアントが接続に失敗すると、クライアントは実際に切断されますが、リモートサーバーは、クライアントがまだ接続されていると考えを維持し、そのため、状態をESTABLISHED
、そしてtcp_keepalive_time
パラメータは方程式を結合します。これ以上パケットが受信されなくなるため、カーネルはこのパラメーターまで指定された時間待機して、接続をタイムアウトにして強制的に閉じます。
この問題は、tcpdump
ツールを使用してデバッグできます。サーバー側のクライアントホストからの接続をリッスンし、FIN
リクエストの送信に失敗したかどうかを確認できます。
tcpdump Host X.X.X.X and port Y