8 votes

Qu'est-ce que signifie tcp_orphan_retries mis à 0?

Est-ce que le réglage de tcp_orphan_retries à 0 signifie qu'il n'y a pas de limite de tentatives, ou est-ce que cela signifie qu'il n'y aura aucune nouvelle tentative ?

9voto

rtxu Points 81

Le paramètre tcp_orphan_retries à 0 est un cas particulier, voir tcp_timer.c

 98 /* Calcul du nombre maximal de tentatives sur un socket orphelin. */
 99 static int tcp_orphan_retries(struct sock *sk, int alive)
 100 {
 101         int retries = sysctl_tcp_orphan_retries; /* Peut être zéro. */
 102 
 103         /* Nous savons grâce à un ICMP qu'il y a un problème. */
 104         if (sk->sk_err_soft && !alive)
 105                 retries = 0;
 106 
 107         /* Cependant, si le socket a récemment envoyé quelque chose, choisir un nombre sûr
 108          * de tentatives. 8 correspond à plus de 100 secondes avec un RTO minimal de 200 ms. */
 109         if (retries == 0 && alive)
 110                 retries = 8;
 111         return retries;
 112 }

4voto

Matthieu Riegler Points 20160

Cela ne signifie pas "essayer pour toujours", cela signifie "ne pas essayer du tout". C'est le serveur qui essaie poliment de dire au client qu'il se prépare à fermer son socket, et s'il pouvait bien faire une déconnexion ordonnée, ou envoyer plus de données, ce serait merveilleux. Il va essayer X fois d'obtenir une réponse du client, et après X fois, il récupère le socket du côté du système.

Fixer ce nombre à 0 me laisserait penser que ce serveur est très utilisé, avec une politique de tolérance zéro pour les orphelins. Cela pourrait aussi être une réponse à un DDOS : beaucoup de DDOS fonctionnent en ouvrant une connexion de socket et en la gardant, sans rien faire.

0voto

DictatorBob Points 1594

Je suis assez certain que cela signifie qu'il ne réessayera pas du tout. Ces commentaires provenant de la source du noyau (tcp_timer.c) le soutiennent :

/* Ne permettez pas aux sockets orphelins de consommer toutes nos ressources.
 * C'est une violation directe des spécifications TCP, mais c'est nécessaire
 * pour prévenir les attaques par déni de service. Cela est appelé lorsqu'un délai de retransmission
 * ou un délai à zéro sondes survient sur un socket orphelin.
 *
 * Les critères ne sont toujours pas confirmés expérimentalement et peuvent changer.
 * Nous tuons le socket, si :
 * 1. Si le nombre de sockets orphelins dépasse une limite configurée administrativement
 * 2. Si nous subissons une forte pression mémoire.
 */

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