ホームページ  >  記事  >  Java  >  TCP キープアライブはどのようにして古いソケット接続を防止しますか?

TCP キープアライブはどのようにして古いソケット接続を防止しますか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-10-26 08:42:30868ブラウズ

How Does TCP Keep-Alive Prevent Stale Socket Connections?

TCP ソケット接続には「キープアライブ」がありますか?

はい。TCP ソケット接続には、 TCP キープアライブ。これは、ソケット接続が無期限に開いたままになるのを防ぎ、一方が他方に通知せずに接続を終了するシナリオに対処します。

TCP キープアライブ プロセス

TCP キープアライブは、次の方法で Linux 上で構成できます。プロパティ:

  • tcp_keepalive_time (デフォルト: 7200 秒)
  • tcp_keepalive_probes (デフォルト: 9)
  • tcp_keepalive_intvl (デフォルト: 75 秒)

このプロセスには、応答を受信するまで空の ACK パケットを定期的に送信することが含まれます。指定された数のプローブ後に応答が受信されない場合、接続は終了します。

実装上の注意

キープアライブ パケットはオプションであり、確実に送信されない可能性があります。ただし、実際には、ほとんどのオペレーティング システムとクラウド プロバイダーがこのメカニズムをサポートしています。

TCP タイムアウトの変更

ソケットごとの構成 (Java 11 以降):

Java 11 では、ネイティブ コードを使用してソケット レベルで TCP タイムアウトを構成する機能が導入されました。

システム全体の構成:

古いバージョンの Java および他のオペレーティング システムでは、システム レベルでタイムアウト構成を適用する必要がある場合があります。

Linux:

# Echo commands to modify the values in /proc
echo 180 > /proc/sys/net/ipv4/tcp_keepalive_time
echo 3 > /proc/sys/net/ipv4/tcp_keepalive_probes
echo 10 > /proc/sys/net/ipv4/tcp_keepalive_intvl

Mac OS X:

# Use sysctl to modify values
sysctl -w net.inet.tcp.keepidle=180000 net.inet.tcp.keepintvl=10000 net.inet.tcp.keepcnt=3

Windows:

レジストリ キー: HKEY_LOCAL_MACHINESystemCurrentControlSetServicesTCPIPParameters

以上がTCP キープアライブはどのようにして古いソケット接続を防止しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。