15.5 Control de la congestión

PIC

15.5.1 El tamaño de los time-outs

El algoritmo original

Estima el RTT promedio como

EstimatedRT T ← α × EstimatedRT T + (1 - α)× SampleRT T,

donde:

EstimatedRTT
es la estimación del RTT,
SampleRTT
es la medida del último RTT (medido como la diferencia en tiempo entre el instante en que se envía el segmento hasta que se recibe su confirmación) y
α
es un número entre 0 y 1 de tal forma que si α 0 entonces tiene mayor peso la última medida del RTT, y si α 1 entonces EstimatedRTT es menos dependiente de SampleRTT. La especificación original del TCP recomienda que 0.8 α 0.9.

Finalmente, la estimación (promedio) para el time-out es

TimeOut ←  2× EstimatedRT T.

El Algoritmo de Karn/Partridge

El algoritmo original no funciona correctamente cuando ocurre una retransmisión. En esta situación, el emisor no puede saber si el ACK recibido se corresponde con la primera o la segunda transmisión (problema de la ambigüedad del ACK). Si supone que es con la primera y no ocurre así, el SampleRTT medido sería demasiado largo. Si supone que es con la segunda y esto no es cierto, el cálculo es demasiado corto. Gráficamente:

PIC

Ambos errores son perjudiciales para el cálculo del TimeOut:

La solución:

Ignorar los RTT’s de los segmentos retransmitidos para computar el time-out.

Estimar el RTT sólo para los segmentos que no son retransmitidos acarrea un nuevo problema. Supongamos que debido a un aumento en la carga de la red o de la congestión, el RTT aumenta por encima del time-out, lo que provoca una retransmisión. Como el TCP va a ignorar el RTT de los segmentos retransmitidos, nunca va a actualizar la estimación para el RTT mientras las latencias sigan siendo altas y el ciclo continuará. Por este motivo, además:

Cada vez que se retransmite se dobla el time-out, hasta alcanzar 2×MSL [4].

El motivo de este aumento exponencial del time-out obedece a que normalmente un aumento en las latencias se debe a problemas de congestión y ante esta situación lo mejor es disminuir rápidamente la frecuencia de las retransmisiones.

El Algoritmo de Jacobson/Karels

Por desgracia, la mejora del algoritmo básico realizada por Karn y Partridge no funciona cuando los niveles de congestión son altos, ya que las latencias son muy variables. En esta situación es muy importante no colapsar aún más la red usando time-outs demasiado bajos.

La mejora propuesta por Jacobson y Karels consiste en tener en cuenta además la variación de los RTT’s, no sólo su media. Intuitivamente, si la varianza es baja, entonces EstimatedRTT es más fiable. Por otra parte, una varianza alta significa que EstimatedRTT no debe ser considerado con tanto peso a la hora de calcular TimeOut. De esta forma, el cálculo actual del time-out en el TCP es

        Dif f  ←   SampleRT T - EstimatedRT T,
EstimatedRT T   ←   EstimatedRT T + δ× Dif f,
     DevRT T   ←   DevRT T + ρ× (|Dif f|- DevRT T),
     TimeOut   ←   EstimatedRT T + 4× DevRT  T,

donde: