Un programador de red , también llamado programador de paquetes , disciplina de colas ( qdisc ) o algoritmo de colas , es un árbitro en un nodo de una 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 de la pila de protocolos y el 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 reenviar a continuación. El programador de red está asociado con un sistema de colas, que almacena los paquetes de 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 red es responsable de decidir qué tráfico reenviar y cuál descartar .
Un programador de red puede tener la responsabilidad de implementar iniciativas específicas de control de tráfico de red . El control de tráfico de red es un término general para todas las medidas destinadas a reducir la congestión de la red , la latencia y la pérdida de paquetes. Específicamente, la gestión activa de colas (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 programador debe elegir qué paquetes descartar. La modelación 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 programador decide el momento de los paquetes transmitidos. La calidad de servicio (QoS) es la priorización del tráfico en función de la clase de servicio ( servicios diferenciados ) o la conexión reservada ( servicios integrados ).
Con el paso del tiempo, se han desarrollado muchas disciplinas de colas de red. Cada una de ellas proporciona una reordenación o eliminación específica de paquetes de red dentro de varios búferes de transmisión o recepción . [1] Las disciplinas de colas se utilizan comúnmente como intentos de compensar diversas condiciones de red, como la reducción de la latencia para ciertas clases de paquetes de red, y generalmente se utilizan como parte de las medidas de calidad de servicio. [2] [3] [4]
Las disciplinas de colas con clases permiten la creación de clases, que funcionan como ramas de un árbol. Luego, se pueden establecer reglas para filtrar paquetes en cada clase. Cada clase puede tener asignada otra disciplina de colas con clases o sin clases . Las disciplinas de colas sin clases no permiten agregarle más disciplinas de colas. [5]
Algunos ejemplos de algoritmos adecuados para gestionar el tráfico de red incluyen:
Varios de los anteriores se han implementado como módulos del kernel de Linux [13] [14] y están disponibles gratuitamente .
El bufferbloat es un fenómeno en las redes de conmutación de paquetes en el que el almacenamiento en búfer excesivo de paquetes provoca una alta latencia y variación del retraso de los paquetes . El bufferbloat se puede solucionar mediante un programador de red que descarte estratégicamente los paquetes para evitar una acumulación innecesariamente alta de almacenamiento en búfer. Algunos ejemplos incluyen CoDel , FQ-CoDel y detección temprana aleatoria .
El programador de paquetes del kernel de Linux es una parte integral de la pila de red del kernel de Linux y administra los buffers de anillo de transmisión y recepción de todas las NIC, trabajando en la capa 2 del modelo OSI y manejando tramas Ethernet , por ejemplo.
El planificador de paquetes se configura mediante la utilidad denominada tc
(abreviatura de control de tráfico ). Como disciplina de cola predeterminada, el planificador de paquetes utiliza una implementación FIFO denominada pfifo_fast , [15] aunque systemd desde su versión 217 cambia la disciplina de cola predeterminada a fq_codel
. [16]
Las utilidades ifconfig
y ip
permiten a los administradores de sistemas configurar los tamaños de búfer txqueuelen
y rxqueuelen
de cada dispositivo por separado en términos de cantidad de tramas Ethernet, independientemente de su tamaño. La pila de red del núcleo Linux contiene varios otros búferes que no son administrados por el programador de red. [a]
Los filtros de Berkeley Packet Filter se pueden adjuntar a los clasificadores del programador de paquetes. La funcionalidad eBPF que trajo la versión 4.1 del kernel de Linux en 2015 extiende los clasificadores programables BPF clásicos a eBPF. [17] Estos se pueden compilar utilizando el backend eBPF de LLVM y cargarse en un kernel en ejecución utilizando la tc
utilidad. [18]
ALTQ es la implementación de un planificador de red para BSD . A partir de la versión 5.5 de OpenBSD, ALTQ fue reemplazado por el planificador HFSC.