Come posso ottimizzare il timeout di ritrasmissione TCP iniziale?


14

Il valore iniziale RTO TCP di 3s è troppo lungo per la maggior parte delle applicazioni basate su LAN. Come posso sintonizzarlo più in basso? C'è un sistema?

Risposte:


12

No, non puoi; è hardcoded nel kernel. Quindi cambia il kernel e ricompila.

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

Questo è ciò che dovresti ottenere in include / net / tcp.h.

Ma posso vedere che qualcuno ha fornito una patch , anche se non l'ho mai provato da solo


4

L'impostazione iniziale non dovrebbe influire molto sulle prestazioni generali, poiché l'RTO si autoregola alle condizioni della rete. Se si modifica RTO, è possibile impostarlo su 1 secondo (ma non inferiore).

C'è una discussione di questo in 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.

RFC 6298 è un aggiornamento proposto (pubblicato nel giugno 2011) che afferma che RTO può essere inizializzato su un valore inferiore (ma non inferiore a 1 secondo) e contiene un'appendice contenente dati che giustificano 1 secondo come un valore iniziale ragionevole.


1 secondo è DOVUTO, non DEVE; tra l'altro puoi vedere rto di un noto motore di ricerca front-end =)
SaveTheRbtz

Non sono d'accordo con questa affermazione "L'impostazione iniziale non dovrebbe influire molto sulle prestazioni complessive". Ciò può influire sul tasso di errore per l'applicazione sulla comunicazione iniziale. Quando l'applicazione di back-end imposta un timeout di lettura su 3 secondi o meno, i pacchetti scendono (evento normale con qualsiasi congestione) sulla rete durante la comunicazione TCP iniziale non consentirà una ritrasmissione corretta di un pacchetto scartato. il valore iniziale deve essere inferiore al timeout di lettura impostato dall'estremità ricevente e deve essere impostato in base al QOS della rete su cui si sta eseguendo.
Joe,

3 Seconds è un'eternità sulle reti locali e le cadute di pacchetti avvengono molto velocemente su una rete in cui il tempo di andata e ritorno è espresso in millisecondi.
Joe,

Sono d'accordo che le moderne CPU possono fare molto in 3 secondi. La mia comprensione è che questo ritardo iniziale viene applicato solo quando il driver viene inizializzato, che si verifica solo al primo avvio del sistema.
Jay Elston,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.