Pregunta ¿Qué significa tcp_orphan_retries establecido en 0?


¿Establecer tcp_orphan_retries en 0 significa que no hay límite para los reintentos, o significa que no se volverá a intentar?


6
2018-05-26 20:15


origen




Respuestas:


No significa "intentar siempre", significa "no intentarlo en absoluto". Este es el servidor que intenta educadamente decirle al cliente que el servidor se está preparando para cerrar su socket, y si por favor realiza una desconexión ordenada, o envía más datos, sería maravilloso. Intentará X veces para hacer que el cliente responda, y después de X, recupera el zócalo en el lado del sistema.

Establecer ese número en 0 me sugeriría que ese servidor está muy utilizado, con una política de tolerancia cero para los huérfanos. También puede haber sido una respuesta a un DDOS: gran parte del trabajo de DDOS al abrir una conexión de socket y luego aferrarse a ella, sin hacer nada.


4
2018-05-26 21:05



Tenía ese número configurado a 0 por defecto y el resultado fue que los huérfanos se quedaron para siempre. Tuvo que configurarlo en un número mayor para que desaparezcan. - jjrv
significa "no intente en absoluto". : incorrecto ver la respuesta con la función del kernel tcp_orphan_retries () - Massimo
¡Esta respuesta es incorrecta! Establecer tcp_orphan_retries en 0 significa 8. Ver la respuesta de xrtgavin a continuación. - Elad Nava


Establecer tcp_orphan_retries en 0 es un caso especial, consulte tcp_timer.c

 98 /* Calculate maximal number or retries on an orphaned socket. */
 99 static int tcp_orphan_retries(struct sock *sk, int alive)
 100 {
 101         int retries = sysctl_tcp_orphan_retries; /* May be zero. */
 102 
 103         /* We know from an ICMP that something is wrong. */
 104         if (sk->sk_err_soft && !alive)
 105                 retries = 0;
 106 
 107         /* However, if socket sent something recently, select some safe
 108          * number of retries. 8 corresponds to >100 seconds with minimal
 109          * RTO of 200msec. */
 110         if (retries == 0 && alive)
 111                 retries = 8;
 112         return retries;
 113 }

6
2017-07-18 15:46



Lo que apoya lo que dice la página de manual. "tcp_orphan_retries (entero; predeterminado: 8; desde Linux 2.4)" - Matt


Bastante seguro de que significa que no volverá a intentarlo. Estos comentarios de la fuente del núcleo (tcp_timer.c) admiten que:

/* Do not allow orphaned sockets to eat all our resources.
 * This is direct violation of TCP specs, but it is required
 * to prevent DoS attacks. It is called when a retransmission timeout
 * or zero probe timeout occurs on orphaned socket.
 *
 * Criteria is still not confirmed experimentally and may change.
 * We kill the socket, if:
 * 1. If number of orphaned sockets exceeds an administratively configured
 *    limit.
 * 2. If we have strong memory pressure.
 */

0
2018-05-26 21:08



Este comentario es para tcp_out_of_resources(), y "un límite configurado administrativamente" está más cerca en definición a tcp_max_orphans. - Andrew B