La congestión ocurre cuando la velocidad de llegada de los paquetes es más rápida que la velocidad de envío de los paquetes. El enrutador tiene puertos de entrada y salida. Por lo tanto, la congestión puede ocurrir en cualquier puerto dependiendo de la velocidad de la estructura de conmutación.
Congestión en Puertos de Entrada
Suponga que el enrutador tiene N puertos de entrada y N puertos de salida. Si la velocidad de la estructura de conmutación es inferior a N veces la velocidad de los paquetes que llegan al puerto de entrada, se producirá una congestión. Suponga que 1 paquete llega a cada puerto de entrada en una unidad de tiempo. Están llegando N paquetes a los puertos de entrada en una unidad de tiempo. La velocidad de la estructura de conmutación es inferior a N paquetes por unidad de tiempo, por lo que no podrá reenviar estos N paquetes que llegan a los puertos de entrada a los puertos de salida. Digamos que Switch Fabric procesa N/2 paquetes y los N/2 paquetes restantes se ponen en cola en algunos de los puertos de entrada. Si estos paquetes continúan llegando a los puertos de entrada, pronto el búfer en los puertos de entrada se llenará y existirá un estado de congestión y los paquetes se descartarán.
Congestión en los Puertos de Salida
Suponga que la velocidad de la estructura de conmutación es de N paquetes por unidad de tiempo. En el peor de los casos, N paquetes llegan a los puertos de entrada y el tejido de conmutación los procesa y reenvía todos los N paquetes a los puertos de salida por unidad de tiempo. Entonces, la congestión no ocurrirá en los puertos de entrada. Hay que tener en cuenta que cada puerto de entrada no está directamente vinculado a un puerto de salida. Si varios paquetes están destinados a ir al mismo puerto de salida, se producirá una congestión en ese puerto de salida en particular. Supongamos que todos los N paquetes están destinados a ir al puerto de salida 1 y luego, en una unidad de tiempo, el puerto de salida transmitirá 1 paquete y pondrá en cola el resto de n-1 paquetes en el búfer. Nuevamente, se recibirán n paquetes en el mismo puerto de salida-1, luego volverá a poner en cola n-1 paquetes y transmitirá 1 paquete. Pronto,
Algoritmos de gestión de colas
La gestión de colas también se conoce como disciplinas de colas (qdiscs). Se puede clasificar en dos tipos.
- Gestión pasiva de colas (p. ej., FIFO)
- Gestión activa de colas (p. ej., detección temprana aleatoria)
Los algoritmos de gestión pasiva de colas son de naturaleza reactiva, es decir, funcionan «después» de que la cola esté llena. Son fáciles de implementar. Es difícil proporcionar control de colas con PQM. Los algoritmos de Active Queue Management son de naturaleza proactiva, es decir, funcionan «antes» de que la cola esté llena. Son de fácil a moderada dificultad en el despliegue. Proporcionan un buen control de colas.
Gestión pasiva de colas
1. Cola caída
Deja caer los paquetes de la ‘cola’ de la cola. Cuando la cola se llena y aún llegan paquetes, los paquetes entrantes se descartan porque no hay espacio en la cola. Dado que los paquetes se eliminan de la cola, se llama Drop Tail. Actúa como una cola FIFO simple. Los paquetes que han llegado primero se ponen en cola y los paquetes que llegan después se descartan.
2. Cabezal de caída
Deja caer los paquetes de la ‘cabeza’ de la cola. Cuando la cola se llena pero los paquetes siguen llegando, deja espacio para los paquetes recién llegados soltándolos desde el principio de la cola. Esto también se llama Drop Front. DropHead garantiza la equidad. Los flujos de larga duración como bit-torrent consumen la mayor parte del ancho de banda y otras aplicaciones se vuelven más lentas. Los paquetes de aplicación de larga duración seguirán llenando el búfer y DropTail eliminará los flujos de corta duración, pero DropHead les hará espacio descartando los paquetes de flujos de larga duración. Hace justicia con los flujos de corta duración.
3. Caída aleatoria
Como sugiere el nombre, deja caer los paquetes desde una ‘posición’ aleatoria en la cola. Se genera un número aleatorio y se descarta el paquete en ese índice. Esto le da una oportunidad justa a cada paquete de permanecer en la cola. Pregunta: ¿Cuál es la ventaja de usar Random Drop? Si dejamos caer los paquetes de la cabeza, estamos perjudicando los flujos de larga duración. Si soltamos los paquetes desde la cola, estamos dañando los flujos sensibles al tiempo. Entonces, para ser justos con ambos tipos de flujos, seleccionamos aleatoriamente un paquete y lo soltamos. Deje que el destino decida qué paquete se descartará y qué flujo se dañará.
Limitaciones de los algoritmos PQM
PQM sufre de muchas limitaciones. No controla la congestión. Ocurre caída de paquetes, no puede controlar las caídas de paquetes. Entra en acción cuando la situación es mala. Es de naturaleza proactiva, por lo que adolece de inconvenientes. A continuación se enumeran tres inconvenientes principales.
1. Sincronización global
Suponga que varios flujos de TCP comienzan en diferentes momentos, por ejemplo, tiempo = 0, tiempo = 5 y tiempo = 15 segundos. Todos estos flujos comienzan con un algoritmo de inicio lento para manejar la congestión. La ventana de congestión de todas las conexiones TCP aumenta con un inicio lento. DropTail hace que muchos paquetes de todos los flujos se descarten al mismo tiempo. DropTail trata todos los flujos por igual, no da prioridad a ningún flujo. Cuando DropTail elimina los paquetes de cada flujo, TCP fluye para reducir su ventana de congestión al mismo tiempo, esta es la primera vez que se sincronizan todos los flujos. Posteriormente, todos los flujos TCP aumentan su ventana de congestión al mismo tiempo (sincronizados). Cuando todos los flujos reducen su cwnd a la mitad al mismo tiempo, no están utilizando el ancho de banda por completo, por lo que se trata de una infrautilización del ancho de banda. De manera similar, cuando todos los flujos aumentan su cwnd, ocurre la sobreutilización. Períodos frecuentes de ‘sobreutilización’ y ‘subutilización’ de enlaces. Esto añade jitter (variación en el retardo).
2. Bloqueo
DropTail permite que unos pocos flujos monopolicen el espacio de la cola. Estos flujos suelen ser flujos de larga duración (también conocidos como flujos de «elefante»). Los flujos cortos (también conocidos como flujos de ratones) no obtienen suficiente espacio en la cola debido a la gran ocupación de los flujos de larga duración. Los paquetes de flujos cortos se descartan. Este fenómeno se llama ‘Bloqueo ‘. Tenga en cuenta que DropHead es la solución a este problema, pero no al 100%. DropHead elimina los paquetes del principio de la cola y permite que entre un paquete de flujos cortos a la vez. Pero, ¿cuánto espacio ocupa este DropHead? Muy menos en comparación con el tamaño de la cola. Aún así, la mayor parte del espacio está retenido por los flujos de larga duración. Dado que los flujos cortos no obtienen espacio en la cola, sus paquetes se descartarán constantemente y esto se denomina bloqueo.
3. Inflación
Los precios de las memorias han caído considerablemente. Este problema también existía antes, pero nunca se volvió serio debido al tamaño y precio de la memoria. En 2005, la capacidad máxima de RAM era de 256 MB, pero hoy en día es de 8 GB como mínimo. Por lo tanto, la capacidad amortiguadora ha aumentado. El almacenamiento en búfer excesivo conduce a «grandes retrasos en las colas». ¡Se informó que los retrasos en las colas a veces aumentan tanto que TCP RTO caduca! Las aplicaciones sensibles al tiempo son las más afectadas debido al bufferbloat.
Publicación traducida automáticamente
Artículo escrito por pintusaini y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA