Controle de Tráfego e QoS
Tudo na vida surge quando nós nos defrontamos com um problema real a resolver.
Deparei-me com o seguinte problema no meu acesso a Internet banda larga caseiro: Eu estava falando na minha linha GVT/VONO quando resolvi baixar o arquivo de 200MB da Internet. O que foi que aconteceu quando o arquivo começou a ser baixado?
Isso mesmo que você imaginou. O tráfego do download saturou completamente o meu link ADSL Telefônica atingindo o topo da banda fazendo com que faltasse banda para o meu tráfego de voz oriunda da minha ligação IP.
Daí apareceu a necessidade de um mecanismo que pudesse controlar a largura de banda do meu acesso Internet em função do tipo de porta e também do protocolo UDP e TCP no meu roteador Linux.
O jeito foi pesquisar uma solução pra isso na Internet.
Foi assim que cheguei ao HOWTO “Linux Advanced Routing & Traffic Control” e ao artigo do Brown Traffic Control, contudo eles estavam em inglês, tentei ver se o encontrava em português, mas não encontrei. Foi então que resolvi dar a minha contribuição à comunidade Linux Brasil fazendo uma tradução da parte que me interessava dos mesmos, pensando justamente no fato que muitas pessoas como eu, já tiveram se deparado com esse problema.
Esse howto parece ser escrito quando das primeiras versões do Kernel Linux 2.2.x e parece também que sofreu poucas atualizações. Contudo, ele ainda serve como base para aqueles que ainda não tem um conhecimento sólido de controle de tráfego na rede IP.
Ele serve, portanto, como ponta-pé inicial na conquista desse conhecimento. No entanto, como um primeiro contacto sobre a disciplina, eu recomendo primeiramente a leitura do artigo do Brown, pois ele aborda de forma didática os conceitos e definições do controle de tráfego.
A controle de tráfego é a disciplina intimamente relacionada com a garantia de qualidade de serviço (QoS) no mundo da pilha TCP/IP. Portanto, é um tema de suma importância atualmente no mundo Internet.
A tradução aqui só contempla as partes dos dois documentos que aborda o controle de tráfego, no entanto, o primeiro howto completo engloba também roteamento avançado e dinâmico.
Gostaria de solicitar aos amigos leitores a gentileza de reportar equívocos eventuais encontrados ao longo dos capítulos justamente para torná-lo melhor. Favor, sintam-se a vontade para fazê-los, o importante é que ele seja melhorado constantemente.
Os capítulos do HowTo que foram traduzidos e que estão presentes aqui, são:
9. Disciplinas Enfileiramento para Gerenciamento de Banda
9.1. Filas e Disciplinas de Enfileiramento explicadas
9.2. Disciplinas de Enfileiramento Classless Simples
9.2.1. pfifo_fast
9.2.2. Filtro Token Bucket
9.2.3. Stochastic Fairness Queueing
9.3. Conselho para qual fila usar quando
9.4. Terminologia
9.5. Disciplinas de Enfileiramento Classful
9.5.1. Fluxo dentro de qdiscs & classes classful
9.5.2. A família qdisc: roots, handles, siblings e parents
9.5.3. A qdisc PRIO
9.5.4. A famosa qdisc CBQ
9.5.5. Hierarchical Token Bucket
9.6. Classificação de pacotes com filtros
9.6.1. Alguns exemplos simples de filtragem
9.6.2. Todos os comandos de filtragem que você normalmente precisará
9.7. O Dispositivo de Enfileiramento Intermediário (IMQ)
9.7.1. Configuração Exemplo
10. Compartilhamento de Carga sobre Múltiplas interfaces
10.1. Advertências
10.2. Outras possibilidades
11. Netfilter & iproute - marcação de pacotes
12. Filtros Avançado para (re-)Classificação de pacotes
12.1. O Classificador u32
12.1.1. Seletor U32
12.1.2. Seletores Gerais
12.1.3. Seletores Específicos
12.2. O Classificador route
12.3. Filtros de Policiamento
12.3.1. Formas de policiar
12.3.2. Ações Overlimit
12.3.3. Exemplos
12.4. Colocando filtros em Hash para filtragem pesada muito veloz
12.5. Filtragem de Tráfego IPv6
12.5.1. Como conseguir que os 'tc filter's no IPv6 não funcionem?
12.5.2. Marcando pacotes IPv6 usando o ip6tables
12.5.3. Usando o seletor u32 para bater com pacote IPv6
13. Parâmetros de rede no Kernel
13.1. Filtragem de Caminho Reverso
13.2. Parâmetros Obscuros
13.2.1. ipv4 Genérico
13.2.2. Parâmetros Por Dispositivo
13.2.3. Policiamento de Vizinhança
13.2.4. Parâmetros de Roteamento
14. Disciplinas Enfileiramento Avançadas & Menos Comum
14.1. bfifo/pfifo
14.1.1. Parâmetros & Uso
14.2. Algoritmo Clark-Shenker-Zhang (CSZ)
14.3. DSMARK
14.3.1. Introdução
14.3.2. Com que Dsmark está relacionado?
14.3.3. Orientações para Serviços Diferenciados
14.3.4. Trabalhando com Dsmark
14.3.5. Como Funciona SCH_DSMARK
14.3.6. Filtro TC_INDEX
14.4. Ingress qdisc
14.4.1. Parâmetros & Uso
14.5. Random Early Detection (RED)
14.6. Random Early Detection Genérico
14.7. Emulação VC/ATM
14.8. Weighted Round Robin (WRR)
15. Cookbook (Receitas de Bolo)
15.1. Rodando múltiplos sites com diferentes SLAs
15.2. Protegendo seu host de SYN floods
15.3. Limitação de Taxa ICMP pra evitar dDoS
15.4. Priorizando tráfego interativo
15.5. Fazendo cache-web Transparente usando o netfilter, iproute2, ipchains e squid
15.5.1. Diagrama de Fluxo de Tráfego após implementação
15.6. Contornando os problemas ‘Path MTU Discovery’ com ajustes por rota MTU
15.6.1. Solução
15.7. Contornando os problemas ‘Path MTU Discovery’ com MSS Clamping (para ADSL, cable, e usuários PPPoE & PPtP)
15.8. O Mais Moderno Condicionador de Tráfego: Low Latency, Fast Up & Downloads
15.8.1. Por que isso não funciona bem por padrão
15.8.2. O script real (CBQ)
15.8.3. O script real (HTB)
15.9. Limitando Taxa a único host ou máscara de rede
15.10. Exemplo de uma solução full nat com QoS
15.10.1. Comecemos otimizando aquela banda escassa
15.10.2. Classificação de pacotes
15.10.3. Melhorando nossa instalação
15.10.4. Fazendo tudo subir no boot
Artigo Controle de Tráfego por Martin A. Brown.
Autores Originais dos textos:
Bert Hubert (Netherlabs BV)
bert.hubert@netherlabs.nl
Thomas Graf (Autor de Seção)
tgraf@suug.ch
Gregory Maxwell (Autor de Seção)
greg@linuxpower.cx
Remco van Mook (Autor de Seção)
remco@virtu.nl
Martijn van Oosterhout (Autor de Seção)
kleptog@cupid.suninternet.com
Paul B Schroeder (Autor de Seção)
paulsch@us.ibm.com
Jasper Spaans (Autor de Seção)
jasper@spaans.ds9a.nl
Pedro Larroy (Autor de Seção)
piotr@member.fsf.org
Bert Hubert (Netherlabs BV)
bert.hubert@netherlabs.nl
Thomas Graf (Autor de Seção)
tgraf@suug.ch
Gregory Maxwell (Autor de Seção)
greg@linuxpower.cx
Remco van Mook (Autor de Seção)
remco@virtu.nl
Martijn van Oosterhout (Autor de Seção)
kleptog@cupid.suninternet.com
Paul B Schroeder (Autor de Seção)
paulsch@us.ibm.com
Jasper Spaans (Autor de Seção)
jasper@spaans.ds9a.nl
Pedro Larroy (Autor de Seção)
piotr@member.fsf.org
Nenhum comentário:
Postar um comentário