VisualTC - Uma interface gráfica amigável para construção de regras de QoS no Linux

De MediaWiki do Campus São José
Ir para navegação Ir para pesquisar

Introdução

A motivação inicial por trás da concepção da Internet consistia na troca de dados através de uma rede de computadores. Sua concepção baseada em camadas, como apresentada pelo modelo OSI e os protocolos TCP/IP foram os principais fatores de sucesso para a Internet atual.

Desde a década de 90 (CLARK; BRADEN; SHENKER, 1994) foi vislumbrado o uso da Internet para transportar conteúdos multimídia, como voz e vídeo, porém a rede não fora projetada para isto e os mecanismos que garantem a robustez e o funcionamento em ambientes de larga escala são os mesmos que impõem dificuldade para o transporte de conteúdos multimídia.

Pacotes de aplicações multimídia possuem requisitos de entrega diferentes daqueles pacotes de aplicações convencionais. Para uma aplicação multimídia é importante que um pacote chegue no exato momento que esta espera, se chegar atrasado, a informação contida neste não terá mais validade.

A rede não diferencia pacotes de aplicações convencionais de aplicações multimídia e assim todos os pacotes são tratados da mesma maneira pelos roteadores. Dentro da IETF (Internet Engineering Task Force) surgiram abordagens (NICHOLS et al., 1998; CLARK; BRADEN; SHENKER, 1994) para permitir à rede entender e diferenciar pacotes com diferentes requisitos de entrega. Ou seja, pacotes de aplicações multimídia terão um tratamento diferenciado e, as vezes priorizado, dos pacotes de aplicações convencionais, princípio este culminando no termo Qualidade de Serviço, em inglês Quality of Service (QoS).

Um roteador com QoS, ao receber um pacote, precisa classificá-lo, colocando-o em uma fila específica. Com esta fila, consegue-se ordenar os pacotes que saem, priorizar o seu tráfego, garantir banda, limitar o atraso e a variação deste atraso.

Motivação

No sistema operacional Linux é possível aplicar políticas de QoS através da ferramenta Traffic Control (TC). Trata-se de uma ferramenta cuja interação com o usuário se dá através da linha de comando. A ferramenta permite ao usuário indicar diferentes tipos de disciplinas de enfileiramento, construção de classes para agrupar tráfego, política de descarte, etc.

Apesar de permitir construir regras de QoS simples de maneira rápida, a construção de regras mais elaboradas culmina em uma tarefa árdua para o usuário, uma vez que a sintaxe é complexa e a ferramenta não apresenta um meio para enxergar o todo. Pode-se dizer que a construção de regras com o TC se assemelha a escrita de um algoritmo em uma linguagem de programação, porém sem as facilidades de estruturas de decisão e repetição.

Objetivos

Este trabalho tem por objetivo desenvolver uma interface amigável para melhorar a percepção do usuário na criação de políticas de QoS, ou seja, um frontend para criação de regras de QoS com o TC. Dessa forma, o usuário criará suas regras através de uma interface gráfica e o resultado será um script em TC, que uma vez executado geram as configuração de QoS no Linux. São objetivos específicos:

  • Estudar o uso das ferramentas TC para implementação de QoS no Linux.
  • Estudar a melhor alternativa para criar uma ferramenta gráfica para o TC.
  • Criar uma interface gráfica amigável para o uso da ferramenta TC.

VisualTC

Este trabalho apresenta o VisualTC, um software cujo principal objetivo é oferecer uma interface gráfical amigável para o usuário configurar as políticas de QoS no Linux. Assim, o usuário irá criar suas regras de QoS de uma maneira mais intuitiva e simplificada, sem a necessidade de ter um amplo conhecimento da linguagem utilizada pela ferramenta TC.

Figura 1: O ambiente de trabalho do VisualTC

A Figura 1 ilustra a interface principal do VisutalTC, juntamente com um exemplo de hierarquia de uma política QoS construída com esta. O software possui duas áreas de trabalho, uma para desenhar a hirearquia da política de QoS e outra para a criação dos filtros, responsáveis por direcionar os pacotes nas classes e filas que o usuário desejar (veja Figura 2).

Figura 2: A Janela de Filtros d VisualTC

A paleta lateral do VisualTC contém os elementos de QoS da ferramenta TC: Qdisc root, Qdsic filha, Classe root e Classe filha. Assim, o usuário poderá adicionar estes objetos para o ambiente de trabalho. No ambiente de trabalho, é possível movimentar os objetos, criar uma conexão entre os objetos adicionados, excluir objetos e suas conexões e ainda é possível configurar as propriedades que cada elemento possui a fim de criar uma hierarquia de QoS conforme exemplo da Figura 1. Entretando o software não manipula todas as disciplinas de fila existem no Linux, ele está limitado a tratar os escalonadores: FIFO (First-In First-Out), SFQ (Stochastic Fair Queueing), TBF (Token Bucket Flow), PRIO (Priority Queueing) e HTB (Hierarchical Token Bucket).

Os filtros no VisualTC são tratados através do uso da ferramenta iptables do Linux. Este são criados através da tabela mangle que, basicamente, é a tabela responsável por marcar os pacotes. Os filtros desta tabela são executados linha a linha. Assim, a ordem em que estes são criados influenciam no funcionamento correto da aplicação desejada. A ferramenta permite adicionar novos filtros na tabela, trocar a ordem dos filtros existente na tabela, excluir um filtro e ainda voltar a editá-lo.

Por fim, o usuário poderá exportar a política desenhada para uma figura PNG ou ainda para um shell script, que estará de acordo com a sintaxe do TC, ou seja, pronto para ser executado e assim configurar uma política de QoS em um roteador Linux. O código abaixo apresenta o shell script gerado pelo VisualTC.

#!/bin/bash

# Shell script gerado a partir do arquivo de configuracao Exemplo
# em 19/09/2013 19:59:01
# atraves do software VisualTC.

# Deletando a qdisc root existente
tc qdisc del dev eth0 root 2>/dev/null

# 1o nivel da hierarquia
tc qdisc add dev eth0 root handle 1: htb default 11

# 2o nivel da hierarquia
tc class add dev eth0 parent 1: classid 1:1 htb rate 1000kbit ceil 1000kbit

# 3o nivel da hierarquia
tc class add dev eth0 parent 1:1 classid 1:11 htb rate 600kbit ceil 600kbit burst 600 cburst 600 prio 2
tc class add dev eth0 parent 1:1 classid 1:10 htb rate 400kbit ceil 400kbit burst 400 cburst 400 prio 1

# Filtros
iptables -t mangle -A POSTROUTING -o eth0 -p tcp --sport 80 -j CLASSIFY --set-class 1:10
iptables -t mangle -A POSTROUTING -o eth0 -p tcp -s 192.168.1.10 -j CLASSIFY --set-class 1:10

O VisualTC foi desenvolvido usando a linguem de programação Java utilizando a biblioteca Visual Library do ambiente de desenvolvido NetBeans. Sendo assim, o software pode ser executado em qualquer sistema operacional que possua a máquina virtual Java instalada. Porém, o shell script gerado por este só poderá ser executado no Linux.

Referências Bibliográficas

CLARK, D.; BRADEN, R.; SHENKER, S. Integrated services in the internet architecture: an overview. IETF, 1994. RFC 1633. (Request for Comments, 1633). Disponível em: <www.ietf.org/rfc/rfc1633.txt>.

NICHOLS, K. et al. Definition of the differentiated services field (DS field) in the IPv4 and IPv6 headers. IETF, 1998. RFC 2474. (Request for Comments, 2474). Disponível em: <www.ietf.org/rfc/rfc2474.txt>.

Downloads

Código fonte do VisualTC

Arquivos para instalação/execução do VisualTC

Monografia de Luiz Gustavo Ender sobre o VisualTC