¿Cómo puedo ajustar el tiempo de espera de retransmisión TCP inicial?

14

El valor inicial de TCP RTO de 3s es demasiado largo para la mayoría de las aplicaciones basadas en LAN. ¿Cómo puedo ajustarlo más bajo? ¿Hay un sysctl?

plastilina
fuente

Respuestas:

12

No, no puedes; Está codificado en el núcleo. Entonces cambie el núcleo y recompile.

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

Esto es lo que debe obtener en su include / net / tcp.h.

Pero puedo ver que alguien me proporcionó un parche , aunque nunca lo probé yo mismo

Marco Bizzarri
fuente
4

La configuración inicial no debería afectar mucho su rendimiento general, ya que RTO se autoajusta a las condiciones de la red. Si cambia RTO, puede configurarlo en 1 segundo (pero no más bajo).

Hay una discusión de esto en 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 es una actualización propuesta (publicada en junio de 2011) que dice que RTO se puede inicializar a un valor inferior (pero no inferior a 1 segundo) y contiene un Apéndice que contiene datos que justifican 1 segundo como un valor inicial razonable.

Jay Elston
fuente
1 segundo DEBE, NO DEBE; por cierto, puede mirar rto de un conocido motor de búsqueda front-ends =)
SaveTheRbtz
No estoy de acuerdo con esta afirmación "La configuración inicial no debería afectar mucho su rendimiento general". Esto puede afectar su tasa de error para la aplicación en la comunicación inicial. Cuando la aplicación de fondo establece un tiempo de espera de lectura de 3 segundos o menos, la caída de paquetes (evento normal con cualquier congestión) en la red durante la comunicación TCP inicial no permitirá una retransmisión adecuada de un paquete descartado. el valor inicial debe ser inferior al tiempo de espera de lectura establecido por el extremo receptor y debe establecerse en función de la calidad de servicio de la red en la que se está ejecutando.
Joe
3 segundos es una eternidad en las redes locales y las caídas de paquetes ocurren muy rápido en una red donde el tiempo de ida y vuelta es en milisegundos.
Joe
Estoy de acuerdo en que las CPU modernas pueden hacer mucho en 3 segundos. Tengo entendido que este retraso inicial solo se aplica cuando el controlador se inicializa, lo que solo ocurre cuando un sistema se inicia por primera vez.
Jay Elston