Ich möchte den TCP-RTO- Wert (Timeout für erneute Übertragung) für eine Verbindung ändern , und einige von mir vorgenommene Lektüren deuten darauf hin, dass ich dies tun könnte, zeigen jedoch nicht, wo und wie ich ihn ändern kann.
Ich habe mir die /proc/sys/net/ipv4
Variablen angesehen, aber keine der Variablen bezieht sich auf RTO. Ich würde mich freuen, wenn mir jemand sagen kann, wie ich diesen Wert ändern kann.
linux
linux-kernel
tcp
obiigbe91
quelle
quelle
ip route replace
stattdessen Erfolg - anscheinend hat sich dieip route
Syntax ein wenig geändert. Ich konnte die Änderung jedoch erfolgreich vornehmen. Nur um zu beachten, sollten Sie die Antwort kommentieren, nicht die Frage, wenn Sie michAntworten:
Der Grund, warum Sie die RTO nicht speziell ändern können, ist, dass es sich nicht um einen statischen Wert handelt. Stattdessen (natürlich mit Ausnahme des anfänglichen SYN) basiert es auf der RTT (Round Trip Time) für jede Verbindung. Tatsächlich basiert es auf einer geglätteten Version von RTT und der RTT-Varianz, wobei einige Konstanten in die Mischung geworfen werden. Daher ist es ein dynamischer, berechneter Wert für jede TCP-Verbindung, und ich empfehle diesen Artikel , in dem die Berechnung und die RTO im Allgemeinen ausführlicher behandelt werden.
Ebenfalls relevant ist RFC 6298, in dem (unter anderem) Folgendes angegeben ist :
Setzt der Kernel RTO dann immer auf 1 Sekunde? Unter Linux können Sie die aktuellen RTO-Werte für Ihre offenen Verbindungen anzeigen, indem Sie den folgenden
ss -i
Befehl ausführen:Das Obige ist die Ausgabe einer VM, bei der ich mit SSH angemeldet bin und über die einige Verbindungen zu google.com geöffnet sind. Wie Sie sehen können, ist die RTO tatsächlich auf 200 ish (Millisekunden) eingestellt. Sie werden feststellen, dass dies nicht auf den 1-Sekunden-Wert des RFC gerundet ist, und Sie können auch denken, dass es ein wenig hoch ist. Das liegt daran, dass bei RTO für Linux minimale (200 Millisekunden) und maximale (120 Sekunden) Grenzen im Spiel sind (eine ausführliche Erklärung dafür finden Sie in dem Artikel, den ich oben verlinkt habe).
Sie können den RTO-Wert also nicht direkt ändern, aber für verlustbehaftete Netzwerke (wie drahtlose Netzwerke) können Sie versuchen, F-RTO zu optimieren (dies ist je nach Distribution möglicherweise bereits aktiviert). Es gibt tatsächlich zwei verwandte Optionen im Zusammenhang mit F-RTO, die Sie optimieren können (gute Zusammenfassung hier ):
Je nachdem, wofür Sie optimieren möchten, können diese nützlich sein oder auch nicht.
BEARBEITEN: Nachverfolgung der Möglichkeit, die rto_min / max-Werte für TCP anhand der Kommentare zu optimieren.
Sie können die globale Mindest-RTO für TCP nicht ändern (abgesehen davon können Sie dies für SCTP tun - diese werden in sysctl angezeigt), aber die gute Nachricht ist, dass Sie den Mindestwert der RTO für eine Route anpassen können Basis. Hier ist meine Routing-Tabelle auf meiner CentOS-VM:
Ich kann den Wert für rto_min auf der Standardroute wie folgt ändern:
Und jetzt sieht meine Routing-Tabelle so aus:
Lassen Sie uns abschließend eine Verbindung herstellen und prüfen,
ss -i
ob dies eingehalten wurde:Erfolg! Die RTO auf der HTTP-Verbindung (nach der Änderung) beträgt 15 ms, während die SSH-Verbindung (vor der Änderung) wie zuvor 200+ beträgt.
Ich mag diesen Ansatz tatsächlich - er ermöglicht es Ihnen, den niedrigeren Wert auf geeigneten Routen festzulegen, anstatt global, wo er anderen Verkehr beeinträchtigen könnte. In ähnlicher Weise (siehe IP-Manpage ) können Sie die anfängliche rtt-Schätzung und die anfängliche rttvar für die Route anpassen (wird bei der Berechnung der dynamischen RTO verwendet). Es ist zwar keine vollständige Lösung für Optimierungen, aber ich denke, die meisten wichtigen Teile sind vorhanden. Sie können die maximale Einstellung nicht anpassen, aber ich denke, dass dies im Allgemeinen auf keinen Fall so nützlich sein wird.
quelle
rto_max
? Wie legen wir ein globales maximales Timeout fest?net.ipv4.tcp_retries1
und einesnet.ipv4.tcp_retries2
ähnlichen IIRC) ändern, können Sie meines Erachtens ein RTO-Maximum erreichen.