Как я могу настроить начальное время ожидания повторной передачи TCP?


14

Начальное значение TCP RTO, равное 3 с, слишком велико для большинства приложений на основе локальной сети. Как я могу настроить его ниже? Есть ли sysctl?

Ответы:


12

Нет, ты не можешь; это жестко закодировано в ядре. Так что поменяй ядро ​​и перекомпилируй.

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

Это то, что вы должны получить в вашем include / net / tcp.h.

Но я вижу, что кто-то предоставил патч , хотя сам никогда не пробовал


4

Первоначальная настройка не должна сильно влиять на вашу общую производительность, так как RTO самостоятельно подстраивается под условия сети. Если вы измените RTO, вы можете установить его на 1 секунду (но не ниже).

Об этом говорится в 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 - это предлагаемое обновление (опубликовано в июне 2011 г.), в котором говорится, что RTO может быть инициализировано с более низким значением (но не менее 1 с), и содержится Приложение, содержащее данные, которые оправдывают 1 с в качестве разумного начального значения.


1 секунда ДОЛЖНА, НЕ ДОЛЖНА; Кстати, вы можете взглянуть на rto одного из известных поисковых движков =)
SaveTheRbtz 14.10.11

Я не согласен с этим утверждением «Первоначальная настройка не должна сильно влиять на общую производительность». Это может повлиять на ваш уровень ошибок для приложения при первоначальном обмене данными. Когда внутреннее приложение устанавливает тайм-аут чтения на 3 секунды или меньше, отбрасывание пакетов (обычное событие с любой перегрузкой) в сети во время первоначального соединения TCP не позволит выполнить надлежащую повторную передачу отброшенного пакета. начальное значение должно быть меньше, чем время ожидания чтения, установленное принимающей стороной, и должно быть установлено на основе QOS сети, в которой вы работаете.
Джо

3 секунды - это вечность в локальных сетях, и отбрасывание пакетов происходит очень быстро в одной сети, где время приема-передачи составляет миллисекунды.
Джо

Я согласен, что современные процессоры могут многое сделать за 3 секунды. Насколько я понимаю, эта начальная задержка применяется только при инициализации драйвера, что происходит только при первой загрузке системы.
Джей Элстон,
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.