O que tcp_orphan_retries define como 0 significa?

6

A configuração de tcp_orphan_retries como 0 significa que não há limite para novas tentativas ou isso significa que ele não será tentado novamente?

    
por benjarrell 26.05.2011 / 22:15

3 respostas

4

Não significa "tente para sempre", significa "não tente nada". Este é o servidor tentando educadamente dizer ao cliente que o servidor está se preparando para fechar o seu soquete, e se por favor fizer uma desconexão ordenada, ou enviar mais alguns dados, isso seria maravilhoso. Ele tentará X vezes para fazer o cliente responder e, após o X, ele recuperará o soquete no lado do sistema.

Definir esse número como 0 sugeriria que esse servidor é muito utilizado, com uma política de tolerância zero para órfãos. Também pode ter sido uma resposta a um DDOS: muito trabalho do DDOS, abrindo uma conexão de socket e, em seguida, agarrando-se a ela, sem fazer nada.

    
por 26.05.2011 / 23:05
6

Configurar tcp_orphan_retries como 0 é um caso especial, veja 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 }
    
por 18.07.2012 / 17:46
0

Tenho certeza que isso significa que não será mais necessário. Estes comentários da fonte do kernel (tcp_timer.c) suportam 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.
 */
    
por 26.05.2011 / 23:08