¿Cómo funciona la estimación del tiempo de ida y vuelta del TCP (RTT)? ¿Qué tan diferente es la implementación en todos los sistemas operativos?

TCP estima RTT usando un promedio móvil ponderado exponencial (https://en.m.wikipedia.org/wiki/… (lo siento, no puedo entender cómo formatear el hipervínculo en el móvil)) basado en el RTT observado durante la transmisión.

Básicamente, cuando TCP envía un paquete, inicia un temporizador, que se agota cuando alcanza el valor TimeoutInterval calculado. Para simplificar, solo se usa un temporizador, a pesar del hecho de que varios segmentos pueden estar en tránsito a la vez (esto se llama canalización).

Para cualquier paquete dado, hay un número de secuencia. Cuando el remitente TCP recibe un ACK para el paquete, detiene el temporizador; el tiempo transcurrido se guarda como SampleRTT y proporciona una instantánea de las condiciones de la red. Como este valor puede fluctuar con el tiempo, la EWMA se calcula utilizando la EstimatedRTT anterior y la SampleRTT recién adquirida mediante la ecuación:

EstimatedRTT = 0.875 * EstimatedRTT + 0.125 * SampleRTT

Para obtener una explicación de los valores utilizados, consulte RFC 6298. El uso de un EWMA significa que la importancia relativa de una muestra dada disminuye exponencialmente a medida que se agregan más. En inglés, las muestras más recientes se consideran más importantes porque representan una estimación más reciente.

Además del promedio, la variabilidad o desviación RTT se estima por

DevRTT = 0.75 * DevRTT + 0.25 * | SampleRTT – EstimatedRTT |

Dados estos promedios, debemos decidir un tiempo de espera para establecer. Obviamente, el tiempo de espera debe ser al menos EstimatedRTT, con un margen adicional de variación. Si DevRTT es pequeño, el RTT es bastante constante, por lo que el margen puede ser pequeño. Si la varianza es mayor, deberíamos permitir un margen de error mayor. Por lo tanto

TimeoutInterval = EstimatedRTT + 4 * DevRTT

RFC 6298 recomienda un intervalo de tiempo de espera inicial de un segundo. Cuando se produce un tiempo de espera, el valor de TimeoutInterval se duplica para evitar otro tiempo de espera para el mismo paquete. Esto también proporciona cierto control de congestión: cuantos más tiempos de espera se produzcan, más tiempo esperará TCP antes de la retransmisión. Una vez que pasa el paquete problemático, TimeoutInterval se restaura a su último valor calculado. EstimatedRTT no se calcula para los paquetes que se retransmiten, por lo que esta duplicación no afecta el valor.

No es un estimado. Es el tiempo entre el envío de un paquete y la recepción del acuse de recibo. Un número difícil

Actualmente, solo hay dos implementaciones de TCP de uso generalizado. La pila de FreeBSD (todos los BSD, Windows, macOS (sistema operativo)) y la pila de Linux. Pero RTT se calcula igual sin importar cuál se use.