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:
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):
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:
Así es como se ve el ping después de aplicar esta regla:
Para mostrar las reglas activas utilice:
Puede ver los detalles de las reglas existentes que agregan 200,0 ms de latencia.
Para eliminar todas las reglas, use el siguiente comando:
Y ahora podemos ver cuales son las reglas por defecto del programador de linux:
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