Maison  >  Article  >  Java  >  ## Comment TCP Keep-Alive maintient-il les connexions socket de longue durée ?

## Comment TCP Keep-Alive maintient-il les connexions socket de longue durée ?

Barbara Streisand
Barbara Streisandoriginal
2024-10-26 09:05:02861parcourir

## How Does TCP Keep-Alive Maintain Long-Lived Socket Connections?

TCP Keep-Alive : maintien des connexions de socket à longue durée de vie

Introduction

Socket TCP Les connexions fournissent un canal de communication fiable entre deux points finaux. Contrairement aux connexions HTTP, qui disposent d'un mécanisme de maintien explicite, les sockets TCP n'offrent pas intrinsèquement une telle fonctionnalité. Pour maintenir des connexions persistantes sur des périodes prolongées, TCP implémente un mécanisme appelé « Keep-Alive ».

Processus TCP Keep-Alive

TCP Keep-Alive répond au scénario où une extrémité d’une connexion ne répond plus. Le processus fonctionne comme suit :

  • Configuration du délai d'attente : Chaque système d'exploitation définit trois paramètres configurables :

    • Temps Keepalive : La période d'inactivité après laquelle un paquet ACK est envoyé.
    • Sondes Keepalive : Le nombre de sondes ACK envoyées avant de déclarer la connexion morte.
    • Intervalle Keepalive : L'intervalle entre les sondes ACK.
  • Aperçu du processus :

    1. Si la connexion reste inactif pendant Keepalive Time, un paquet ACK est envoyé.
    2. Si l'extrémité distante répond avec un ACK, le processus se réinitialise et continue.
    3. Si l'extrémité distante ne répond pas après que Keepalive Probes ACK sonde , la connexion se termine par un paquet RST.

Par défaut, ces valeurs sont :

  • Keepalive Time : 7 200 secondes (2 heures)
  • Sondes Keepalive : 9
  • Intervalle Keepalive : 75 secondes

Configuration et considérations

Configuration des délais d'attente TCP :

  • Par socket : Java ne prend actuellement pas en charge la configuration des délais d'attente TCP au niveau du socket.
  • À l'échelle du système : Les systèmes d'exploitation fournissent des mécanismes pour ajuster ces paramètres.

    • Linux : Modifier /proc/sys/net/ipv4/tcp_keepalive_time, / proc/sys/net/ipv4/tcp_keepalive_probes et /proc/sys/net/ipv4/tcp_keepalive_intvl.
    • Mac OS X : Utilisez sysctl pour définir net.inet.tcp.keepidle, net.inet.tcp.keepcnt et net.inet.tcp.keepintvl.
    • Windows : Ajustez les valeurs de registre sur HKEY_LOCAL_MACHINESystemCurrentControlSetServicesTCPIPParameters.

Gotchas :

  • Deux heures par défaut : La durée de conservation par défaut de 2 heures peut permettre aux connexions obsolètes de persister pendant une période significative.
  • Implémentation facultative : TCP Keep-Alive n'est pas universellement implémenté et certains systèmes peuvent choisir de supprimer les paquets ACK ne contenant aucune donnée.

Recommandations d'utilisation :

  • Pour les applications nécessitant des connexions hautement fiables et persistantes, il peut être avantageux de réduire la durée et les sondes Keepalive par défaut.
  • Lors de la configuration des délais d'attente, tenez compte des compromis entre la réactivité et la stabilité de la connexion.
  • Soyez conscient des règles potentielles de pare-feu ou d'équipement réseau qui peuvent bloquer les paquets ACK, en particulier lorsque vous utilisez des valeurs de délai d'attente non standard.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn