¿Puede TC limitar el ancho de banda mediante el campo Qos del encabezado IP?

¿Puede TC limitar el ancho de banda mediante el campo Qos del encabezado IP?

Estamos desarrollando aplicaciones cliente/servidor. Hay tres tipos de datos de red en nuestra aplicación de servidor: datos en tiempo real, como los de vídeo/audio, datos críticos, como los de la base de datos, y datos de BestEfforts, como los de transferencia de archivos comunes.

Planeamos configurar el campo QOS de cada paquete IP para indicar a qué tipo de datos de los tres anteriores pertenece el paquete IP y luego usar TC para establecer diferentes velocidades máximas para estos tres tipos de datos.

Hasta donde yo sé, configurar el campo qos es viable, pero me pregunto si podemos limitar la velocidad de los paquetes IP especificando el valor qos (el valor del campo QOS en el encabezado IP).

Respuesta1

Supongo que te refieres TOSal campo de 8 bits en el encabezado del paquete IPv4. ¿Ya has leído?CÓMO LARTC? Esta es la guía que definitivamente necesitas leer. Brevemente, es necesario

1) Definir QDISCsyCLASSesen el que se clasifica, prioriza y da forma al tráfico (¡El tráfico de salida solo se puede moldear!). En general, cualquier paquete que deba enviarse se pone en cola en QDISCla interfaz de red.

CEIL=10
tc qdisc add dev eth0 root handle 1: htb default 15
tc class add dev eth0 parent 1: classid 1:1 htb rate ${CEIL}mbit ceil ${CEIL}mbit
tc class add dev eth0 parent 1:1 classid 1:10 htb rate 4mbit ceil ${CEIL}mbit prio 0
tc class add dev eth0 parent 1:1 classid 1:11 htb rate 1mbit ceil ${CEIL}mbit prio 1
tc class add dev eth0 parent 1:1 classid 1:12 htb rate 6mbit ceil ${CEIL}mbit prio 2
tc qdisc add dev eth0 parent 1:11 handle 110: sfq perturb 10
tc qdisc add dev eth0 parent 1:12 handle 120: sfq perturb 10

prioPrimero se prueban las clases con campo inferior . Por tanto, la clase 1:10 puede dedicarse a paquetes que requieran, por ejemplo, un retraso mínimo. Las clases 1:11 y 1:12 tienen SFQdisciplina de colas adjunta para garantizar un intercambio de ancho de banda más justo.

2) Definir FILTROSpara poner en cola un paquete a la derecha CLASS.

tc filter add dev eth0 parent 1:0 protocol ip prio 1 handle 10 fw classid 1:10
tc filter add dev eth0 parent 1:0 protocol ip prio 2 handle 11 fw classid 1:11
tc filter add dev eth0 parent 1:0 protocol ip prio 3 handle 12 fw classid 1:12

Esto simplemente indica que un paquete con la marca 10 pasa a la clase 10 y así sucesivamente.

3) Definir reglas de iptablespara marcar un paquete y ponerlo en cola a la derechaCLASS

iptables -t mangle -A PREROUTING -m tos --tos Minimize-Delay -j MARK --set-mark 0x10
iptables -t mangle -A PREROUTING -m tos --tos Minimize-Cost -j MARK --set-mark 0x11
iptables -t mangle -A PREROUTING -m tos --tos Maximize-Throughput -j MARK --set-mark 0x12

Utilizo tosel módulo iptables a propósito para mostrarle cómo puede hacer coincidir valores específicos de TOSun campo y marcarlo en consecuencia. Para obtener más información sobre este módulo, ejecute

iptables -m tos --help

información relacionada