GNU/Linux
 
 
TC
(Traffic Control)

Numa empresa, uma hora ou outra surgirá alguém reclamando que o acesso a Internet está lento, mesmo aumentando o link de 1Mbit para 2, de 2 para 5, de 5 para 10 megabits de largura de banda e assim sucessivamente, haverão momentos de lentidão. Isto se deve, na maioria das vezes, aos downloads e/ou uploads de arquivos muito grandes. É muito comum um usuário baixar, CDs, DVDs, vídeos, músicas pela Internet da empresa. Algumas vezes legítimos e outros não. Também, não se pode esquecer de programas de gerenciamento de downloads que abrem diversas conexões simultâneamente, fazendo uma concorrência desleal com os outros usuários que abrem somente uma conexão.

Para impedir que tais downloads e uploads consumam toda a banda de rede disponível é necessário CONTROLAR O TRÁFEGO que entra e que sai. No GNU/Linux, o comando utilizado para isto é o TC (Traffic Control). Ao falar em controlar o tráfego de rede tem-se a impressão de impedir ou permitir um determinado tráfego que pode ser feito facilmente com o comando IPTABLES, mas o que o IPTABLES faz é FILTRAR O TRÁFEGO e não CONTROLAR.

Então, como controlar um download e/ou upload para não consumir(em) toda a largura de banda disponível na rede? Se formos ao pé da letra de questões técnicas, para conseguirmos diminuir ou aumentar a largura de banda de uma rede, pois precisaríamos realizar mudanças físicas no material usado na contrução do cabo de comunicação com a Internet ou com a LAN.

O que se pode fazer é controlar o tráfego colocando regras da seguinte maneira, por exemplo, se o trafégo for HTTP, ter como origem a Internet e destino a LAN (ou seja, um download), diminua o trafego para 300kbit. Assim, se tivermos uma largura de banda de 1Mbit (1000Kbit), 700kbit ficará livre. Aparentemente, houve uma diminuição da largura de banda, mas isto é só aparência, pois na verdade a largura de banda ainda continua a mesma, ou seja, 1Mbit.

Agora, será provado por que não houve diminuição da largura de banda e sim um simples controle de tráfego. Ao realizar a regra do parágrafo anterior para diminuir um download de 1Mbit/s para 300Kbit/s, tal regra trabalha na saída da interface de rede, onde existe uma memória buffer que enfileira todo o tráfego antes de colocá-lo no cabo de rede. O que a regra faz é não colocar os pacotes no cabo de rede na velocidade máxima. A regra vai colocando os pacotes de maneira mais lenta. Observe que esta regra trabalha na interface de rede/placa de rede (mais especificamente na memória buffer dela onde todo o tráfego está enfileirado) e não no cabo de rede. Por isto, dizemos que o tráfego é controlado e a largura de banda não é mudada.

Também, pode-se observar que quando um pacote está na fila de um buffer da placa de rede, ele pode ser manuseado. Assim, um recurso bastante utilizado no controle de tráfego é a priorização de pacotes. Desta maneira, pode-se informar através de regras que um determinado pacotes deve ser desenfileirado antes dos outros.

O comando utilizado no GNU/Linux para realizar o controle de tráfego é o ''tc''. Para que esse comando esteja díponível no shell é necessário instalar o pacote chamado ''iproute2''. Para fazer isto no Debian GNU/Linux digite:

apt-get update ; apt-get install iproute2

Tal pacote também deixa disponível um comando muito importante chamado ''ip''

Abaixo é apresentado um texto que não é necessário para aprender controle de tráfego no GNU/Linux, mas quem quiser aumentar o conhecimento na área de redes, então mãos a obra:

Uma pergunta que não quer calar é: Então, como as operadoras de telecomunicação como a OIBrT, GVT, NetVitual, Telefônica, Amais etc conseguem aumentar e diminuir a banda de rede de um link numa empresa ou residência sem mudar o cabo de comunicação. Por exemplo, quando uma empresa muda o seu link de 1Mbit e para 2Mbit, não há mudança no cabeamento. Simplesmente, é solicitada a mudança, geralmente por telefone, e quase que instaneamente é aumentada a largura de banda. Na verdade, o que as operadoras fazem é controlar o tráfego, da mesma forma que no GNU/Linux. As operadoras controlam as saídas dos seus roteadores, enfileirando o tráfego. Exemplo, se uma empresa tem um largura de banda de 1Mbit, os roteadores da operadora desenfileirarão os pacotes provinientes desta empresa numa velocidade. Já uma outra empresa que tem um link de 10Mbit, os roteadores desenfileirarão o tráfego numa velocidade 10 vezes maior que na primeira empresa.

Com isto, pode-se perceber que os links entre os roteadores de uma operadora têm uma largura de banda muito grande (ex: 10Gbit), só que toda esta largura é divida entre os vários clientes através do controle de tráfego. Vale evidenciar que estes roteadores, controlados pelas operadoras, têm uma memória buffer gigantesca para acomodar todos os pacotes provinientes de diversos lugares. Quando tal buffer lota, os pacotes são descartados e haverá congestionamento.

Vale evidenciar que o exposto neste artigo, está relacionado ao controle de tráfego utilizado na maioria da vezes nos roteadores. No entanto. nada impede utilizar o comando TC em servidores ou estações de trabalho. Além disso, não podemos esquecer que se têm dois tipos de buffer. O primeiro já foi exposto nos parágrafos anteriores e nada mais é do que uma memória utilizada pela interface de rede, a qual armazena os pacotes antes de colocá-los no cabo de rede, sendo muito utilizada nos roteadores. O segundo tipo é um buffer utilizado nas aplicações das estações de trabalho. Um exemplo clássico é o YOUTUBE, ao assistir um vídeo pela Internet é possível ver a bufferização do vídeo antes dele ser exibido. Esta solicitação de bufferização do vídeo é proviniente dos servidores que oferecem o serviço, utilizando o protocolo TCP para isto. Só para evidênciar, apesar da origem da solicitação de bufferização ser dos servidores, os roteadores podem mudar alguns campos do cabeçalho TCP quando os pacotes passarem por ele (comando iptables) para que o cliente faça o buffer antes de exibir, por exemplo, o vídeo.

Devido ao explicado no parágrafo anterior, quando uma aplicação utiliza o buffer nos clientes, ela não será em tempo real (não está acontecendo no momento) e geralmente usa o TCP para prover tais funcionalidades de bufferização nos clientes. Isto é conhecido como stremming de dados. Tais dados podem ser de vídeo, áudio etc. Veja que este tipo de buffer é da aplicação e não da placa de rede, sendo que não são enfileirados os pacotes, mas sim os dados contidos nos pacotes. Desda maneira, os dados são enfileirados (bufferizados) antes de serem entregues a aplicação. Quando os dados são entregues a aplicação, eles são processados. No caso do YOUTUBE, o vídeo será exibido quando os dados forem processados.

Nunca confundam o buffer das aplicações com o buffer da placa de rede.

Quando uma aplicação é em tempo real, ou seja, está acontecendo no momento, não é permitido buffer na aplicação e geralmente usa o protocolo UDP (o cabeçalho do UDP é bem pequeno comparado com o do TCP). Contudo, deve-se utilizar o buffer das interfaces de rede nos roteadores para reservar um fatia da largura de banda e para priorizar os seus pacotes (comando "TC" no GNU/Linux). Com isso, os pacotes de um aplicação em tempo real terão velocidade e priorização. Dois exemplos clássicos de aplicações que precisa ser em tempo real são o VoIP e a videoconferência. Neste caso de aplicações que necessitam ser em tempo real, nada impede de usar o comando "TC" no servidor. Vale lembrar que o servidor deve setar o cabeçalho IP e , se usado, o TCP (raramente usado) para que os roteadores (no caso do IP) e os clientes (no caso do TCP) possam permitir um processamento mais rápido de tais pacotes. Também, é importante lembrar que se pode usar o comando iptables nos roteadores para mudar o o cabeçalho IP e/ou TCP dos pacotes que passarem por eles, assim, colocando nos seus cabeçalhos que os pacotes devem ser priorizados etc.

ON-LINE = ON-DEMMAND

In the field of computer networking and other packet-switched telecommunication networks, the traffic engineering term quality of service (QoS) refers to resource reservation control mechanisms rather than the achieved service quality. Quality of service is the ability to provide different priority to different applications, users, or data flows, or to guarantee a certain level of performance to a data flow. For example, a required bit rate, delay, jitter, packet dropping probability and/or bit error rate may be guaranteed. Quality of service guarantees are important if the network capacity is insufficient, especially for real-time streaming multimedia applications such as voice over IP, online games and IP-TV….

Siglas, abreviações e significados

Divisões da qdisc

Como já foi exposto a qdisc é entendido como disciplina (algoritmo) de controle (enfileiramento) de tráfego. Assim, é a qdisc que define os vários tipos de disciplina (algoritmo) que enfileirarão os pacotes. Dentre os vários tipos de qdiscs, eles se dividem em classless e classful:

O comando para verificar que tipo de qdisc as interfaces de rede estão usando é: "tc qdisc show" ou "tc qdisc show dev eth0"!

O comando para verificar que tipo de qdisc todas interfaces de rede estão usando, não importando se existe algum tipo de configurada, é: "ip link list | grep -i mtu"!

Classless

É um conjunto de qdiscs (disciplinas/tipos de enfileiramento) que aceita longos dados, tento somente a possibilidade de reagendá-los, atrasá-los ou descartá-los. Isto pode ser usado para formar o tráfego para uma interface de rede inteira (qdisc), sem subdivisões internas (classes). É fundamental o entendimento das diciplinas classless antes de estudar as do classful. A disciplina mais mundialmente usada e que geralmente é configurada por padrão nas interfaces de rede é a qdisc chamada pfifo_fast. Contudo, todas têm suas vantagens e fraquezas. As disciplinas classless se dividem em PFIFO, BFIFO, PFIFO Fast e TBF:

 
 




ETI - Especialista em Tecnologia
da Informação