AyGR 2024 - TP QoS

Fecha de Entrega: 30/09/2024.

Objetivo: Conocer los mecanismos de control de tráfico bajo entornos Linux, cómo definir Traffic Shaping Policies y cómo simular las condiciones adversas de una red WAN mediante el módulo netem. Categorías ISO: FCAPS.

Bibliografía

  • EVANS, J., FILSFILS, C., 2007, Deploying IP and MPLS QoS for Multiservice Networks: Theory & Practice. Morgan Kaufmann.
    • Capítulo 1. “QOS Requirements and Service Level Agreements” (hasta pág. 24)
    • Capítulo 2. “Introduction to QOS Mechanics and Architectures” (hasta pág. 141)
  • MEDHI, D., RAMASAMY, K., 2007, Network Routing Algorithms Protocols and Architectures. Morgan Kaufmann.
    • Capítulo 14. “Router Architectures”
    • Capítulo 22. “Packet Queuing and Scheduling”
    • Capítulo 23. “Traffic Conditioning”

Experiencia en el laboratorio

Se realizarán pruebas con utilidades estándar de Linux para apreciar el efecto que causan algunas características no deseadas (pérdidas, delay, reordenamiento) que suelen observarse en redes WAN. El router intermedio entre estos equipos implementará el emulador netem en su interfaz de salida hacia el host receptor.

En primera instancia, se debe descargar el laboratorio ‘QoS’ para Kathara desde este Link y descomprimirlo.

La red del laboratorio es la siguiente:

Topología laboratorio Netkit

  1. Posicionarse en el directorio descomprimido

  2. Lanzar el laboratorio con el comando kathara lstart.

  3. Evaluar tasa de transferencia por defecto.

    En el server, ejecutar: iperf3 -s -p 80

    En el cliente, ejecutar: iperf3 -c server -p 80

    Con eso se tiene una idea de la tasa de transferencia que hay entre cliente y servidor por medio del router.

  4. Evaluar latencia (RTT) por defecto.

    En el server, ejecutar: ping 192.168.0.1

    En el cliente, ejecutar: ping server

    Con eso se tiene una idea de la latencia que hay entre cliente y servidor por medio del router.

  5. En el router, utilice la disciplina de encolado netem para agregar artificialmente latencia y/o pérdida de paquetes. Tras cada comando, vuelva a evaluar con ping las características de la red entre cliente y servidor y viceversa, y determine si se condicen con lo establecido mediante netem.

     # para agregar latencia en el enlace saliente (outbound)
     tc qdisc add dev eth0 root netem delay 300ms
    
     # para agregar jitter variable
     tc qdisc change dev eth0 root netem delay 300ms 100ms
    
     # para simular perdida de paquetes
     tc qdisc change dev eth0 root netem loss 5%

    Recordar que al aplicarlo sobre la interfaz eth0 del router, este tendrá efecto sobre el la interfaz que apunta la “LAN”, o sea, el cliente.

  6. Sobre la misma topología, utilizmos TBF (Token Bucket Filter), una disciplina de encolado filtro classless con tc para aplicar una política de control de tasa de transferencia de 1Mb/s:

     # Limitamos la interfaz eth1 del router a 1Mbps, balde de 100 KB
     tc qdisc add dev eth1 root tbf rate 1mbit burst 100kb latency 100ms

    ¿Por qué se aplica a eth1? (Tip: recordar cómo funciona iperf).

  7. Modifique la anterior política y cambie la limitación de la tasa de transferencia a 3mbit/s máxima. Luego asignele al flujo de datos del streaming de audio una tasa mínima de 180kb/s y una máxima de 200 kb/s; por otro lado asignele 1mbit/s mínimo y 2 mbit/s máximo para el flujo web HTTP; y finalmente 1 mbit máximo para los demás flujos de información. Se recomienda revisar para ello el apartado “Conceptos fundamentales”.

Consignas a resolver

  1. Calcule la tasa de transferencia mínima requerida en bps (o múltiplos) y en bytes/seg para las siguientes aplicaciones. Contemple la tasa de bits en crudo, sin compresión alguna y omita el overhead de capas inferiores. ⌂

    1. Aplicación de voz sobre IP punto a punto, donde se transfiere sonido en un solo canal (mono) con una frecuencia de muestreo de 8000 Hz (muestras por segundo) y cada valor es un entero de 8 bits.

    2. Estación meteorológica remota que recopila valores de temperatura, humedad, dirección y velocidad del viento, posición (gps) y remite dichos valores en una PDU a nivel de aplicación de 246 bytes sobre procolo TCP con una periodicidad de 5 segundos. Contemple aquí el overhead de capas inferiores.

    3. Aplicación de transmisión de sonido punto a punto con una frecuencia de muestreo de 44100 Hz, donde cada valor de la muestra es un entero entre 0 y 65.535 y se envían dos canales de sonido en simultáneo (izquierdo y derecho).

    4. Cámara IP de videovigilancia con una resolución SIF (352 x 288 pixeles) a 25 cuadros por segundo (fps) de video en escala de grises.

    5. Aplicación de broadcast (radio en línea), con una frecuencia de muestreo de 22050 Hz, resolución de 16 bits, sonido estéreo y hasta 10 receptores posibles en simultáneo.

    6. Aplicación de videollamada simultánea con resolución de video SIF en color de 24 bits (RGB) y sonido con calidad de CD.

    7. Servidor de almacenamiento de sonido en un estudio de grabación, almacenando audio a una frecuencia de muestreo de 96 Khz, resolución de 24 bits y 16 canales en simultáneo.

    8. Streaming de audio y video digital punto a punto en tiempo real, sin compresión, con resolución de videoResolución Full HD en color RGB (3 x 8 bits) a 60 frames por segundo y audio en 44.1 Khz, 5.1 canales.

    Corolario: los valores que surgen de estos cálculos corresponden a flujos en crudo. En las aplicaciones modernas se utilizan codecs de audio y video que optimizan la comunicación, reduciendo notablemente la tasa de transferencia necesaria para las mismas. Sobre esta temática se ampliará en la clase referida a Voz sobre IP.

  2. Considerando las siguientes aplicaciones: ⌂

    1. Videojuego con multijugador online. Ejemplo: Overwatch, Call of Duty.

    2. Aplicación de servicio de archivos en la nube: Ejemplo Google Drive, Dropbox

    3. Streaming de video. Ejemplo: Netflix, Flow.

    4. Servicio de DNS.

    5. Servicio de mensajería instantánea. Ejemplo: WhatsApp, Messenger.

    6. Repositorio FTP de imágenes ISO.

    Piense en cómo las aplicaciones se ven afectadas por éstas variables (tasa de transferencia baja/alta, delay, pérdida, duplicación y reordenamiento), así también como por otras de las métricas vistas en clase.

    A partir de allí realice, mediante una tabla, una comparación donde establezca cuáles parámetros o características deberían exigirse para tener una buena calidad de servicio( Ej alta tasa de transferencia, bajo delay, baja perdida, indistinta duplicación, indistinto re ordenamiento). Justifique sus decisiones en cada caso.

  3. Se requiere configurar una política de control de tráfico para el uso de un enlace de red que limite la tasa de transferencia independientemente del tipo de tráfico cursado por el enlace. Para este trabajo es necesario configurar una PC como router donde se aplica la política y un cliente y servidor para la generación del tráfico (puede utilizar la herramienta nc).

    1. Detalle la configuración realizada para permitir ruteo y la configuración de la política de control aplicada en cada una de las interfaces de red. Verifique la aplicación de la política utilizando las herramientas de medición de tráfico vistas en clase (por ejemplo mediante iperf e iptraf).
    2. Indicar la configuración de tc necesaria para aplicar policing.
    3. Indicar la configuración de tc necesaria para aplicar shaping.
    4. Detalle un ejemplo en que sea necesario aplicar este tipo de políticas.

DESAFIOS

DESAFÍO 1: Utilizando el componente tc netem realice cuatro simulaciones de una red de área amplia (WAN) que reproduzcan los siguientes escenarios: ⌂

  1. Delay variable: Aplique una regla de delay, definiendo el valor que este adoptará, su variación y un valor de correlación. Detalle la configuración establecida. Utilice una herramienta de diagnóstico de red para evaluar empíricamente la latencia existente y grafique, a partir de las pruebas realizadas, el RTT percibido en función del tiempo.

  2. Pérdida: Simule un escenario de pérdida de paquetes, luego utilice la herramienta ping para verificar que efectivamente las reglas fueron correctamente definidas en el host. Detalle la configuración establecida. Realice una captura para visualizar el comportamiento y documente lo hallado.

  3. Duplicación: Simule una situación de duplicación de paquetes, luego utilice la herramienta ping para verificar que efectivamente las reglas fueron correctamente definidas en el host. Detalle la configuración establecida. Realice una captura para visualizar el comportamiento y documente lo hallado.

  4. Reordenamiento: Simule una situación de reordenamiento de paquetes, donde un 25% (con una correlación del 50%) sean enviados inmediatamente mientras que el resto tenga un retraso de 10 ms. Pruebe estableciendo una sesión ssh y verifique el comportamiento a través de una captura.

DESAFÍO 2: Una empresa de transporte terrestre de larga distancia desea proveer conectividad WIFI de calidad a sus pasajeros. Para ello ha instalado un router wireless en cada vehículo que tiene conexión a Internet mediante un modem celular de tecnología 5G incorporado. Bajo su criterio, ¿qué tasa de transferencia mínima garantizada debería tener la conexión celular para garantizar que al menos la mitad de sus pasajeros puedan visualizar videos de YouTube sin interrupciones? Detalle su respuesta e incluya el procedimiento que realizó para calcularla, indicando además los factores que tuvo en cuenta para ello.

DESAFÍO 3: La final de la Copa Mundial de Fútbol 2023 fue presenciada por 89.000 espectadores en el Estadio de Lusail. Suponiendo que 1 de cada 30 espectadores filmaron y transmitieron en vivo la definición por penales con la aplicación Instagram (o Twitter o la que ud prefiera). ¿Qué cantidad de datos por segundo estima usted que debieron procesar los servidores de tal red social para garantizar que todos los flujos de video en vivo fueran vistos sin cortes por los usuarios de las redes? ¿Qué factores tuvo en cuenta para dicho cálculo?

Referencia

Conceptos fundamentales

De acuerdo a su manual, TC maneja tres conceptos fundamentales:

QDISCS

qdisc es la abreviatura de disciplina de encolado y es el componente principal para entender el control del tráfico. Siempre que se solicita al sistema operativo enviar un paquete a una interfaz, el kernel lo encola en la qdisc que dicha interfaz tiene definida. Inmediatamente después, el kernel trata de desencolar tantos paquetes como sea posible de la qdisc, para dárselos al driver de la placa de red.
Una qdisc sencilla es la denominada PFIFO, que no hace procesamiento y es una cola puramente First-In, First-Out. Desde luego, la qdisc pfifo sí almacena el tráfico en caso de que la interfaz de red momentáneamente no lo pueda enviar.
Algunas de las disciplinas de encolado disponibles (qdisc) son:

  • Simples, sin posibilidad de definir clases (classless)
    • First In, First Out (FIFO)
      • Packet limited First In, First Out (pfifo)
      • Three-band First In, First Out (pfifo_fast) - por defecto en linux antiguos
      • con múltiples colas
      • basadas en hash
        • Stochastic Fairness Queuing (SFQ) - round robin, cada flujo udp o sesión tcp tiene su chance
        • Fair Queuing with Controlled Delay (fq_codel) - por defecto en linux modernos
    • Token Bucket Filter (TBF) - hace shaping o policing según los parámetros
    • Generalized Random Early Detection (GRED) - aplica RED para evitar congestión
  • Con posibilidad de definir clases (classfull)
    • Hierarchical Token Bucket (HTB)
    • Deficit Round Robin (DRR)
    • Class Based Queueing (CBQ) - antigua y compleja

CLASES

Algunas qdisc pueden contener clases, que a su vez pueden contener más qdiscs - el tráfico puede entonces encolarse en cualquiera de las qdisc internas, que están dentro de las clases. Cuando el kernel intenta desencolar un paquete de una qdisc con clases, el mismo puede provenir de cualquiera de las clases hijas (dependiendo de la política). Una qdisc puede, por ejemplo, dar prioridad a ciertos tipos de tráfico al tratar de desencolar paquetes de una cierta clase antes de los otros.

FILTROS

Finalmente, un filtro es utilizado por una qdisc con clases para determinar en qué clase se encola (o a qué clase corresponde) un paquete que egresará del host. Siempre que el tráfico llega a una clase con subclases, DEBE ser clasificado. Se pueden emplear varios métodos, entre los cuales están los filtros. (…) Es importante destacar que los filtros no son globales para toda la interfaz, sino que siempre residen en una qdisc.

Teoría de operación

Las clases forman un árbol, donde cada clase tiene un solo padre, pero puede contener varias clases o disciplinas (qdisc) hijas. Algunas disciplinas de encolado (por ejemplo CBQ y HTB) permiten la adición de más clases, mientras que otras (PRIO) se crean con un número fijo de clases hijas. Aquellas qdiscs que permiten agregar dinámicamente clases pueden tener cero o más subclases sobre las cuales se puede encolar tráfico.

Ejemplo de árbol de clases en tc

Por otra parte, cada clase contiene una qdisc hoja que por defecto es PFIFO o PFIFO_FAST, aunque se puede conectar otra qdisc en reemplazo (y así sucesivamente).

Cuando un paquete entra en una qdisc con clases, se puede clasificar en alguna de las clases internas. Hay tres formas distintas de clasificar paquetes, aunque no todas las qdisc las implementan:

  • Mediante los filtros de tc: si se asocian filtros de tc a una clase, son utilizados primero para determinar lo sucesivo. Los filtros pueden considerar cualquier campo de la cabecera de un paquete [utilizando u32 o similares], como también las marcas que se ponen por iptables (utilizando iptables -t
    mangle ... -j MARK --set-mark NN
    ).
  • Mediante el tipo de servicio: algunas qdisc tienen criterios de clasificación propios que se basan en el campo TOS de IP.
  • Mediante skb->priority: las aplicaciones de usuario que operan contra un socket pueden indicar una id de clase para cada paquete (que tiene vida sólo en el sistema operativo, hasta que el paquete deja el equipo) mediante la opción SO_PRIORITY.

Cada nodo en el árbol puede tener sus propios filtros pero los filtros de nivel superior también dirigir directamente a las clases más bajas.

Sintaxis de los comandos

# para ver configuración actual y estadísticas
# (tokens disponibles, paquetes descartados, reordenados, etc)
tc -s [ qdisc | class | filter ] show dev INTERFAZ

# para agregar / cambiar / quitar / ver disciplinas de encolado
tc qdisc [ add | change | del ] dev INTERFAZ root nombre_qdisc parametros_qdisc
# para agregar / cambiar / quitar / ver clases de trafico
tc class [ add | change | show | del ] dev INTERFAZ parent id_qdisc_padre nombre_qdisc
# para agregar / cambiar / quitar / ver reglas de filtrado de trafico
tc filter [ add | change | del ] dev INTERFAZ root protocolo proto prio \
  prioridad tipo_filtro parametros_filtro

# para volver todo a la normalidad
tc qdisc del dev eth0 root