Gestión de Colas y Control de Congestión en TCP
Control de Congestión en TCP: Congestion Avoidance
El objetivo principal del control de congestión es evitar que las interfaces o colas se congestionen. Está diseñado especialmente para TCP, ya que este protocolo reacciona ante la congestión reduciendo su tasa de envío. A continuación, un breve repaso sobre el mecanismo básico de Congestion Avoidance en TCP:
Slow Start
- TCP puede tener una cantidad de datos enviados sin confirmar limitada por la ventana de control de flujo (win).
- Inicialmente, TCP desconoce las condiciones de la red y comienza enviando de forma conservadora (¿1 paquete?).
- cwnd = 1 (ventana de congestión).
- La cantidad de datos enviados sin confirmar es el mínimo entre cwnd y la ventana de control de flujo.
- Si los datos llegan correctamente (se recibe ACK), TCP prueba a enviar más datos de golpe (aumentar la cantidad de datos «en vuelo»).
- Para ello, aumenta cwnd.
Slow Start (continuación)
- TCP incrementa cwnd en, como mucho, SMSS por cada ACK que confirma nuevos datos.
- Esto se mantiene hasta que se alcanza o supera ssthresh (slow start threshold) o se detecta una pérdida.
- ssthresh comienza siendo un valor grande.
Tiempo | Número de segmentos enviados (IW=1, no delayed-ack) | RTT | cwnd
—|—|—|—
RTT | 1 | | 1
RTT | 2 | | 2
RTT | 3 | | 3
RTT | 4 | | 4
RTT | 8 | | 8
Congestion Avoidance
- Inicialización: cwnd=1, ssthresh=65535
- Slow Start (…)
- Si se detecta una pérdida:
- ssthresh = mín( cwnd, win )/2 o ssthresh = máx (FlightSize/2, 2) (…)
- Por Timeout: cwnd=1, comienza Slow-start de nuevo (…)
- Nuevos datos son confirmados:
- Si cwnd < ssthresh: Congest. avoidance, cwnd+=1/cwnd (crecimiento lineal) (…)
- ssthresh=n/2
Detección de pérdida | tiempo | n | cwnd
—|—|—|—
TCP Tahoe | | |
Gestión Pasiva de Colas (Passive Queue Management)
Drop-Tail (la más habitual)
- Simple
- Descarta un paquete independientemente de su importancia
- Controla la congestión, pero no la evita
- (…)
Drop-Tail (continuación)
- TCP puede enviar ráfagas (limitadas por el tamaño de la ventana).
- Si una ráfaga llega a una cola casi llena, se perderán varios paquetes.
- Ante pérdidas, TCP reduce la ventana de congestión y, por lo tanto, la velocidad de envío.
- Varias conexiones pueden entrar simultáneamente en este proceso de control de congestión, reduciendo en gran medida el throughput global.
- Introduce sincronización global con varias conexiones TCP en el enlace.
- (…)
Drop-Tail (la más habitual)
- Unos pocos flujos pueden monopolizar el recurso.
- La cola se mantiene llena por largos periodos, impidiendo la absorción de ráfagas.
- Colas llenas no llevan a mayor throughput, sino a menor throughput.
- Colas poco ocupadas llevan a mayor throughput y menor retardo.
Head-drop
- Tira los paquetes que más tiempo llevan en el buffer.
- Probablemente ya han sido retransmitidos (TCP).
- Probablemente ya llegan tarde (UDP/RTP).
- Controla la congestión, pero no la evita.
- Evita que unos pocos flujos monopolicen el recurso.
- Posible sincronización.
Random-Drop (ante cola llena)
- Se puede reducir la sincronización global, pero no controlar UDP.
- Evita que unos pocos flujos monopolicen el recurso.
- Controla la congestión, pero no la evita.
AQM – Active Queue Management
- Pensado para TCP, no controla UDP igual de bien.
- Evita sincronizaciones, menores retardos y fluctuaciones.
- TCP regula su tasa al detectar pérdidas (Congestion avoidance).
Active Queue Management – Early-Random-Drop (cola no llena)
- Si la cola excede un nivel, se tira cada paquete que llega con una probabilidad fija (p).
Active Queue Management – Weighted Tail Drop
- Se asignan umbrales en la cola a diferentes clases de tráfico.
- Cuando se alcanza el umbral U1, se descartan los paquetes que lleguen de la clase 1.
- Cuando se alcanza el umbral U2, se descartan también los paquetes que lleguen de la clase 2.
- De la tercera clase se descartarán solo cuando se llene la cola.
U2 U1
Active Queue Management – RED (Random Early Detection)
- «Recommendations on Queue Management and Congestion Avoidance in the Internet»
- Descartar paquetes probabilísticamente antes de la congestión.
- Evalúa la ocupación media del buffer.
- Cálculo mediante exponential moving average.
- Para un parámetro w bajo, la media sigue los cambios rápidos del valor instantáneo.
Active Queue Management – RED (Random Early Detection) (continuación)
- Difícil medir sus beneficios.
- Con mala configuración, podría comportarse peor que Drop-Tail.
- Se han propuesto bastantes más algoritmos de AQM.
- RED es el más extendido en implementaciones.
WRED (Weighted RED)
- Emplea un Minth y Maxth diferente para diferentes clases de tráfico.
- Mayor cuanto mayor es el valor.