Resumen

  • RFC 6298 calcula el tiempo de retransmisión a partir del RTT suavizado y su variación, y rechaza muestras ambiguas que podrían atribuir el ACK a la copia equivocada.
  • La primera espera puede empezar en un segundo; un SYN perdido devuelve tres segundos para los datos y cada expiración posterior duplica el plazo.

El silencio es una evidencia débil. Puede haberse perdido el segmento, el ACK o ninguno de los dos. Retransmitir demasiado pronto crea un duplicado y carga una ruta quizá congestionada. Esperar demasiado deja una pérdida real sin reparar. El RTO escoge entre esos errores sin fingir que conoce la causa.

La estimación contiene tiempo e incertidumbre

Antes de medir el RTT, el RFC recomienda un RTO de un segundo, aunque permite uno más conservador. Con la primera muestra R, fija SRTT = R, RTTVAR = R/2 y RTO = SRTT + max(G, 4*RTTVAR), donde G es la granularidad del reloj.

En muestras posteriores se actualiza primero RTTVAR usando el SRTT anterior; beta vale un cuarto, alfa un octavo y K cuatro. Después se actualiza SRTT. El orden mide cuánto sorprende la nueva muestra frente al cálculo previo. El RTO vuelve a ser el tiempo suavizado más el mayor valor entre G y cuatro veces la variación.

Si el resultado es menor que un segundo, debería elevarse a uno. Solo se permite un máximo si alcanza al menos 60 segundos. Una implementación puede ser más conservadora, pero no retransmitir con más agresividad que el algoritmo.

No todo ACK enseña al reloj

El algoritmo de Karn es obligatorio. Un ACK posterior a una retransmisión puede confirmar la primera copia o la segunda; no debe alimentar el RTT salvo que TCP Timestamps elimine la ambigüedad. Sin marcas de tiempo debería tomarse al menos una muestra por RTT. Con ellas pueden obtenerse muchas, pero las reglas del estimador siguen vigentes.

Este uso no es PAWS: aquí la marca identifica qué transmisión fue confirmada, no descarta secuencias antiguas tras una vuelta.

Un temporizador para el dato pendiente más antiguo

Cuando se envían datos nuevos y el temporizador no funciona, se inicia con el RTO actual. Un ACK que cubre todo lo pendiente lo detiene. Un ACK que avanza la confirmación mientras quedan datos lo reinicia con el mismo RTO.

Al expirar, TCP retransmite el segmento no confirmado más antiguo, duplica RTO y vuelve a iniciar el temporizador. El retroceso exponencial encarece actuar ante silencios repetidos. Una muestra limpia posterior puede reducir RTO; tras varios retrocesos, se pueden borrar SRTT y RTTVAR si ya no describen la ruta.

El segundo inicial tiene una excepción. Si un SYN expira con menos de tres segundos, RTO debe volver a tres segundos cuando se establece la conexión y comienzan los datos. La ruta ha refutado la hipótesis rápida.

El temporizador controla, no diagnostica

Un atacante puede retrasar un paquete medido para inflar RTO o intentar bajarlo con tráfico falsificado. El suavizado y el retroceso limitan la persistencia, pero no autentican el retraso. Una expiración es una acción bajo incertidumbre, no prueba de una pérdida concreta.

La única fuente es RFC 6298, publicado en la vía de estándares en junio de 2011. Define el algoritmo y su razón histórica, no los valores actuales de una implementación o red determinada.