LinuxParty

NUESTRO SITIO necesita la publicidad para costear hosting y el dominio. Por favor considera deshabilitar tu AdBlock en nuestro sitio. También puedes hacernos una donación entrando en linuxparty.es, en la columna de la derecha.

Ratio: 4 / 5

Inicio activadoInicio activadoInicio activadoInicio activadoInicio desactivado
 

Control de tráfico de Linux

El control de tráfico (tc) es una utilidad de Linux muy útil que le brinda la posibilidad de configurar el programador de paquetes del kernel. Si está buscando razones para meterse con el programador del kernel, aquí tiene algunas: En primer lugar, es divertido jugar con las diferentes opciones y familiarizarse con todas las funciones de Linux. Además, puede utilizar las herramientas útiles de Linux para simular el retraso y la pérdida de paquetes para aplicaciones UDP o TCP, o limitar el uso de ancho de banda de un servicio en particular para simular conexiones a Internet (DSL, Cable, T1, etc.).

En Debian Linux, tc viene incluido con iproute, por lo que para instalarlo debe ejecutar:

apt-get install iproute

Retraso de la red

El primer ejemplo es cómo agregar un retraso constante a una interfaz. La sintaxis es la siguiente (ejecutar esto como root):

tc qdisc add dev eth0 root netem delay 200ms

Esto es lo que significa cada opción:

qdisc:      modifique el programador (también conocido como disciplina de colas )
add: agregue una nueva regla
dev eth0: las reglas se aplicarán en el dispositivo eth0
root: modifique el programador de tráfico saliente (también conocido como egress qdisc)
netem: use el emulador de red para emular la propiedad WAN

Delay: (retraso) la propiedad de la red que se modifica un retraso

200 ms: introduzca un retraso de 200 ms

Nota: esto agrega un retraso de 200 ms al programador de salida, exclusivamente. Si tuviera que agregar la demora a los programadores de entrada y salida, la demora total habría sido de 400 ms. En general, todas estas reglas de control de tráfico se aplican únicamente al programador de salida.

Así es como se ve ping antes:

linuxparty.es$ ping google.com
PING google
.com (172.217.6.78) 56(84) bytes of data. 64 bytes from sfo07s17-in-f78.1e100.net (172.217.6.78): icmp_seq=1 ttl=53 time=11.9 ms 64 bytes from sfo07s17-in-f78.1e100.net (172.217.6.78): icmp_seq=2 ttl=53 time=12.0 ms

Así es como se ve el ping después de aplicar esta regla:

linuxparty.es$ ping google.com
PING google
.com (172.217.5.110) 56(84) bytes of data. 64 bytes from sfo03s07-in-f14.1e100.net (172.217.5.110): icmp_seq=1 ttl=53 time=213 ms 64 bytes from sfo03s07-in-f14.1e100.net (172.217.5.110): icmp_seq=2 ttl=53 time=210 ms

Para mostrar las reglas activas utilice:

linuxparty.es$ tc qdisc show  dev eth0
qdisc netem 8003: root refcnt 2 limit 1000 delay 200.0ms

Puede ver los detalles de las reglas existentes que agregan 200,0 ms de latencia.

Para eliminar todas las reglas, use el siguiente comando:

linuxparty.es$ tc qdisc del dev eth0 root

Y ahora podemos ver cuales son las reglas por defecto del programador de linux:

linuxparty.es$ tc qdisc show  dev eth0
qdisc pfifo_fast 0: root refcnt 2 bands 3 priomap  1 2 2 2 1 2 0 0 1 1 1 1 1 1 1 1

Sin entrar en demasiados detalles, vemos que el planificador funciona según las reglas de "Primero en entrar, primero en salir" (FIFO), que es la regla más básica y justa si no desea establecer ninguna prioridad en paquetes específicos. Puede pensar en ello como la fila en el banco: los clientes son atendidos en el orden en que llegan.

Tenga en cuenta que si tiene una regla existente, puede cambiarla usando “tc qdisc change ” y si no tiene ninguna regla, agregue reglas con “ tc qdisc add...

Aquí hay algunos otros ejemplos:

-Retardo de 100ms y distribución uniforme aleatoria +-10ms: -Retardo de 100ms y variación uniforme aleatoria de 10ms con valor de correlación del 25% (dado que los retrasos en la red no son completamente aleatorios): -Retardo de 100ms y distribución normal aleatoria +-10ms (otra distribución las opciones son pareto y paretonormal):


tc qdisc change dev eth0 root netem delay 100ms 10ms

tc qdisc change dev eth0 root netem delay 100ms 10ms 25%

add dev eth0 root netem delay 100ms 20ms distribution normal

 

Pérdida de paquetes y corrupción de paquetes

Sin explicar la sintaxis en detalle, ahora vamos a introducir una pérdida de paquetes del 10 %:


tc qdisc add dev eth0 root netem loss 10%

Podemos probar esto ejecutando una prueba de ping con 100 paquetes ICMP. Así es como se ven las estadísticas agregadas:

linuxparty.es$ ping google.com -c 100
PING google.com (216.58.194.174) 56(84) bytes of data.
64 bytes from sfo07s13-in-f174.1e100.net (216.58.194.174): icmp_seq=1 ttl=53 time=10.8 ms
.....
64 bytes from sfo07s13-in-f174.1e100.net (216.58.194.174): icmp_seq=99 ttl=53 time=11.8 ms
64 bytes from sfo07s13-in-f174.1e100.net (216.58.194.174): icmp_seq=100 ttl=53 time=10.5 ms

--- google.com ping statistics ---
100 packets transmitted, 89 received, 11% packet loss, time 99189ms
rtt min/avg/max/mdev = 10.346/12.632/21.102/2.640 ms

Como puede ver, hubo una pérdida de paquetes del 11%, que está muy cerca del valor establecido. Tenga en cuenta que si está conectado a la caja de Linux en la que está ejecutando estos comandos, su conexión podría perderse debido a que ha configurado la pérdida de paquetes demasiado alta.

La siguiente regla corrompe el 5% de los paquetes al introducir un error de bit único en un desplazamiento aleatorio en el paquete:

tc qdisc change dev eth0 root netem corrupt 5%

Este duplica el 1% de los paquetes enviados:

tc qdisc change dev eth0 root netem duplicate 1%

 

Límite de ancho de banda

Para limitar el ancho de banda de salida podemos usar el siguiente comando:

tc qdisc add dev eth0 root tbf rate 1mbit burst 32kbit latency 400ms

tbf: use el filtro de búfer de token para manipular las tasas de tráfico
rate: tasa máxima sostenida burst: latencia de ráfaga máxima permitida : los paquetes con mayor latencia se descartan

La mejor manera de demostrar esto es con una prueba de iPerf. En mi laboratorio, obtengo 95 Mbps de rendimiento antes de aplicar cualquier regla de ancho de banda:

tbf: use the token buffer filter to manipulate traffic rates
rate: sustained maximum rate
burst: maximum allowed burst
latency: packets with higher latency get dropped

Y aquí está el rendimiento después de aplicar el límite de 1 Mbps:

linuxparty.es$ iperf -c 172.31.0.142
------------------------------------------------------------
Client connecting to 172.31.0.142, TCP port 5001
TCP window size: 85.3 KByte (default)
------------------------------------------------------------
[  3] local 172.31.0.25 port 40233 connected with 172.31.0.142 port 5001
[ ID] Interval       Transfer     Bandwidth
[  3]  0.0-10.0 sec   113 MBytes  95.0 Mbits/sec

And here is the performance after applying the 1 Mbps limit:

linuxparty.es$ iperf -c 172.31.0.142
------------------------------------------------------------
Client connecting to 172.31.0.142, TCP port 5001
TCP window size: 85.3 KByte (default)
------------------------------------------------------------
[  3] local 172.31.0.25 port 40232 connected with 172.31.0.142 port 5001
[ ID] Interval       Transfer     Bandwidth
[  3]  0.0-11.0 sec  1.50 MBytes  1.14 Mbits/sec

Como puede ver, el ancho de banda medido de 1,14 Mbps está muy cerca del límite que se configuró.

El control de tráfico (tc), en combinación con el emulador de red (netem) y los filtros de depósito de fichas (tbf), puede realizar configuraciones mucho más avanzadas que solo tc. Algunos ejemplos de configuraciones avanzadas son maximizar el rendimiento de TCP en un enlace asimétrico, priorizar el tráfico sensible a la latencia o administrar el ancho de banda suscrito en exceso. Algunas de estas tareas se pueden realizar de manera efectiva con otras herramientas o servicios, pero tc es una gran utilidad para tener en su arsenal cuando surja la necesidad.

Fuente

No deje de ver las páginas del manual:  Manual TC 8 y aquí TC 8

Pin It

Escribir un comentario


Código de seguridad
Refescar



Redes:



 

Suscribete / Newsletter

Suscribete a nuestras Newsletter y periódicamente recibirás un resumen de las noticias publicadas.

Donar a LinuxParty

Probablemente te niegues, pero.. ¿Podrías ayudarnos con una donación?


Tutorial de Linux

Filtro por Categorías