En esta entrada publico un manual de explicación de la noción de Calidad de Servicio o QoS (Quality of Service) y de como funciona la aplicación del módulo QoS en Vyatta.

1 Mecanismos QoS


La calidad de servicio (en adelante QoS – Quality of Service) es una característica que permite a los administradores de red identificar diferentes flujos de tráfico para poder tratarlos de acuerdo a su individual requerimiento en vez de usar simplemente el mecanismo por defecto.
En Vyatta el mecanismo de QoS por defecto se basa en priorización de colas, a parte de este mecanismo por defecto Vyatta ofrece también una variedad de mecanismos QoS para identificar y tratar los múltiples flujos de tráfico que atraviesan una interfaz. En general se pueden categorizar en mecanismos que se pueden aplicar a tráfico saliente y mecanismos que se pueden aplicar a tráfico entrante.
El flujo de trabajo general para los mecanismos QoS no estándar (políticas de tráfico) es el siguiente:


i. Se crea una política de tráfico que identifica los flujos de tráfico y especifica como se va a tratar cada tipo de flujo.
ii. Se aplica la política a una interfaz.



2 Priorización de tráfico por defecto


Por defecto todo el tráfico enviado por Vyatta se coloca en una de las tres colas prioritarias en base al valor del campo ToS (Type of Service, Tipo de Servicio). Los paquetes que se encuentran en la cola más prioritaria se envía primero, seguidos de los que se encuentran en la cola de prioridad siguiente. Dentro de cada cola los paquetes se envían según la estructura FIFO (First In First Out), el primero que entra es el primero que sale y recibe los mayores esfuerzos de envío. Si el tráfico llega a una cola con más rapidez de lo que puede enviarse (por ejemplo, debido a limitaciones de ancho de banda) se va guardando en un buffer del sistema. Si la llegada de paquetes es mayor o más rápida que la capacidad de buffer del sistema se llega a un exceso de tráfico que se dropea (desecha).
Esta diferenciación del tráfico de datos se hace ya que no siempre es deseable proveer del mismo nivel de servicio a todo el tráfico. Algunos tipos de tráfico, por su naturaleza, deben ser tratados de forma diferente, por ejemplo, el tráfico de voz es muy sensible a retardos y si no se procesa correctamente puede ser ininterpretable. Por otro lado, el tráfico de datos no es sensible a retardos pero si a la corrupción de paquetes.



3 Políticas de tráfico


La siguiente tabla recoge las políticas de tráfico soportadas por Vyatta y su posible aplicación a tráfico saliente o entrante. En este caso usaremos los nombres en ingles para su mejor interpretación a la hora de hacer la configuración:


Política de tráfico Tráfico entrante Tráfico saliente
Drop-Tail - Si
Fair Queue - Si
Roud-Robin - Si
Traffic Shaper - Si
Rate Control - Si
Random Detect - Si
Network Emulator - Si
Traffic Limiter Si -



3.1 Drop-Tail


El mecanismo de la política de tráfico drop-tail (ignorar el final) es un algoritmo de planificación. Provee un método de cola FIFO puro, es decir, los paquetes de datos se transmiten estrictamente en el mismo orden en el que van llegando. Si la cola se llena entonces el final de la cola (los últimos paquetes que han llegado) se dropean (ignoran, desechan). Con este mecanismo hay una única cola y todo el tráfico es tratado de la misma forma, si ni siquiera priorizar como se hace en el mecanismo por defecto.



3.2 Fair Queue


El mecanismo de la política de tráfico fair-queue (cola imparcial) es un algoritmo de planificación. Provee colas basadas en el algoritmo estocástico de imparcialidad de colas (Stochastic Fairness Queuing algorithm), en este algoritmo los flujos de tráfico se identifican por protocolo IP y por dirección de origen y/o destino. Los flujos así identificados reciben acceso imparcial a los recursos de red ya que no se permite a ningún flujo usar la mayoría del ancho de banda.



3.3 Round Robin


El mecanismo de la política de tráfico round-robin (peticiones en anillo, equitativas) es un simple algoritmo de planificación. En las colas round-robin se identifican clases de tráfico y el ancho de banda se divide de manera equitativa entre las diferentes clases.



3.4 Traffic Shaper


El mecanismo de la política de tráfico traffic-shaper (moldeador de tráfico) provee colas basadas en el algoritmo Token Bucket Shaping (¿ficha cubo modelado? mejor no traducirlo…). Este algoritmo es muy similar a round-robin pero no es tan estricto ya que permite que los recursos no usados por una clase de tráfico sean tomados por otra que los necesita. El algoritmo de shaper al igual que round-robin limita el uso del ancho de banda por clases pero realoja y distribuye el ancho de banda sobrante.



3.5 Rate Control


El mecanismo de la política de tráfico rate-control (control de índice o tasa) es un algoritmo de planificación. Provee colas basadas en el algoritmo de Token Bucket Filter. Este algoritmo solamente pasa paquetes que llegan a una velocidad o tasa que no excede la tasa administrativamente fijada. Es posible, sin embargo, sobrepasar esta tasa para ráfagas cortas de tráfico.



3.6 Random Detect


El mecanismo de la política random-detect (detección aleatoria) es un mecanismo de evasión de congestión que incluye Random Early Detection (RED) y Weighted Random Early Detection (WRED).
La congestión ocurre cuando se permite llenar los buffers de salida hasta tal punto que los paquetes han de descartarse. La congestión puede causar una resincronización global de los host TCP ya que múltiples host reducen su tasa de transmisión para tratar de eliminar la congestión. Esto puede afectar de forma significativa al rendimiento de la red. Una vez desaparece la congestión la red incrementa las tasas de transmisión de nuevo hasta el punto que vuelve a aparecer la congestión. Este ciclo de congestión y limpiado no hace un buen uso del ancho de banda disponible.
RED reduce el riesgo de que se llegue a la congestión de red desechando paquetes de forma aleatoria cuando la salida de la interfaz comienza a mostrar síntomas de congestión. El dropeo de paquetes como señal a la fuente de envío de disminuir su tasa de transmisión, se convierte en una ayuda para evitar condiciones de congestión y reduce la posibilidad de llegar a una sincronización global, haciendo, en consecuencia, mejor uso del ancho de banda.
WRED llega a RED un paso más allá ya que provee una vía para asignar prioridad a diferentes streams (corrientes, flujos) de tráfico ya que pueden desecharse más paquetes de ciertos tipos de tráfico que de otros.



3.7 Network Emulator


El mecanismo de la política de tráfico network-emulator (emulador de red) provee una forma de emular tráfico WAN. Esto se usa típicamente para testeo de sistemas.



3.8 Traffic Limiter


El mecanismo de la política de tráfico traffic-limiter (limitador de tráfico) puede usarse para regular o vigilar tráfico entrante. El mecanismo asigna a cada flujo de tráfico un limitador de ancho de banda y todo el tráfico entrante que exceda el límite de flujo será desechado (el exceso).
La ventaja es que esta política no conlleva retardos de colas y es la única que puede aplicarse a tráfico entrante.
La desventaja es que es más probable desechar paquetes y causar retransmisiones.
Traffic-shaper o rate-control se usan normalmente para regular el tráfico de salida en el que los retardos introducidos por las colas pueden tolerarse. Estas políticas almacenan en buffer el exceso de tráfico impuesto por el límite de ancho de banda y no desecharán paquetes a menos que se llegue a saturar el buffer.



En breve ejemplos de configuración de QoS en Vyatta