0 votes

Déconnexion TCP si aucune donnée

J'ai consulté le Wiki du protocole TCP, mais je n'ai pas trouvé si la connexion de la douille se termine si aucune donnée n'est transférée pendant une longue période. Je veux dire il n'y aura pas de problèmes physiques, mais deux ordinateurs n'auront tout simplement pas de données à s'envoyer pendant un certain temps. Comment la connexion existera-t-elle toujours ? Y aura-t-il des transferts de données de bas niveau pour lui faire comprendre qu'elle n'est pas interrompue ?

Merci ! Désolé si la question est muette

3voto

Einstein Points 2935

Aucune donnée n'est envoyée sur le réseau pour maintenir les connexions TCP. Vous pouvez envoyer un keep-alive au niveau de la couche réseau en envoyant simplement un paquet de zéro octet à partir de l'un ou l'autre pair ou en activant les options de socket pour que le système d'exploitation les envoie périodiquement pour vous. À mon avis, les keep-alives de la couche application (votre protocole d'application les gère) offrent une meilleure conception/relabilité que les mécanismes de la couche transport.

Lors de la conception de protocoles d'application superposés à TCP pour une fiabilité maximale, il est généralement nécessaire d'incorporer une sorte de non-opération (NOOP), ping, heartbeat dans la conception du protocole.

Ceci est très important car, par exemple, si votre serveur écoute une requête d'un client et que ce dernier est désactivé après que la connexion ait été établie, la session TCP est essentiellement orpheline et votre serveur peut se retrouver à écouter pour toujours. L'interruption de la connexion ne peut pas être détectée si aucune donnée n'est jamais envoyée ou reçue !

Si le serveur envoyait au moins des noop/ping/heartbeats à intervalles réguliers, la requête sortante déclencherait le mécanisme de retransmission/temps mort de la couche TCP et le serveur serait alors capable de détecter la connexion morte. Si, au lieu de cela, votre application envoie un message "ping" ou "hi, how are you ?" de la couche application, vous pouvez aller plus loin et l'utiliser pour vous renseigner sur l'état de votre homologue plutôt que sur la simple connexion sous-jacente.

Par exemple, si un pair est coincé dans une boucle infinie ou si ses disques durs sont en feu, les keepalives TCP ne suffisent pas à comprendre et à résoudre le problème sous-jacent.

2voto

nos Points 102226

Une connexion TCP reste ouverte jusqu'à ce que les deux extrémités la ferment.

Cependant, il faut savoir que les pare-feu et surtout les passerelles NAT mettent souvent fin à leurs entrées de connexions TCP, ce qui signifie que si votre connexion passe par l'une d'entre elles, l'envoi de données peut échouer si la passerelle a supprimé le mappage de cette connexion TCP. La lecture d'une connexion TCP pour laquelle une passerelle a expiré ne sera pas détectée, à moins que vous n'ayez une sorte de battement de cœur dans votre protocole d'application ou que vous n'activiez tcp keepalive.

0voto

Noufal Ibrahim Points 32200

Les connexions sont souvent maintenues ouvertes en utilisant keepalives .

0voto

Non, pas du tout. Si vous avez besoin que l'un des deux côtés se déconnecte lorsqu'aucune donnée n'est transférée, vous devez l'implémenter vous-même, en utilisant une sorte de mécanisme de "maintien en vie".

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X