Laboratorio de Control de Tráfico
- Sin control de tráfico
- Control de admisión para el tráfico de entrada
- Disciplinas de colas para el tráfico de salida
- DiffServ
Descomprime el fichero que contiene el escenario de NetGUI lab-tc.tgz para realizar la práctica de control de tráfico en Linux.
Sin control de tráfico
El router r1
no tiene activado el control de tráfico en ninguna de
sus interfaces.
Un flujo de datos
Arranca iperf
en modo servidor UDP en pc3
y arranca iperf
en modo
cliente UDP en pc1
para que envíe tráfico a 3 Mbit durante 10 segundos
a pc3
.
Observa en el lado servidor, el informe del tráfico recibido en el
sentido pc1
$\rightarrow$ pc3
.
Dos flujos de datos
Arranca
iperf
en modo servidor UDP enpc4
.Arranca otro
iperf
en modo servidor UDP enpc3
.Inicia una captura de tráfico en la interfaz
eth1
der1
.Escribe (todavía sin ejecutar) el comando que arranca
iperf
en modo cliente UDP enpc1
para que envíe 3 Mbit al servidorpc3
en el sentidopc1
$\rightarrow$pc3
durante 10 segundos.Escribe (todavía sin ejecutar) el comando que arranca
iperf
en modo cliente UDP enpc2
para que envíe 3 Mbit al servidorpc4
en el sentidopc2
$\rightarrow$pc4
durante 10 segundos.Ejecuta los dos comandos anteriores uno a continuación de otro (lo más rápidamente que puedas) para que su ejecución se realice de forma simultánea.
Interrumpe la captura aproximadamente 10 segundos después de que arrancaras
iperf
.
A continuación analiza los resultados obtenidos:
Explica las estadísticas que muestran los servidores.
Carga la captura en
wireshark
y muestra cada uno de los flujos de forma gráfica. Explica el ancho de banda medido para cada uno de los flujos.
Control de admisión para el tráfico de entrada
Vamos a configurar r1
para restringir el tráfico de entrada para 2
flujos de datos que recibe r1
:
Flujo 1: origen 11.0.0.10 se va a restringir a una velocidad de 1Mbit y una cubeta de 10k.
Flujo 2: origen 11.0.0.20 se va a restringir a una velocidad de 2Mbit y una cubeta de 10k.
Utiliza
tc
para definir esta configuración en la interfazeth0
der1
que es la interfaz de entrada der1
para los flujos 1 y 2. Ten en cuenta que se aplique primero el filtro del flujo número 1 y después el del número 2. Guarda esta configuración en un fichero de script, por ejemplo con el nombretc-ingress.sh
que deberá contener las instrucciones que ejecutarías en la línea de comandos:#!/bin/sh # Esto es un comentario echo "Borrando la disciplina de cola ingress en la interfaz eth0" tc qdisc del dev eth0 ingress echo "Creando la disciplina de cola ingress en la interfaz eth0" tc qdisc add ... ...
Una vez creado el script debes darle permisos de ejecución con la orden:
chmod 755 tc-ingress.sh
Y por último, para ejecutarlo, debes escribir1:
./tc-ingress.sh
Inicia una captura de tráfico en la interfaz
eth1
der1
.Arranca dos clientes y 2 servidores tal y como lo hiciste en el apartado [sec:dosflujos].
Interrumpe la captura aproximadamente 10 segundos después de que arrancaras
iperf
, cuando los servidores hayan terminado de recibir todo el tráfico.
A continuación analiza los resultados obtenidos:
Explica las estadísticas que muestran los servidores.
Carga la captura en
wireshark
y muestra cada uno de los flujos de forma gráfica. Explica el ancho de banda medido para cada uno de los flujos.
Disciplinas de colas para el tráfico de salida
Token Bucket Filter (TBF)
Mantén la configuración del tráfico de entrada en r1
que has realizado
en el apartado anterior en el script tc-ingress.sh
.
Define en
r1
para su interfazeth1
una disciplina TBF de salida con ancho de banda 1.5 Mbit, latencia 10 ms y tamaño de cubeta 10k y guarda la configuración en un nuevo scripttc-egress-tbf.sh
.Inicia una captura de tráfico en la interfaz
eth1
der1
.Arranca dos clientes y 2 servidores tal y como lo hiciste en el apartado [sec:dosflujos].
Interrumpe la captura aproximadamente 10 segundos después de que arrancaras
iperf
.
A continuación analiza los resultados obtenidos:
Explica las estadísticas que muestran los servidores.
Carga la captura en
wireshark
y muestra cada uno de los flujos de forma gráfica. Explica el ancho de banda medido para cada uno de los flujos.
Modifica la configuración de TBF de salida para que ahora tenga una latencia de 20 segundos y realiza la misma prueba que antes 2. Interrumpe la captura al menos cuando hayan pasado 20 segundos desde que comenzaste a enviar tráfico desde los clientes. A continuación analiza los resultados obtenidos:
Explica las estadísticas que muestran los servidores.
Carga la captura en
wireshark
y muestra cada uno de los flujos de forma gráfica. Explica el ancho de banda medido para cada uno de los flujos.
Prioridad (PRIO)
Mantén la configuración del tráfico de entrada en r1
que has realizado
en el apartado anterior en el script tc-ingress.sh
. Borra la
disciplina de cola de salida configurada en la interfaz eth1
de r1
.
La configuración TBF en el apartado [sec:tbf] permite gestionar el ancho de banda de salida para que no supere el valor configurado, en nuestro caso 1.5Mbit. Toma como punto de partida esta configuración para que ahora se atienda el tráfico de salida según diferentes prioridades, configurando una disciplina de cola con prioridad que sea hija de la disciplina TBF.
Escribe un script en
r1
,tc-egress-prio.sh
, para configurar TBF con los siguientes parámetros: ancho de banda 1.5Mbit, cubeta 10k y latencia 20s. Crea una disciplina de cola hija con prioridad de tal forma que se asignen las siguientes prioridades:Prioridad 1 (más prioritario): tráfico de la dirección IP origen 11.0.0.10
Prioridad 2 (prioridad intermedia): tráfico de la dirección IP origen 11.0.0.20
Prioridad 3 (menos prioritario): no lo vamos a definir.
Inicia una captura de tráfico en la interfaz
eth1
der1
.Arranca 2 servidores para recibir los dos flujos de datos tal y como se hizo en el apartado [sec:dosflujos].
Arranca dos clientes y 2 servidores tal y como lo hiciste en el apartado [sec:dosflujos].
Interrumpe la captura aproximadamente 35 segundos después de que arrancaras
iperf
.
A continuación analiza los resultados obtenidos:
Explica las estadísticas que muestran los servidores.
Carga la captura en wireshark y muestra cada uno de los flujos de forma gráfica. Explica el ancho de banda medido para cada uno de los flujos.
Hierarchical Token Bucket (HTB)
Mantén la configuración del tráfico de entrada en r1
que has realizado
en el apartado anterior en el script tc-ingress.sh
. Borra la
disciplina de cola de salida configurada en la interfaz eth1
de r1
.
Escribe un script en
r1
,tc-egress-htb.sh
, para configurar en su interfazeth1
una disciplina HTB de salida con ancho de banda 1.2 Mbit. Reparte el ancho de banda de esta interfaz de salida de la siguiente forma:700 kbit para el tráfico con origen en
pc1
,ceil
700kbit.500 kbit para el tráfico con origen en
pc2
,ceil
500kbit.
Inicia una captura de tráfico en la interfaz
eth1
der1
.Arranca 2 servidores para recibir los dos flujos de datos tal y como se hizo en el apartado [sec:dosflujos].
Arranca dos clientes y 2 servidores tal y como lo hiciste en el apartado [sec:dosflujos].
Interrumpe la captura aproximadamente 35 segundos después de que arrancaras
iperf
.
A continuación analiza los resultados obtenidos:
Explica las estadísticas que muestran los servidores.
Carga la captura en wireshark y muestra cada uno de los flujos de forma gráfica. Explica el ancho de banda medido para cada uno de los flujos.
Modifica la configuración de ceil
en cada uno de los flujos para que
puedan utilizar 1.2Mbit. Realiza la misma prueba que antes y analiza los
resultados obtenidos:
Explica las estadísticas que muestran los servidores.
Carga la captura en wireshark y muestra cada uno de los flujos de forma gráfica. Explica el ancho de banda medido para cada uno de los flujos.
DiffServ
Descomprime el fichero que contiene el escenario de NetGUI lab-diffServ.tgz para realizar la práctica de diffServ en Linux.
Configuración de función policing y marcado de tráfico en DSCP
En el escenario de la figura [fig:diffServ] se va a configurar la red
para que el tráfico desde pc1
, pc2
y pc3
envíen paquetes a pc4
,
pc5
y pc6
atravesando una red diffServ. Se distinguirán 4 calidades
diferentes con los códigos: EF, AF31, AF21 y AF11.
Utiliza la herramienta tc
para garantizar que el tráfico que entra en
r1
cumple las siguientes características:
La red diffServ deberá garantizar a la entrada los siguientes anchos de banda para
pc1
, descartando el tráfico sobrante:Flujo 1: máximo 1.2mbit con ráfaga 10k para el tráfico dirigido a
pc4
, marcado con calidad EF. Si se supera este ancho de banda, el tráfico quedará clasificado dentro del flujo 2.Flujo 2: máximo de 300kbit y ráfaga 10k, marcado con calidad AF31. Si se supera este ancho de banda, el tráfico será descartado definitivamente en
r1
.
La red diffServ deberá garantizar a la entrada los siguientes anchos de banda para
pc2
, descartando el tráfico sobrante:Flujo 3: máximo 600kbit con ráfaga 10k para el tráfico dirigido a
pc5
, marcado con calidad AF21. Si se supera este ancho de banda, el tráfico quedará clasificado dentro del flujo 4.Flujo 4: máximo de 400kbit y ráfaga 10k, marcado con calidad AF11. Si se supera este ancho de banda, el tráfico será descartado definitivamente en
r1
.
Utiliza la herramienta tc
para garantizar que el tráfico que entra en
r2
cumple las siguientes características:
La red diffServ deberá garantizar a la entrada los siguientes anchos de banda para
pc3
, descartando el tráfico sobrante:Flujo 5: máximo 400kbit con ráfaga 10k dirigido a
pc6
, marcado con calidad AF31. Si se supera este ancho de banda, el tráfico quedará clasificado dentro del flujo 6.Flujo 6: máximo 300kbit con ráfaga 10k dirigido a
pc6
, marcado con calidad AF21. Si se supera este ancho de banda, el tráfico quedará clasificado dentro del flujo 7.Flujo 7: máximo 100kbit con ráfaga 10k, marcado con calidad AF11. Si se supera este ancho de banda, el tráfico será descartado definitivamente en
r2
.
Realiza un script para r1
y otro para r2
donde se configuren estos
perfiles de tráfico.
Ejecuta en tu escenario el envío ”simultáneo” de:
Desde el
pc1
2Mbit apc4
Desde el
pc2
1.5Mbit apc5
Desde el
pc3
1Mbit apc6
Realiza una captura en la subred 15.0.0.0/24 y comprueba que el resultado es el esperado:
El tráfico que entra en la red diffServ es el que se ha especificado en el control de admisión.
El tráfico está marcado según las especificaciones anteriores.
Consulta las gráficas
IO graphs
de Wireshark aplicando los filtros sobre las marcas DSCP de tal forma que se muestre cada calidad marcada de cada una de las fuentes:Tráfico de calidad EF
Tráfico de calidad AF31
Total
Con origen en
pc1
.Con origen en
pc3
.
Tráfico de calidad AF21
Total
Con origen en
pc2
.Con origen en
pc3
.
Tráfico de calidad AF11
Total
Con origen en
pc2
.Con origen en
pc3
.
Explica los resultados obtenidos.
Tratamiento de tráfico en función del marcado DSCP
Mantén la configuración realizada en r1
, r2
.
Se establecen los siguientes parámetros de calidad dentro del router del
núcleo diffServ (r3
) para cada una de las calidades definidas.
Configura HTB con ancho de banda 2.4Mbit para compartir entre todos los
flujos con el siguiente patrón:
Calidad EF: HTB 1mbit como mínimo y 1Mbit como máximo.
Calidad AF31: HTB 500kbit como mínimo y 500kbit como máximo.
Calidad AF21: HTB 600kbit como minimo y 600kbit como máximo.
Calidad AF11: HTB 200kbit como mínimo y 200kbit como máximo.
Realiza un script para r3
donde se configure esta disciplina de cola
según el marcado de los paquetes.
Ejecuta en tu escenario el envío ”simultáneo” de:
Desde el
pc1
2Mbit apc4
Desde el
pc2
1.5Mbit apc5
Desde el
pc3
1Mbit apc6
Realiza una captura en la subred 15.0.0.0/24, espera al menos 1 minuto después de que el haya terminado de enviarse el tráfico de
pc1
,pc2
ypc3
y comprueba que el resultado es el esperado, es decir, el tráfico sigue el perfil indicado en las especificaciones anteriores.Consulta las gráficas
IO graphs
de Wireshark aplicando los filtros sobre las marcas DSCP de tal forma que se muestre cada calidad marcada de cada una de las fuentes:Tráfico de calidad EF
Tráfico de calidad AF31
Tráfico de calidad AF21
Tráfico de calidad AF11
Explica los resultados obtenidos y si crees que alguno de los flujos ha encolado tráfico para enviarlo posteriormente a los 10 segundos que dura la transmisión de
iperf
.
Modifica la configuración de HTB en r3
para que si algún flujo no está
utilizando el ancho de banda que tiene garantizado lo puedan usar el
resto de flujos y vuelve a hacer la misma captura de tráfico en la
subred 15.0.0.0/24. Explica los resultados obtenidos.
1. Si es la primera vez que ejecutas este script, el router no ↩
tendrá configurada ninguna disciplina de cola en esa interfaz y al
usar la instrucción de borrado se mostrará un error, pero la
ejecución del *script* continuará y se aplicarán el resto de los
cambios que hayas configurado.
2. Ten en cuenta que ahora el tráfico quedará en la cola de la ↩
disciplina TBF esperando a ser cursado según el ancho de banda que
hemos configurado. El cliente terminará de enviar a los 10 segundos
y esperará a recibir el informe del servidor. Sin embargo, el
servidor no acabará de recibir (y por tanto no enviará el informe)
hasta que TBF no termine de atender el tráfico de la cola de salida,
que será más de 10 segundos. Al no recibir el cliente el informe del
servidor, terminará imprimiendo un `Warning`. De la misma forma
cuando el servidor haya terminado de recibir y envíe el informe al
cliente, éste ya habrá terminado su ejecución e imprimirá un mensaje
indicando que no ha podido enviar el informe al cliente:
`Connection refused`.