Question

Pourquoi les connexions TCP vers une interface de bouclage se retrouvent-elles dans TIME_WAIT (socket fermé avec SO_DONTLINGER ), alors que des connexions identiques vers un hôte différent ne se terminent pas dans TIME_WAIT (ils sont réinitialisés / détruits immédiatement)?

Voici des scénarios à illustrer:

(A) Deux applications, un client et un serveur, s'exécutent toutes les deux sur le même ordinateur Windows. Le client se connecte au serveur via l'interface de bouclage du serveur (127.0.0.1, port xxxx), envoie des données, reçoit des données et ferme le socket ( SO_DONTLINGER est défini).

Supposons que les connexions sont très éphémères, de sorte que l'application client établit et détruit un grand nombre de connexions chaque seconde. Le résultat final est que les sockets se retrouvent dans TIME_WAIT et que le client épuise finalement son nombre maximal de sockets (sous Windows, il s'agit de ~ 3900 par défaut, et nous supposons que cette valeur ne sera pas changé dans le registre).

(B) Mêmes deux applications que le scénario (A), mais le serveur est sur un hôte différent (le client est toujours en cours d'exécution sous Windows). Les connexions sont identiques dans tous les sens, sauf qu'elles ne sont pas destinées à 127.0.0.1, mais à une autre adresse IP. Ici, les connexions sur la machine client ne vont PAS dans TIME_WAIT , et l'application client peut continuer à établir des connexions indéfiniment.

Pourquoi cet écart?

Était-ce utile?

La solution

L'état TIME_WAIT ne se produit qu'à une extrémité de la connexion - la fin qui se ferme en premier. Pour l'interface de bouclage, les deux extrémités sont sur la même machine, vous verrez donc toujours TIME_WAIT.

Dans l’autre cas, essayez de regarder l’autre machine. Je pense que vous verrez les sockets TIME_WAIT ici.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top