stringtranslate.com

Programador de red

Paquetes 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 en una red de comunicaciones 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 planificador de red está asociado con un sistema de colas, almacenando 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 planificador de red es responsable de decidir qué tráfico reenviar y qué se descarta .

Terminología y responsabilidades

Un planificador de red puede tener responsabilidad en la implementación de iniciativas específicas de control del tráfico de red . El control del tráfico de la red es un término general que abarca todas las medidas destinadas a reducir la congestión , la latencia y la pérdida de paquetes de la red. 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 evitar la congestión excesiva de la red. El planificador debe elegir qué paquetes descartar. La configuració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 planificador 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 de 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 una reordenación o eliminación específica de paquetes de red dentro de varios buffers de transmisión o recepción . [1] Las disciplinas de colas se usan comúnmente como intentos de compensar diversas condiciones de red, como reducir la latencia para ciertas clases de paquetes de red, y generalmente se usan como parte de medidas de QoS. [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 cola con o sin clase . Las disciplinas de cola sin clases no permiten agregarle más disciplinas de cola. [5]

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 .

Inflación de buffer

Bufferbloat es un fenómeno en redes de conmutación de paquetes en el que el exceso de almacenamiento en búfer de paquetes provoca una alta latencia y una variación del retraso de los paquetes . El bufferbloat puede solucionarse mediante un programador de red que descarte paquetes estratégicamente para evitar una acumulación de buffer innecesariamente alta. Los 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 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 utiliza una implementación FIFO llamada pfifo_fast , [15] aunque systemd desde su versión 217 cambia la disciplina de cola predeterminada a fq_codel. [dieciséis]

Las utilidades ifconfigy ippermiten a los administradores del sistema configurar los tamaños de búfer txqueueleny rxqueuelenpara 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 buffers, 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 aportada por la versión 4.1 del kernel de Linux en 2015 extiende los clasificadores programables BPF clásicos a eBPF. [17] Estos pueden compilarse usando el backend LLVM eBPF y cargarse en un kernel en ejecución usando la tcutilidad. [18]

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

Notas

  1. ^ El tamaño total de todos los buffers ha sido el punto de crítica del proyecto Bufferbloat , que proporcionó una solución parcial con CoDel que se probó principalmente en OpenWrt .

Referencias

  1. ^ "CÓMO de control de tráfico: disciplinas de colas sin clases (qdiscs)". tldp.org . Consultado el 24 de noviembre de 2013 .
  2. ^ "CÓMO de control de tráfico: componentes del control de tráfico de Linux". tldp.org . Consultado el 24 de noviembre de 2013 .
  3. ^ "CÓMO de control de tráfico: elementos tradicionales de control de tráfico". tldp.org . Consultado el 24 de noviembre de 2013 .
  4. ^ "Disciplinas de colas: 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 .
  5. ^ "Control de tráfico avanzado - ArchWiki". wiki.archlinux.org . Consultado el 11 de septiembre de 2023 .
  6. ^ "Déjenlos ejecutar CAKE". LWN.net .
  7. ^ "Qdisc de filtro de gran potencia". kernel.org .
  8. ^ "Módulo programador de red del kernel de Linux del emulador de red". kernel.org . Consultado el 7 de septiembre de 2013 .
  9. ^ "Controlador integral proporcional mejorado (PIE)". kernel.org .
  10. ^ "Módulo programador de red del kernel de DRR Linux". kernel.org . Consultado el 7 de septiembre de 2013 .
  11. ^ "Módulo programador de red del kernel de HTB Linux". kernel.org . Consultado el 7 de septiembre de 2013 .
  12. ^ "Módulo programador de red del kernel QFQ Linux". kernel.org . Consultado el 7 de septiembre de 2013 .
  13. ^ "El programador de red del kernel de Linux". kernel.org . 26 de diciembre de 2012 . Consultado el 7 de septiembre de 2013 .
  14. ^ "tc(8) - página del manual de Linux". man7.org . Consultado el 11 de septiembre de 2023 .
  15. ^ "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 .
  16. ^ "Administrador de servicios y sistemas systemd: archivo NEWS". freedesktop.org . 22/05/2015 . Consultado el 9 de junio de 2015 .
  17. ^ "Núcleo de 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 .