Maison  >  Article  >  Java  >  Comment TCP Keep-Alive empêche-t-il les connexions de socket obsolètes ?

Comment TCP Keep-Alive empêche-t-il les connexions de socket obsolètes ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-10-26 08:42:30868parcourir

How Does TCP Keep-Alive Prevent Stale Socket Connections?

Une connexion socket TCP a-t-elle un « Keep Alive » ?

Oui, il existe un mécanisme de délai d'attente en place pour les connexions socket TCP appelé TCP Keep-Alive. Il empêche les connexions de socket de rester ouvertes indéfiniment, résolvant les scénarios dans lesquels un côté met fin à la connexion sans en avertir l'autre.

Processus TCP Keep-Alive

TCP Keep-Alive est configurable sous Linux via les éléments suivants propriétés :

  • tcp_keepalive_time (par défaut : 7200 secondes)
  • tcp_keepalive_probes (par défaut : 9)
  • tcp_keepalive_intvl (par défaut : 75 secondes)

Le processus consiste à envoyer des paquets ACK vides à intervalles réguliers jusqu'à ce qu'une réponse soit reçue. Si aucune réponse n'est reçue après un nombre spécifié de sondes, la connexion est interrompue.

Notes de mise en œuvre

Les paquets Keep-Alive sont facultatifs et peuvent ne pas être transmis de manière fiable. Cependant, dans la pratique, la plupart des systèmes d'exploitation et des fournisseurs de cloud prennent en charge ce mécanisme.

Modification des délais d'expiration TCP

Configuration par socket (Java 11 et supérieur) :

Java 11 a introduit la possibilité de configurer les délais d'expiration TCP au niveau de chaque socket à l'aide de code natif.

Configuration à l'échelle du système :

Pour les anciennes versions de Java et sur d'autres systèmes d'exploitation, vous devrez peut-être appliquer une configuration de délai d'attente au niveau du système.

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 :

Clé de registre : HKEY_LOCAL_MACHINESystemCurrentControlSetServicesTCPIPParameters

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