Wie kann ich das anfängliche Timeout für die erneute TCP-Übertragung einstellen?

14

Der anfängliche TCP-RTO-Wert von 3s ist für die meisten LAN-basierten Anwendungen zu lang. Wie kann ich es tiefer einstellen? Gibt es ein Sysctl?

Claymation
quelle

Antworten:

12

Nein, das kannst du nicht. Es ist im Kernel fest codiert. Also den Kernel wechseln und neu kompilieren.

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

Dies ist, was Sie in Ihrer include / net / tcp.h erhalten sollten.

Aber ich kann sehen, dass jemand einen Patch zur Verfügung gestellt hat , obwohl ich es nie selbst ausprobiert habe

Marco Bizzarri
quelle
4

Die anfängliche Einstellung sollte sich nicht wesentlich auf Ihre Gesamtleistung auswirken, da sich RTO automatisch an die Netzwerkbedingungen anpasst. Wenn Sie die RTO ändern, können Sie sie auf 1 Sek. Einstellen (jedoch nicht auf einen niedrigeren Wert).

Dies wird in RFC 1122 erörtert :

        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 ist ein vorgeschlagenes Update (veröffentlicht im Juni 2011), das besagt, dass RTO auf einen niedrigeren Wert (aber nicht weniger als 1 Sekunde) initialisiert werden kann, und enthält einen Anhang mit Daten, die 1 Sekunde als angemessenen Anfangswert rechtfertigen.

Jay Elston
quelle
1 Sekunde sollte, nicht muss; Übrigens können Sie sich rto eines bekannten Suchmaschinen-Frontends
ansehen
Ich bin mit dieser Aussage nicht einverstanden. "Die anfängliche Einstellung sollte Ihre Gesamtleistung nicht wesentlich beeinflussen." Dies kann sich auf Ihre Fehlerrate für die Anwendung bei der Erstkommunikation auswirken. Wenn die Back-End-Anwendung ein Lesezeitlimit von 3 Sekunden oder weniger festlegt, ermöglichen Paketabbrüche (normales Ereignis mit Überlastung) im Netzwerk während der anfänglichen TCP-Kommunikation keine ordnungsgemäße erneute Übertragung eines verworfenen Pakets. Der Anfangswert muss niedriger sein als das vom empfangenden Ende festgelegte Lesezeitlimit und sollte auf der Grundlage der QOS des Netzwerks festgelegt werden, auf dem Sie ausgeführt werden.
Joe
3 Sekunden ist eine Ewigkeit in lokalen Netzwerken, und Paketverluste treten sehr schnell in einem Netzwerk auf, in dem die Umlaufzeit in Millisekunden angegeben ist.
Joe
Ich bin damit einverstanden, dass moderne CPUs eine Menge in 3 Sekunden erledigen können. Ich verstehe, dass diese anfängliche Verzögerung nur angewendet wird, wenn der Treiber initialisiert wird. Dies tritt nur auf, wenn ein System zum ersten Mal gestartet wird.
Jay Elston