stringtranslate.com

Programador de red

Paquetes que se ponen en cola en una estructura de datos FIFO (primero en entrar, primero en salir).

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 se 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 .

Terminología y responsabilidades

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 ).

Algoritmos

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 .

Inflamación del búfer

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 .

Implementaciones

Núcleo de Linux

El programador de paquetes del kernel de Linux es parte de la pila de red, junto con netfilter , nftables y Berkeley Packet Filter .

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 ifconfigy ippermiten a los administradores de sistemas configurar los tamaños de búfer txqueueleny rxqueuelende 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 tcutilidad. [18]

BSD y OpenBSD

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.

Véase también

Notas

  1. ^ El tamaño general de todos los buffers ha sido objeto de críticas por parte del proyecto Bufferbloat , que proporcionó una solución parcial con CoDel que se ha probado principalmente en OpenWrt .

Referencias

  1. ^ "Control de tráfico HOWTO: Disciplinas de colas sin clases (qdiscs)". tldp.org . Consultado el 24 de noviembre de 2013 .
  2. ^ "Control de tráfico HOWTO: Componentes del control de tráfico de Linux". tldp.org . Consultado el 24 de noviembre de 2013 .
  3. ^ "Control de tráfico: elementos tradicionales del control de tráfico". tldp.org . Consultado el 24 de noviembre de 2013 .
  4. ^ "Disciplinas de colas: orden de transmisión y descarte de paquetes" (PDF) . tau.ac.il . 25 de octubre de 2006 . Consultado el 18 de marzo de 2014 .
  5. ^ "Control avanzado del tráfico - ArchWiki". wiki.archlinux.org . Consultado el 11 de septiembre de 2023 .
  6. ^ "Que corran CAKE". LWN.net .
  7. ^ "Filtro de alto rendimiento qdisc". kernel.org .
  8. ^ "Módulo de programación de red del kernel de Linux para emulador de red". kernel.org . Consultado el 7 de septiembre de 2013 .
  9. ^ "Controlador Proporcional Integral Mejorado (PIE)". kernel.org .
  10. ^ "Módulo de programación de red del kernel de Linux DRR". kernel.org . Consultado el 7 de septiembre de 2013 .
  11. ^ "Módulo de programación de red del kernel HTB Linux". kernel.org . Consultado el 7 de septiembre de 2013 .
  12. ^ "Módulo de programación de red del kernel de Linux QFQ". kernel.org . Consultado el 7 de septiembre de 2013 .
  13. ^ "El programador de red del núcleo de Linux". kernel.org . 2012-12-26 . Consultado el 2013-09-07 .
  14. ^ "tc(8) - Página del manual de Linux". man7.org . Consultado el 11 de septiembre de 2023 .
  15. ^ "Cómo controlar el tráfico y el enrutamiento avanzados de Linux, sección 9.2.1. pfifo_fast". lartc.org . 2012-05-19 . Consultado el 2014-09-19 .
  16. ^ "Administrador de sistemas y servicios systemd: archivo NEWS". freedesktop.org . 2015-05-22 . Consultado el 2015-06-09 .
  17. ^ "Núcleo Linux 4.1, Sección 11. Redes". kernelnewbies.org . 2015-06-21.
  18. ^ "Guía de referencia de BPF y XDP". Sitio web de documentación de Cilium .