Назад | Перейти на главную страницу

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

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

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

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

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

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

Первоначальная настройка не должна сильно влиять на вашу общую производительность, поскольку 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 секунду как разумное начальное значение.