Nous avons une application serveur qui fait face à des problèmes d'épuisement TCP à environ 4000 connexions. Cela se produira toutes les 3 ou 4 semaines (environ). Le fournisseur, qui a créé cette application serveur, nous dit, après avoir examiné la sortie de netstat -b, que certaines connexions restent ouvertes même si les clients sont tombés.
J'ai été chargé d'étudier pourquoi une application cliente particulière ne ferme pas correctement la connexion TCP. Je suis convaincu que si un ordinateur client est arrêté, il ne peut PAS éventuellement signaler depuis le serveur qu'une connexion TCP est toujours établie avec ce client. Malheureusement, je ne trouve aucune information pour valider ma vue. Je ne veux pas perdre plus de temps à enquêter sur un problème potentiel qui, je pense, ne peut même pas être un problème.
tldr;
Un serveur peut-il signaler une connexion établie à un ordinateur qui est éteint?
la source
Oui c'est possible. Comme David et Paul l'ont déclaré dans leurs réponses, il n'y a pas de mécanisme dans TCP (à part TCP keep-alives, qui sont facultatifs) pour détecter une connexion semi-ouverte. Il appartient au fournisseur de l'application de déterminer l'état de la connexion et de prendre les mesures appropriées en conséquence.
En ce qui concerne TCP, il n'y a pas de détection ou de distinction entre une connexion semi-ouverte et une longue connexion inactive.
Vous devrez commencer à résoudre ce problème de la couche 1 (physique) du modèle OSI jusqu'à la couche 7 (application) pour déterminer où le problème se produit. Mon conseil serait d'installer et d'exécuter un programme de capture de paquets sur l'un des clients concernés jusqu'à ce que le problème se produise, puis d'analyser la capture pour essayer de déterminer ce qui fait que le client ne ferme pas la connexion.
la source
Lorsqu'un poste de travail souhaite fermer une connexion avec un serveur, il envoie un TCP FIN. Si le client ne se comporte pas correctement et ne ferme pas ses connexions, il pourrait en effet rester établi sur le serveur. Vous pouvez définir des délais d'expiration pour les connexions ouvertes sur le serveur pour les nettoyer - bien qu'il serait préférable de trouver la cause. Dans quel port les connexions ouvertes entrent-elles? Une fois que vous savez à quel service vous accédez, vous pourrez peut-être identifier l'application client qui frappe le serveur.
la source