Product SiteDocumentation Site

10.4. Calidad del servicio

10.4.1. Principio y mecanismo

Calidad del servicio (QoS: «Quality of Service») se refiere a un conjunto de técnicas que garantizan o mejoran la calidad del servicio provisto a las aplicaciones. De éstas, la técnica más popular consiste en clasificar el tráfico de red en categorías y diferenciar la gestión del tráfico según la categoría a la que pertenezca. El uso principal de este concepto de servicios diferenciados es la manipulación de tráfico («traffic shaping»), que limita las tasas de transmisión de datos para conexiones relacionadas con algunos servicios y/o equipos para no saturar el ancho de banda disponible y privar a otros servicios importantes. Esta técnica es particularmente buena para tráfico TCP ya que el protocolo se adapta automáticamente al ancho de banda disponible.
También es posible alterar las prioridades del tráfico, lo que permite priorizar paquetes relacionados con servicios interactivos (como ssh y telnet) o a servicios que sólo trabajan con bloques de datos pequeños.
Los núcleos Debian incluyen la funcionalidad necesaria para QoS así como también los módulos asociados. Estos módulos son muchos y cada uno de ellos provee un servicio diferente, los más notables como planificadores especiales para las colas de paquetes IP; el amplio rango de comportamientos de planificadores abarca todo el rango de requerimientos posibles.

10.4.2. Configuración e implementación

Se configuran los parámetros de QoS mediante el programa tc (provisto por el paquete iproute). Se recomienda utilizar herramientas de más alto nivel ya que su interfaz es bastante compleja.

10.4.2.1. Reducción de latencias: wondershaper

El propósito principal de wondershaper (en el paquete con nombre similar) es minimizar las latencias independientemente de la carga en la red. Consigue esto limitando el tráfico total a un valor que está justo por debajo del valor de saturación del enlace.
Una vez que una interfaz de red está configurada puede definir sus limitaciones de tráfico ejecutando wondershaper interfaz tasa_descarga tasa_subida. La interfaz puede ser, por ejemplo, enp1s0, eth0 o ppp0 siendo dichas tasas en kilobits por segundo. Ejecutar wondershaper remove interfaz desactiva el control de tráfico en la interfaz especificada.
Para una conexión Ethernet, lo mejor es ejecutar este script inmediatamente después de configurar la interfaz. Puede lograrlo agregando directivas up y down al archivo /etc/network/interfaces indicando las órdenes a ejecutar luego que se configure la interfaz y luego que sea desconfigurada, respectivamente. O en el caso de PPP, creando un script que llame a wondershaper en /etc/ppp/ip-up.d/ habilitará el control del tráfico tan pronto como se conecte. A continuación se muestra un ejemplo que utiliza este primer método:

Ejemplo 10.9. Cambios en el archivo /etc/network/interfaces

iface eth0 inet dhcp
    up /sbin/wondershaper eth0 500 100
    down /sbin/wondershaper remove eth0

10.4.2.2. Configuración estándar

A menos que exista una configuración de QoS específica, el núcleo Linux utiliza el planificador de colas pfifo_fast el cual provee algunas características interesantes en sí mismo. La prioridad de cada paquete IP procesado se basa en el campo DSCP (Punto de código de servicios diferenciados: Differentiated Services Code Point) del mismo; modificar este campo de 6 bits es suficiente para tomar ventaja de sus capacidades de planificación. Para más información, ver https://en.wikipedia.org/wiki/Differentiated_services#Class_Selector.
Las aplicaciones que generan paquetes IP pueden definir el campo DSCP, también puede ser modificado al vuelo por netfilter. Las siguientes reglas son suficiente para aumentar la respuesta del servicio de un servidor SSH, tenga en cuenta que el campo DSCP se debe asignar en hexadecimal:
nft add table ip mangle
nft add rule ip mangle PREROUTING tcp sport 22 counter ip dscp set 0x04
nft add rule ip mangle PREROUTING tcp dport 22 counter ip dscp set 0x04