Un programador de red , también llamado programador de paquetes , disciplina de puesta en cola , qdisc o algoritmo de puesta en cola , es un árbitro en un nodo en la red de comunicación de conmutación de paquetes . Gestiona la secuencia de paquetes de red en las colas de transmisión y recepción del controlador de interfaz de red . Hay varios programadores de red disponibles para los diferentes sistemas operativos , que implementan muchos de los algoritmos de programación de red existentes .
La lógica del programador de red decide qué paquete de red enviar a continuación. El programador de la red está asociado con un sistema de cola, almacenando los paquetes de la red temporalmente hasta que se transmiten. Los sistemas pueden tener una o varias colas, en cuyo caso cada una puede contener los paquetes de un flujo , clasificación o prioridad.
En algunos casos, puede que no sea posible programar todas las transmisiones dentro de las limitaciones del sistema. En estos casos, el programador de la red es responsable de decidir qué tráfico reenviar y qué se descarta .
Terminología y responsabilidades
Un planificador de red puede tener la responsabilidad de implementar iniciativas de control de tráfico de red específicas . El control del tráfico de la red es un término general para todas las medidas destinadas a reducir la congestión, la latencia y la pérdida de paquetes. Específicamente, la gestión de cola activa (AQM) es la eliminación selectiva de paquetes de red en cola para lograr el objetivo más amplio de prevenir la congestión excesiva de la red. El planificador debe elegir qué paquetes descartar. El modelado del tráfico suaviza los requisitos de ancho de banda de los flujos de tráfico al retrasar los paquetes de transmisión cuando se ponen en cola en ráfagas. El planificador decide el tiempo de los paquetes transmitidos. La calidad de servicio (QoS) es la priorización del tráfico según la clase de servicio ( servicios diferenciados ) o la conexión reservada ( servicios integrados ).
Algoritmos
Con el paso del tiempo, se han desarrollado muchas disciplinas de colas de red. Cada uno de estos proporciona un reordenamiento específico o eliminación de paquetes de red dentro de varios búferes de transmisión o recepción . [1] [2] Las disciplinas de puesta en cola se usan comúnmente como intentos de compensar varias condiciones de red, como reducir la latencia para ciertas clases de paquetes de red, y generalmente se usan como parte de las medidas de QoS. [3] [4] [5]
Entre los ejemplos de algoritmos adecuados para gestionar el tráfico de la red se incluyen:
- AVQ ( cola virtual adaptable ) [6]
- Disciplina CBQ ( cola basada en clases )
- CHOKe (CHOose y Keep para flujos sensibles, CHOose y Kill para flujos que no responden) es una variante de RED
- CoDel (retardo controlado) y CoDel de cola justa / de flujo
- CAKE (Common Applications Kept Enhanced), implementado en el kernel de Linux [7]
- Colas justas basadas en créditos
- DRR ( deficit round robin ) y DWRR, implementación, por ejemplo, escrita por Patrick McHardy para el kernel de Linux [8] y publicada bajo la Licencia Pública General GNU .
- FaQ (FavourQueue) [9]
- FQ-PIE (controlador integral proporcional de cola de flujo mejorado)
- GCRA ( algoritmo genérico de velocidad de celda )
- HFF ( filtro de peso pesado ) [10]
- HFSC (curva jerárquica de servicio justo )
- HTB ( depósito de tokens jerárquico ) [11]
- QFQ ( cola rápida y justa ) [12]
- FQ ( cola justa ) y WFQ ( cola justa ponderada )
- FIFO ( primero en entrar , primero en salir )
- pkt_sched: fq: programador de paquetes de cola justa [13]
- Emulador de red NETEM [14]
- PIE ( controlador integral proporcional mejorado ) [15]
- ROJO ( detección temprana aleatoria )
- ARED ( detección temprana aleatoria avanzada )
- GRED ( detección temprana aleatoria generalizada )
- RRED ( detección temprana aleatoria robusta )
- WRED ( detección temprana aleatoria ponderada )
- RR ( round-robin ) y WRR ( round robin ponderado )
- SFB ( estocástico azul claro ) y RSFB (SFB resiliente)
- SFQ (cola de equidad estocástica) [16]
- TBF ( filtro de depósito de tokens ) [17]
- TEQL ( ecualizador de enlace trivial )
Varios de los anteriores se han implementado como módulos del kernel de Linux [18] y están disponibles gratuitamente .
Bufferbloat
Bufferbloat es un fenómeno en las redes de conmutación de paquetes en el que el almacenamiento en búfer excesivo de los paquetes provoca una alta latencia y una variación del retardo de los paquetes . El bloqueador de búfer puede ser abordado por un programador de red que descarta paquetes estratégicamente para evitar una acumulación innecesariamente alta de almacenamiento en búfer. Los ejemplos incluyen CoDel y detección temprana aleatoria .
Implementaciones
Kernel de Linux
El programador de paquetes del kernel de Linux es una parte integral de la pila de red del kernel de Linux y administra los búferes de anillo de transmisión y recepción de todas las NIC, trabajando en la capa 2 del modelo OSI y manejando tramas de Ethernet , por ejemplo.
El programador de paquetes se configura mediante la utilidad denominada tc
(abreviatura de "control de tráfico"). Como disciplina de cola predeterminada, el programador de paquetes usa una implementación FIFO llamada pfifo_fast , [19] aunque systemd desde su versión 217 cambia la disciplina de cola predeterminada a fq_codel . [20]
Las utilidades ifconfig
y ip
permiten a los administradores del sistema configurar los tamaños de búfer txqueuelen
y rxqueuelen
para cada dispositivo por separado en términos de número de tramas Ethernet, independientemente de su tamaño. La pila de red del kernel de Linux contiene varios otros búferes, que no son administrados por el programador de red. [a]
Los filtros Berkeley Packet Filter se pueden adjuntar a los clasificadores del programador de paquetes. La funcionalidad eBPF traída por la versión 4.1 del kernel de Linux en 2015 extiende los clasificadores programables BPF clásicos a eBPF. [21] Estos pueden compilarse usando el backend LLVM eBPF y cargarse en un kernel en ejecución usando la tc
utilidad. [22]
BSD y OpenBSD
ALTQ es la implementación de un programador de red para BSD . A partir de la versión 5.5 de OpenBSD, ALTQ fue reemplazado por el programador HFSC.
Ver también
- Congestión en la red
- Cola (tipo de datos abstracto)
- Teoría de las colas
- Multiplexación estadística por división de tiempo
- Conformación del tráfico
- Clasificación de tráfico
- Tipo de servicio
Notas
- ^ El tamaño total de todos los búferes ha sido el punto de crítica delproyecto Bufferbloat , que proporcionó una solución parcial con CoDel que se ha probado principalmente en OpenWrt .
Referencias
- ^ "CÓMO de control de tráfico: Disciplinas de cola sin clases (qdiscs)" . tldp.org . Consultado el 24 de noviembre de 2013 .
- ^ Saravanan Radhakrishnan (30 de septiembre de 1999). "Soporte de QoS en Linux: Disciplinas de cola" . qos.ittc.ku.edu . Consultado el 18 de marzo de 2014 .
- ^ "Traffic Control HOWTO: componentes de Linux Traffic Control" . tldp.org . Consultado el 24 de noviembre de 2013 .
- ^ "Traffic Control HOWTO: elementos tradicionales de control de tráfico" . tldp.org . Consultado el 24 de noviembre de 2013 .
- ^ "Disciplinas de cola: orden de transmisión y caída de paquetes" (PDF) . tau.ac.il . 25 de octubre de 2006 . Consultado el 18 de marzo de 2014 .
- ^ http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.108.4477&rep=rep1&type=pdf
- ^ "Que corran CAKE" . LWN.net .
- ^ "Módulo programador de red del kernel de Linux DRR" . kernel.org . Consultado el 7 de septiembre de 2013 .
- ^ "FavorQueue: una gestión de cola activa sin parámetros para mejorar el rendimiento del tráfico TCP" (PDF) .
- ^ "Qdisc filtro de peso pesado" . kernel.org .
- ^ "Módulo programador de red del kernel de Linux HTB" . kernel.org . Consultado el 7 de septiembre de 2013 .
- ^ "Módulo programador de red del kernel de Linux QFQ" . kernel.org . Consultado el 7 de septiembre de 2013 .
- ^ "Programador de paquetes Fair Queue comprometido con el kernel de Linux 3.12" .
- ^ "Módulo programador de red del kernel de Linux emulador de red" . kernel.org . Consultado el 7 de septiembre de 2013 .
- ^ "Controlador Integral Proporcional Mejorado (PIE)" . kernel.org .
- ^ "Módulo programador de red del kernel de SFQ Linux" . kernel.org . Consultado el 7 de septiembre de 2013 .
- ^ "Módulo programador de red TBF Linux kernel" . kernel.org . Consultado el 7 de septiembre de 2013 .
- ^ "El programador de red del kernel de Linux" . kernel.org . 2012-12-26 . Consultado el 7 de septiembre de 2013 .
- ^ "CÓMO de control de tráfico y enrutamiento avanzado de Linux, sección 9.2.1. Pfifo_fast" . lartc.org . 2012-05-19 . Consultado el 19 de septiembre de 2014 .
- ^ "Systemd System and Service Manager: archivo NEWS" . freedesktop.org . 2015-05-22 . Consultado el 9 de junio de 2015 .
- ^ "Linux kernel 4.1, Sección 11. Redes" . kernelnewbies.org . 2015-06-21.
- ^ "Guía de referencia de BPF y XDP" . Sitio web de documentación de Cilium .