Como posso ajustar o tempo limite de retransmissão TCP inicial?

14

O valor inicial do TCP RTO de 3s é muito longo para a maioria dos aplicativos baseados em LAN. Como posso afinar mais? Existe um sysctl?

claymation
fonte

Respostas:

12

Não, você não pode; está codificado no kernel. Então mude o kernel e recompile.

#define TCP_TIMEOUT_INIT ((unsigned)(3*HZ))     /* RFC 1122 initial RTO value   */

É isso que você deve obter em seu include / net / tcp.h.

Mas posso ver que alguém forneceu um patch , mesmo que nunca tenha tentado

Marco Bizzarri
fonte
4

A configuração inicial não deve afetar muito o desempenho geral, pois o RTO se ajusta automaticamente às condições da rede. Se você alterar o RTO, poderá defini-lo como 1 segundo (mas não inferior).

Há uma discussão sobre isso na RFC 1122 :

        The following values SHOULD be used to initialize the
        estimation parameters for a new connection:
        (a)  RTT = 0 seconds.

        (b)  RTO = 3 seconds.  (The smoothed variance is to be
             initialized to the value that will result in this RTO).

        The recommended upper and lower bounds on the RTO are known
        to be inadequate on large internets.  The lower bound SHOULD
        be measured in fractions of a second (to accommodate high
        speed LANs) and the upper bound should be 2*MSL, i.e., 240
        seconds.

        DISCUSSION:
             Experience has shown that these initialization values
             are reasonable, and that in any case the Karn and
             Jacobson algorithms make TCP behavior reasonably
             insensitive to the initial parameter choices.

O RFC 6298 é uma atualização proposta (publicada em junho de 2011) que diz que o RTO pode ser inicializado com um valor mais baixo (mas não inferior a 1 segundo) e contém um apêndice contendo dados que justificam 1 segundo como um valor inicial razoável.

Jay Elston
fonte
1 segundo é DEVE, não DEVE; btw você pode olhar rto de um conhecido front-
end do
Não concordo com esta afirmação "A configuração inicial não deve afetar muito seu desempenho geral". Isso pode afetar a taxa de erros do aplicativo na comunicação inicial. Quando o aplicativo de back-end define um tempo limite de leitura para 3 segundos ou menos, a queda de pacotes (evento normal com qualquer congestionamento) na rede durante a comunicação TCP inicial não permitirá uma retransmissão adequada de um pacote descartado. o valor inicial deve ser menor que o tempo limite de leitura definido no final do recebimento e deve ser definido com base no QOS da rede em que você está executando.
21417 Joe
3 Seconds é uma eternidade nas redes locais e a queda de pacotes acontece muito rapidamente em uma rede em que o tempo de ida e volta é de milissegundos.
21417 Joe
Concordo que as CPUs modernas podem fazer muito em 3 segundos. Meu entendimento é que esse atraso inicial é aplicado apenas quando o driver é inicializado, o que ocorre apenas quando um sistema é inicializado pela primeira vez.
Jay Elston