Product SiteDocumentation Site

10.3. Calidad del servicio

10.3.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.3.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.3.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, eth0 o ppp0 y ambas tasas son 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. Por ejemplo:

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
En el caso de PPP, crear un script que ejecute wondershaper en /etc/ppp/ip-up.d/ activará el control de tráfico tan pronto como esté activa la conexión.

10.3.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 está basada en el campo ToS (tipo de servicio: «Type of Service») del mismo; modificar este campo es suficiente para tomar ventaja de sus capacidades de planificación. Existen cinco valores posibles:
  • Servicio normal: Normal-Service (0);
  • Minimizar costo: Minimize-Cost (2);
  • Maximizar confiabilidad: Maximize-Reliability (4);
  • Maximizar rendimiento: Maximize-Throughput (8);
  • Minimizar demora: Minimize-Delay (16).
Las aplicaciones que generan paquetes IP pueden definir el campo ToS, también puede ser modificado al vuelo por netfilter. Las siguientes reglas son suficiente para aumentar la respuesta del servicio de un servidor SSH:
iptables -t mangle -A PREROUTING -p tcp --sport ssh -j TOS --set-tos Minimize-Delay
iptables -t mangle -A PREROUTING -p tcp --dport ssh -j TOS --set-tos Minimize-Delay