Jak dostroić początkowy limit czasu retransmisji TCP?

14

Początkowa wartość TCP RTO wynosząca 3 s jest zbyt długa dla większości aplikacji opartych na sieci LAN. Jak mogę go obniżyć? Czy istnieje sysctl?

claymation
źródło

Odpowiedzi:

12

Nie, nie możesz; jest na stałe zakodowany w jądrze. Więc zmień jądro i skompiluj ponownie.

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

To powinieneś dostać w swoim include / net / tcp.h.

Ale widzę, że ktoś dostarczył łatkę , chociaż sam nigdy jej nie wypróbowałem

Marco Bizzarri
źródło
4

Ustawienie początkowe nie powinno mieć większego wpływu na ogólną wydajność, ponieważ RTO sam dostosowuje się do warunków w sieci. Jeśli zmienisz RTO, możesz ustawić go na 1 sekundę (ale nie mniej).

Dyskusja na ten temat znajduje się w 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 to proponowana aktualizacja (opublikowana w czerwcu 2011 r.), Która mówi, że RTO można zainicjować na niższą wartość (ale nie mniej niż 1 sekundę) i zawiera dodatek zawierający dane uzasadniające 1 sekundę jako uzasadnioną wartość początkową.

Jay Elston
źródło
1 sekunda POWINNA, a NIE MUSI; btw możesz spojrzeć na rto jednego ze znanych interfejsów wyszukiwarki =)
SaveTheRbtz
Nie zgadzam się z tym stwierdzeniem „Ustawienie początkowe nie powinno mieć znaczącego wpływu na ogólną wydajność”. Może to wpłynąć na poziom błędu aplikacji podczas początkowej komunikacji. Gdy aplikacja zaplecza ustawia limit czasu odczytu na 3 sekundy lub mniej, zrzuty pakietów (normalne zdarzenie z dowolnym przeciążeniem) w sieci podczas początkowej komunikacji TCP nie pozwalają na prawidłową retransmisję zrzuconego pakietu. wartość początkowa musi być niższa niż limit czasu odczytu ustawiony przez koniec odbierający i powinna być ustawiona na podstawie QOS sieci, w której pracujesz.
Joe
3 sekundy to wieczność w sieciach lokalnych, a zrzuty pakietów zdarzają się naprawdę szybko w jednej sieci, w której czas podróży w obie strony jest w milisekundach.
Joe
Zgadzam się, że nowoczesne procesory mogą wiele zrobić w 3 sekundy. Rozumiem, że to początkowe opóźnienie jest stosowane tylko przy inicjalizacji sterownika, co występuje tylko przy pierwszym uruchomieniu systemu.
Jay Elston,