TCP ソケット接続には「キープアライブ」がありますか?
はじめに
TCP 接続を確立するには、両方のソケットを設定する必要があります。側面。通常の状況では、これらのソケットは無期限に開いたままになります。ただし、一方の端がもう一方の端に通知せずに接続を閉じるという状況が発生する可能性があります。これに対処するために、TCP はキープアライブとして知られるメカニズムを採用しています。
TCP キープアライブ プロセス
TCP キープアライブは 3 つの構成可能なパラメーターに基づいて動作します。
-
tcp_keepalive_time: 接続ステータスを確認するために ACK パケットを送信するまでの時間 (デフォルトは 7200)。
-
tcp_keepalive_probes: ACK プローブの数接続を終了する前に送信する (デフォルト 9)。
-
tcp_keepalive_intvl: ACK プローブを送信する間隔 (秒単位) (デフォルト 75)。
プロセスは次のように動作します:
- tcp_keepalive_time のアイドル期間の後、送信者は ACK パケットを送信します。
- 受信者が ACK で応答すると、プロセスはリセットされて戻ります。
- 応答が受信されない場合、送信者は tcp_keepalive_intvl 秒待機し、ステップ 2 を繰り返します。
- tcp_keepalive_probes ACK が応答なしで送信された場合、接続は RST パケットで終了します。
注意事項
-
デフォルト 2 時間: デフォルトの tcp_keepalive_time が 2 時間であるため、古い接続が長時間持続する可能性があります。
-
キープアライブのオプション: キープアライブは、TCP 実装には必須ではありません。一部のデバイスではこれをサポートしていない可能性があり、問題が発生する可能性があります。
TCP タイムアウトの変更
必要に応じて、デバイスの TCP キープアライブ設定を変更できます。システム。具体的な方法は、オペレーティング システムによって異なります。
-
Linux: /proc に値を設定するか、sysctl を使用します。
-
Mac OS X : sysctl で値を設定するか、/etc/sysctl.conf を変更します。
-
Windows: レジストリの設定を調整します。
結論
TCP 接続には、古い接続を検出して終了するキープアライブ メカニズムがあります。デフォルトでは、キープアライブは有効になっており、非アクティブ状態が 2 時間 11 分間続いた後に接続を終了するように設定されていますが、これらの設定は特定の要件に合わせてカスタマイズできます。
以上がTCP キープアライブはどのようにして古い接続を防止しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。