Pode TC limitar a largura de banda pelo campo Qos do cabeçalho IP

1

Estamos desenvolvendo aplicativos cliente / servidor. Existem três tipos de dados de rede em nosso aplicativo de servidor: dados em tempo real, como os de vídeo / áudio, dados críticos, como os dados do banco de dados e os dados do BestEfforts, como os da transferência de arquivos comuns.

Pretendemos configurar o campo QOS de cada pacote IP para indicar qual tipo de dados dos três pacotes anteriores o pacote IP pertence e, em seguida, usar TC para definir taxas máximas diferentes para esses três tipos de dados.

Até onde sei, a configuração do campo qos é viável, mas gostaria de saber se podemos limitar a taxa de pacotes ip especificando o valor qos (o valor do campo QOS no cabeçalho IP).

    
por Steve Peng 11.09.2013 / 08:04

1 resposta

2

Eu suponho que você esteja falando do campo TOS de 8 bits no cabeçalho do pacote IPv4. Já leu LARTC HOWTO ? Este é o guia que você definitivamente precisa ler. Resumidamente, você precisa

1) Defina QDISCs e CLASSes em que o tráfego é classificado, priorizado e formatado (o tráfego de saída só pode ser configurado !!! ). Em geral, qualquer pacote que precise ser enviado é enfileirado para QDISC da interface de rede.

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

Classes com o menor campo prio são tentadas primeiro. Assim, a classe 1:10 pode ser dedicada para pacotes que requerem, e. atraso mínimo. As classes 1:11 e 1:12 anexaram a disciplina SFQ de filas para garantir um compartilhamento de largura de banda mais justo.

2) Defina FILTERs para enfileirar um pacote para a direita 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

Isso simplesmente diz que um pacote com a nota 10 vai para a classe 10 e assim por diante.

3) Defina regras iptables para marcar um pacote para enfileirá-lo à direita CLASS

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

Eu uso o módulo iptables tos de propósito para mostrar como você pode corresponder valores específicos do campo TOS e marcá-lo de acordo. Para mais sobre este módulo, execute

iptables -m tos --help
    
por 11.09.2013 / 08:51