Please enable JavaScript.
Coggle requires JavaScript to display documents.
Control de la congestión - Coggle Diagram
Control de la congestión
Conceptos
Congestión
Degradación del rendimiento de la red debido a la sobrecarga de paquetes
Sus causas pueden ser
Encaminadores lentos
Colas de entrada llenas
Capacidad de las líneas de entrada superior a las de salida
Colas de salida llenas
Problemas
Aumento de los retardos
Pérdida de paquetes
Desperdicio del uso de los recursos
Control de congestión
Controlar el número de paquetes en la red
Para evitar un decaimiento drástico del rendimiento
Clasificación de los métodos de control de congestión
Ciclo abierto
Métodos preventivos
Intentan resolver el problema antes de que ocurra
Requieren
Buen diseño de la red
Decidir cuando aceptar tráfico nuevo y cuando descartar paquetes y cuáles
Regular el tráfico para que sea predecible
Ciclo cerrado
Métodos reactivos
Toman decisiones cuando aparece la congestión
Clasificación
Señalización explícita
Los nodos que detectan la congestión envían paquetes al origen
Señalización implícita
El origen deduce la existencia de congestión
Fases
Monitorización del sistema para detectar la congestión
Se usa una métrica de monitorización
Porcentaje de paquetes descartados por falta de memoria
Longitud promedio de las colas
Transferir la información de congestión
El nodo que detecta la congestión envía un paquete notificando el problema al origen del tráfico
Utilizar un campo/bit del paquete para que los encaminadores avisen a sus vecinos
Que el host/encaminadores envíen periódicamente paquetes de sondeo preguntando por el estado de la congestión
Es importante controla el tiempo de reacción
Demasiado pronto y el sistema oscilará y no convergerá
Demasiado tarde y el aviso ya no será útil
Acciones
Aumentar los recursos
Líneas adicionales
Balancear el tráfico
Usar los encaminadores de respaldo para encaminar tráfico
Disminuir la carga
Reducir la inyección de paquetes en la red
Negar servicio a algunos usuarios
Descartar paquetes
Control de congestión en circuitos virtuales
Control de admisión
No establecer circuitos virtuales hasta que se solucione la congestión
Los intentos de crear conexiones en la capa de transporte fallan
Establecer nuevos circuitos virtuales encaminando los paquetes por rutas no congestionadas
Reserva de recursos
Negociar un acuerdo de servicio entre el host y la subred
En base a este acuerdo se reservan recursos en los encaminadores del circuito virtual creado
Espacio en buffers
BW en las líneas
Debido a la reserva es poco probable que haya congestión
Especificar volumen y forma del tráfico, QoS requerida, etc
Problemas
Si no se envía el tráfico por el circuito virtual se desaprovechan los recursos reservados
Se puede descartar la creación de nuevos circuitos virtuales innecesariamente
Control de congestión en datagramas
Bit de advertencia
Los paquetes contienen un bit utilizado para marcar la existencia de congestión
El encaminador con riesgo de congestión lo activa antes de reenviar los paquetes
Cuando el paquete llega al destino este activa el bit de advertencia en los paquetes de respuesta al origen
Así el origen podrá disminuir la tasa de tráfico inyectada en la red
Cualquier encaminador puede activarlo
El tráfico no se incrementa hasta que la red deje de estar congestionada
Paquetes reguladores
El encaminador recibe un paquete cuando está en riesgo de congestión
Envía un paquete regulador al origen
Contiene la dirección de destino del paquete que desencadenó el aviso
Cuando el host recibe un paquete regulador asociado a un determinado destino disminuye la tasa de tráfico hacia este
Se establece
Un periodo de tiempo para ignorar paquetes reguladores de un mismo destino
Un tiempo de espera para incrementar nuevamente el tráfico
Paquetes reguladores salto a salto
Los paquetes reguladores obtienen una reacción muy lenta a distancias muy grandes o velocidades muy altas
Los salto a salto regulan el tráfico en los nodos intermedios hacia el origen
implica mayor carga en los buffers de los nodos intermedios
Proporciona un alivio rápido en el punto de congestión
Modelado del tráfico
Leacky Bucket
La fuente dispone de una cola finita (bucket)
Donde se deposita el tráfico generado
Deposita el tráfico en la red a una tasa constante
Si la cola se llena se descarta el paquete
Se establece una tasa máxima de llegada de tráfico
Si la tasa de suministro no supera la máxima de llegada se permite que el tráfico fluya a la salida
Si la tasa de suministro supera la máxima se regula
Problema
Impone un patrón de salida rígido
No es el más conveniente en aplicaciones que necesitan acelerar la salida ante ráfagas de corta duración
Token Bucket
Establece una tasa de transferencia máxima
Se puede superar durante cortos periodos de tiempo
Dispone de una cubeta (bucket) que almacena testigos (tokens)
Cada token da derecho a transmitir un paquetes
Casos
No llegan datos
Se almacenan los tokens hasta llenar el bucket (luego los descarta)
Llegan datos con tasa menor a la tasa de generación de tokens
Se transmite el tráfico
Se almacenan los tokens sobrantes
Llegan datos con tasa mayor a la tasa de generación de tokens y hay tokens en el bucket
Se transmiten datos que consumen los tokens
Llegan datos y no hay tokens
Se aceptan paquetes con una tasa igual a la de generación de tokens
El resto de los datos se descarta o se almacena en estado no conforme
Método de ciclo abierto que intenta resolver el problema del tráfico a ráfagas
Objetivos
Conseguir un modelo predecible del tráfico
Para regular la tasa media de tráfico
Evitar el tráfico a ráfagas
Control de congestión en TCP
Control de congestión implícito
TCP reduce la velocidad de transmisión en base a la congestión percibida
A través de
Vencimiento del RTO
Implica la pérdida segura
Indica probabilidad alta de haber congestión
Recepción de 3 ACKs duplicados
Antes del vencimiento del RTO
Indica pérdida probable del segmento
Probabilidad baja de congestión
No se espera al vencimiento del RTO y se realiza una retransmisión rápida
TCP limita la velocidad de transmisión con el uso de una ventana de congestión
Indica los bytes que se pueden transmitir durante el periodo de congestión
Varía según el evento que implícitamente señala la congestión
El tamaño de la ventana emisora tiene en cuenta los créditos otorgados por el receptor y el tamaño de la ventana de congestión
Tamaño disponible de la ventana
awnd = min {créditos, cwnd}
Tamaño de la ventana de congestión
cwnd
Para variar la velocidad de transmisión utiliza
Arranque lento
Cuando se establece la conexión
cwnd = 1 MSS (tamaño máximo segmento TCP)
La ventana crece al recibir asentimientos
1 MSS por cada ACK
Se dobla cada RTT
Si no hay congestión el tamaño de la ventana llegaría a su valor máximo
Cuando vence el RTO se reinicia el arranque lento
Establece un límite máximo al crecimiento de la ventana
umbral = cwnd/2
cwnd = 1 MSS
Permite descubrir rápidamente la densidad de tráfico soportada por la red
El crecimiento es exponencial
Cuando hay alta probabilidad de congestión reduce drásticamente la ventana a 1 MSS
Evitación de la congestión
El crecimiento de la ventana es más suave
El cwnd se incrementa 1 MSS por cada RTT (tiempo de ida y vuelta)
Es adecuada cuando se envía tráfico cerca de la capacidad soportada por la red
El crecimiento de la ventana es lineal
No se utiliza cuando vence el RTO porque tardaría en descubrir la capacidad de la red
Recuperación rápida
Se ejecuta al recibir 3 ACKs duplicados
Acciones
Umbral = cwnd/2
Retransmisión rápida del segmento perdido
cwnd = umbral + 3
Suma 3 por los segmentos perdidos que dieron lugar a los ACKs duplicados
No es 1 porque al recibir los duplicados indica que la red puede transportar tráfico
Por cada ACK duplicado cwnd = cwnd + 1
Si es posible, transmitir un segmento nuevo
Cuando se recibe el ACK del segmento retransmitido cwnd = umbral
Retroceso exponencial del RTO
Implementaciones habituales de TCP
Tahoe
Arranque lento
Evitación de la congestión
Retransmisión rápida
Retroceso exponencial del RTO
Reno
Arranque lento
Evitación de la congestión
Retransmisión rápida
Retroceso exponencial del RTO
Recuperación rápida
Evolución de la ventana de congestión
Ignorando arranque lento y suponiendo que las pérdidas se identifican con ACKs duplicados
Decrecimiento multiplicativo
Crecimiento lineal
Gestión del RTO
Complejo y afecta a la eficiencia y al control de la congestión de TCP
RTO demasiado alto
Demasiado retardo en la retransmisión
Se tarda en detectar que puede haber congestión
RTO demasiado bajo
Retransmisiones innecesarias
Se puede considerar que hay congestión cuando no la hay
Fórmula original
RTT estimado = a * RTT estimado + (1 - a) * RTT último
No funciona cuando ocurre una retransmisión
El emisor no sabe si el ACK corresponde a la primera o a la segunda transmisión
RTO = 2 * RTT estimado
Algoritmos adaptativos
Determinan de forma dinámica el valor del RTO en base a los RTT de los segmentos transmitidos
Algoritmo de Karn
No se usa el RTT del segmento retransmitido para calcular el RTO
Se incrementa el RTO cada vez que se retransmite un mismo segmento
Solo se recalcula el RTO si llega un ACK sin retransmisión
RTO = q * RTO
Normalmente q = 2
Algoritmo de Jacobson
Si los niveles de congestión son altos Karn no funciona
Emplea Karn además de tener en cuenta la estimación de la varianza
Fórmulas
RTT estimado = RTT estimado + lambda * (RTT último - RTT estimado)
RTT var = RTT var + rho * (|RTT último - RTT estimado| - RTT var)
RTO = RTT estimada + 4 * RTT var
Señalización explícita de la congestión ECN
Cabecera IP
En el campo tipo de servicio
Bit ECT
Indica que se puede transportar notificación explícita de la congestión
Bit EC
Activado por un encaminador al detectar congestión
Cabecera TCP
En el campo reservado
Bit CWR
Activado por el emisor para notificar al receptor que ya está reduciendo la ventana de congestión
Bit ECN-Echo
Activado por el receptor para avisar al emisor que hay congestión
Detección temprana de la congestión
Intenta predecir cuando va a ocurrir la congestión
Reducir la velocidad de transmisión antes de que haya congestión
Se puede realizar
A través de la colaboración entre hosts y encaminadores
RED + TCP
A través de las observaciones de los hosts
TCP Vegas
RED
El encaminador descarta paquetes cuando hay alta probabilidad de congestión
TCP reduce entonces la tasa de tráfico inyectada en la red
Establece umbrales y obtiene el tamaño medio de la cola
THmin y THmax
avg
Posibilidades
avg <= THmin
Añade el paquete a la cola
THmin < avg < THmax
Descarta el paquete con probabilidad Pa
avg >= THmax
Descarta el paquete
Cálculos
avg = (1 - wq) * avg + wq * q
wq = peso de la cola
q = tamaño de la cola
Pb = Pmax * (avg - THmin)/(Thmax - THmin)
Pmax = probabilidad máxima de Pb
Pa = Pb * (1 count * Pb)
count = número de paquetes añadidos a la cola cuando avg está entre los umbrales después de un descarte
TCP Vegas
El emisor busca pistas para ver si los encaminadores tienen problemas de congestión
Aumento RTT
Cálculos
Ratio esperado = cwnd/RRTmin
Ratio actual = cwnd/RTTactual
Diff = Ratio esperado - Ratio actual
Posibilidades
Diff < A
Incrementa cwnd linealmente
Diff > B
Decrementa cwnd linealmente
Otro caso
No se modifica el cwnd
A < B
Normalmente A = 1 segmento y B = 3 segmentos