8 votes

Délai d'attente TCP pour les connexions établies dans Windows

Je suis dans la situation suivante :

  • L'application (client Firebird DB) sur un ordinateur client ouvre une connexion TCP au serveur sur le port 3050.
  • Crash de l'application sur le client, application terminée
  • netstat sur le serveur montre toujours une connexion TCP ESTABLISHED sur le port 3050 vers l'adresse IP du client.
  • client éteint
  • netstat sur le serveur montre toujours une connexion TCP ESTABLISHED sur le port 3050 vers l'adresse IP du client.
  • a attendu plusieurs minutes
  • netstat sur le serveur montre toujours une connexion TCP ESTABLISHED sur le port 3050 vers l'adresse IP du client.

Existe-t-il un délai d'attente pour les connexions établies sous Windows (Win8.1 dans ce cas) ? Puis-je modifier ce délai ?

J'ai trouvé este mais cela ne semble pas répondre à ma question concernant les connexions établies.

9voto

Alois Heimer Points 221

Par défaut, une connexion TCP établie n'est pas interrompue ( mais peut le faire en raison de restrictions matérielles ).

Une application peut utiliser le mécanisme TCP keepalive pour vérifier les connexions interrompues. Dans Firebird (>1.5), les keepalives TCP sont activées. .

Le "timeout" de keepalive doit être défini sur le serveur. L'intervalle de temps par défaut du keepalive TCP dans Windows est de 2 heures (mais il est recommandé de 5 minutes) . Il peut être défini dans le HKLM\System\CurrentControlSet\Services\Tcpip\Parameters\KeepAliveTime clé de registre.

Plus de détails sur les liens ci-dessus :

une connexion client échouée sera fermée après l'intervalle de temps suivant : KEEPALIVE_TIME+ ( KEEPALIVE_PROBES+1)* KEEPALIVE_INTERVAL

Avec les valeurs de registre correspondantes suivantes dans Windows :

KEEPALIVE_TIME = KeepAliveTime (default: 7200 seconds)
KEEPALIVE_INTERVAL = KeepAliveInterval (default: 1 second)
KEEPALIVE_PROBES = TCPMaxDataRetransmissions (default: 5)

Mais :

Un segment keepalive est envoyé toutes les deux heures par défaut [...]. Même s'ils sont activés, d'autres protocoles de la couche supérieure, tels que NetBIOS, envoient leur propre valeur keepalive. Si l'intervalle keepalive que le protocole de couche supérieure utilise est inférieur à l'intervalle keepalive TCP, la valeur keepalive TCP n'est jamais envoyée. Par exemple, les sessions NetBIOS sur TCP/IP envoient une demande NetBIOS keepalive toutes les 60 minutes. Par conséquent, les valeurs TCP keepalive qui sont activées pour une session NetBIOS ne sont jamais utilisées.

4voto

joeqwerty Points 106914

La spécification TCP n'a pas de mécanisme de timeout ou de keepalive. Il existe des entrées de registre qui peuvent être définies pour configurer les keepalives TCP, mais c'est à l'application elle-même d'utiliser les keepalives. Voir la réponse à cette question :

Activation des keepalives TCP à l'échelle du système sur un système Windows

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X