Mecanismos de QoS em Linux DiffServ (Marcação e Policiamento) Este roteiro descreve um cenário prático que ilustra o funcionamento dos mecanismos de policiamento e marcação utilizados pela metodologia Diffserv. O aluno deverá executar esse roteiro e enviar através do Eureka o relatório em formato texto, descrito na última página dessa apostila.
(apresentação da política) rate 128kbps rate 128kbps download balde 1 128 Kbytes excedente balde 1 128 Kbytes excedente X drop AF11 AF12 rate 64kbps rate 64kbps upload balde 1 64 Kbytes excedente balde 1 64 Kbytes excedente X drop AF11 AF12 Nesta prática, será implementado a política ilustrada pela figura. Um provedor de acesso a Internet (ISP) vendeu para um empresa um enlace com as seguintes características: a) Capacidade de download: garantido até 128kbps (no tc, kpbs significa "kbytes por segundo" e kbit significa "kbits por segundo"), com possibilidade de transmissão até 256kbps em horários de pouco congestionamento. Existe uma tolerância para rajadas definidas por um balde de fichas de 128kbytes. b) Capacidade de download: garantido até 64kbps (kbytes por segundo) com possibilidade de transmissão até 128kbps em horários de pouco congestionamento. Existe uma tolerância para rajadas definidas por um balde de fichas de 64kbytes. Internamente, o ISP implementa a política utilizando códigos de AF com duas cores. Por exemplo, o garantido é marcado como AF11 e o excedente é marcado como AF12. Em caso de congestionamento, os roteadores de núcleo do ISP descartam o AF12 de maneira a preservar o AF11. Em um cenário genérico onde um enlace pode ser usado para transmitir ou receber dados de qualquer outro host na Internet, o controle de upload e download em um domínio Diffserv é complicado. De acordo com a filosofia Diffserv, o controle de banda é feito sempre nas bordas. O controle da taxa de upload é simples, pois basta criar uma política no roteador de borda mais próximo do usuário. O controle do download é complexo, pois o certo seria controlar o recebido assim que ele entra na rede, o que implica em distribuir a política por todos os possíveis pontos de entrada de no backbone. Se o controle da taxa de download for feito unicamente no roteador de borda mais próximo do usuário, o em excesso pode atravessar vários roteadores do backbone antes de ser descartado, implicando em um grande desperdício de recursos. Mesmo assim, muitos provedores implementam esse controle apenas próximo ao usuário, e confiam que o descarte dos pacotes em excesso faça com que as aplicações TCP do transmissor diminuam automaticamente suas taxas para evitar perdas. O UDP continua sendo um problema para os ISP.
(Passos 1: configuração de G2) A 10.13.14.2 (eth1) 10.13.14.1 (eth1) G1 11.13.14.2 (eth2) Roteadores de Núcleo 11.13.14.1 (eth2) G2 20.13.14.1 (eth0) 20.0.0.1 espec até 64kbps AF11 de 64 a 128kbps AF12 até 128kbps AF11 de 128 a 256kbps AF12 Domínio DiffServ A figura ilustra como será feito o cenário para essa prática. Serão criadas três máquinas virtuais: A, G1 e G2. A VM A ilustra um computador da rede que comprou o enlace do ISP. As VMs G1 e G2 são os roteadores de borda do domínio Diffserv do ISP. A espec fará o papel de recursos disponíveis na Internet. Para possibilitar que o host A envie pacotes para espec, o roteador G2 irá implementar uma política de SNAT. O policiamento e a marcação do do usuário será feito por ambos os roteadores. G1 irá controlar o de upload e G2 irá controlar o de download. A marcação feita por G1 será observada em G2 e a marcação feita por G2 será observada em G1, de forma que será necessário instalar o tcpdump em ambas as VMs que fazem papel de roteador. 1) Preparação do roteador G2: Todos os exemplos a seguir supõe que seu código de estudante é (101) 11 12 13 14 X. Tome cuidado para troca as ocorrências X.13.14.X pelo seu próprio código. 1a) Na ESPEC: Crie uma pasta no seu diretório e inicialize uma VM com o nome G2. > mkdir qos > cd qos > linux32.redes G1 1b) Em G2: Atribua os endereços IP, habilite o roteamento e crie a política de NAT. > ifconfig eth0 20.13.14.1/8 > ifconfig eth2 11.13.14.1/24 > sysctl net.ipv4.ip_forward=1 > route add -net 10.13.14.0/24 gw 11.13.14.2 > wget 20.0.0.1/~jamhour/pacotes/iptables.tar.gz > tar xzf iptables<tab> > cd iptables > rpm ivh iptables<tab> > iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to 20.13.14.1 > wget 20.0.0.1/~jamhour/pacotes/vlan.tar.gz > tar -xzf vla<tab> > rpm -ivh lib<tab> > rpm -ivh tcp<tab>
(Passos 2 e 3: configuração de G1 e A) A 10.13.14.2 (eth1) 10.13.14.1 (eth1) G1 11.13.14.2 (eth2) Roteadores de Núcleo 11.13.14.1 (eth2) G2 20.13.14.1 (eth0) 20.0.0.1 espec até 64kbps AF11 de 64 a 128kbps AF12 até 128kbps AF11 de 128 a 256kbps AF12 Domínio DiffServ 2) Preparação do roteador G1: Todos os comandos a seguir supõe que seu código de estudante é (101) 11 12 13 14 X. Tome cuidado para troca as ocorrências X.13.14.X pelo seu próprio código. 2a) Na ESPEC: Crie uma pasta no seu diretório e inicialize uma VM com o nome G1. > mkdir qos > cd qos > linux32.redes G1 2b) Em G1: Atribua os endereços IP, habilite o roteamento e crie a política de NAT. > ifconfig eth2 11.13.14.2/24 > ifconfig eth1 10.13.14.1/24 > sysctl net.ipv4.ip_forward=1 > route add default gw 11.13.14.1 > wget 20.0.0.1/~jamhour/pacotes/vlan.tar.gz > tar -xzf vla<tab> > rpm -ivh lib<tab> > rpm -ivh tcp<tab> 3) Preparação do host A: Todos os comandos a seguir supõe que seu código de estudante é (101) 11 12 13 14 X. Tome cuidado para troca as ocorrências X.13.14.X pelo seu próprio código. 3a) Na ESPEC: Na mesma pasta que você criou G, inicialize uma máquina virtual com o nome A. > linux32.redes A 3b) Em A: Atribua o endereço IP e crie a rota default para o host. > ifconfig eth1 10.13.14.2/24 > route add default gw 10.13.14.1
(Passos 4: criação da política de QoS para G1 e G2) #!/bin/bash -x #Política de UPLOAD em G1 tc qdisc del dev eth2 root tc qdisc add dev eth2 handle 1:0 root dsmark indices 4 tc class change dev eth2 parent 1:0 classid 1:1 dsmark mask 0x0 value 0x28 tc class change dev eth2 parent 1:0 classid 1:2 dsmark mask 0x0 value 0x30 tc filter add dev eth2 parent 1:0 protocol ip prio 1 u32 match ip src 10.13.14.2/32 \ police rate 64kbps burst 64k continue classid 1:1 tc filter add dev eth2 parent 1:0 protocol ip prio 2 u32 match ip src 10.13.14.2/32 \ police rate 64kbps burst 64k drop classid 1:2 #!/bin/bash -x #Política de DOWNLOAD em G2 tc qdisc del dev eth2 root tc qdisc add dev eth2 handle 1:0 root dsmark indices 4 tc class change dev eth2 parent 1:0 classid 1:1 dsmark mask 0x0 value 0x28 tc class change dev eth2 parent 1:0 classid 1:2 dsmark mask 0x0 value 0x30 tc filter add dev eth2 parent 1:0 protocol ip prio 1 u32 match ip dst 10.13.14.2/32 \ police rate 128kbps burst 128k continue classid 1:1 tc filter add dev eth2 parent 1:0 protocol ip prio 2 u32 match ip dst 10.13.14.2/32 \ police rate 128kbps burst 128k drop classid 1:2 4) Criação das políticas de QoS : Observe que a interface eth2 do roteador G1 controla o de upload feito pelos host A e a interface eth2 de G2 controla o de download. O script para configuração de ambos os roteadores é mostrado na figura. O primeiro comando do script limpa configurações anteriores. Por isso, não estranhe ao receber uma mensagem de no such file or directory quando executar o script pela primeira vez. IMPORTANTE: Muito cuidado com a barra invertida "\" que aparece no final das linhas 7 e 9 de ambos os scripts. Essa barra é utilizada para fazer uma quebra de linha no script (a linha após a "\" que começa com police rate é uma continuação da linha anterior). Você pode eliminar a "\" e escrever o comando tc filter em uma única linha. Se desejar manter a barra, você deve lembrar que NÃO PODE HAVER ESPAÇO APÓS A "\". Observe que o parâmetro -x na primeira linha do script fará com todos os comandos sejam impressos no seu terminal com o respectivo erro (se houver). Dessa forma, é fácil localizar qual foi a linha que causou problema. Se houver um espaço após a "\" você vai ver que as duas linhas não serão fundidas em um único comando. 4a) Na VM G1: Utilizando o vi, crie o script conforme indicado na figura. > vi g1.sh... <INS> digitar o script de G1 <ESC>:wq > chmod +x g1.sh >./g1.sh 4a) Na VM G2: Utilizando o vi, crie o script conforme indicado na figura. > vi g2.sh... <INS> digitar o script de G2 <ESC>:wq > chmod +x g2.sh >./g2.sh
(Passo 5: Teste de DOWNLOAD) A 10.13.14.2 (eth1) 10.13.14.1 (eth1) G1 11.13.14.2 (eth2) Roteadores de Núcleo 11.13.14.1 (eth2) G2 20.13.14.1 (eth0) 20.0.0.1 espec wget www.dns.tar.gz até 64kbps AF11 de 64 a 128kbps AF12 até 128kbps AF11 de 128 a 256kbps AF12 Domínio DiffServ 5) Avaliação da velocidade de download e efeito de marcação 5.a) Em G1: Configure o TCP dump para capturar pacotes marcados como 0x28 (AF11). No tcpdump a marcação irá aparecer no campo TOS que é equivalente ao byte DS. O campo TOS é identificado pelo tcpdump como sendo o filtro ip[1]. O flag -vv solicita que vários detalhes sejam mostrados, inclusive o campo TOS. O filtro ficará ativo após esse comando. > tcpdump -i eth2 -vv dst 10.13.14.2 and ip[1]==0x28 5.a) Na VM A: Efetue o download de um arquivo a partir da espec e anote a velocidade média obtida. Esse valor será solicitado no relatório da prática. > wget 20.0.0.1/~jamhour/pacotes/dns.tar.gz 5.c) Em G1: Verifique no tcpdump que vários pacotes apareceram com a marcação 0x28. Encerre o tcpdump com <CTRL>+C e anote a quantidade de pacotes capturada pelo filtro (packets received by filter). Esse valor será solicitado no relatório da prática como a "quantidade de pacotes marcados como AF11 no download). Após isso, reative novamente o filtro, mas agora para capturar pacotes marcados como AF12 (isto é, TOS=0x30). > tcpdump -i eth2 -vv dst 10.13.14.2 and ip[1]==0x30 5.d) Na VM A: Repita o download > wget 20.0.0.1/~jamhour/pacotes/dns.tar.gz 5.e) Em G1: Verifique no tcpdump que vários pacotes apareceram com a marcação 0x30. Encerre o tcpdump com <CTRL>+C e anote a quantidade de pacotes capturada pelo filtro (packets received by filter). Esse valor será solicitado no relatório da prática como "quantidade de pacotes marcados como AF12 no download".
(Passo 6: Teste de UPLOAD) A 10.13.14.2 (eth1) 10.13.14.1 (eth1) G1 11.13.14.2 (eth2) Roteadores de Núcleo 11.13.14.1 (eth2) G2 20.13.14.1 (eth0) 20.0.0.1 espec scp www.dns.tar.gz até 64kbps AF11 de 64 a 128kbps AF12 até 128kbps AF11 de 128 a 256kbps AF12 Domínio DiffServ 6) Avaliação da velocidade de upload e efeito de marcação 6.a) Em G2: Configure o TCP dump para capturar pacotes marcados como 0x28 (AF11). No tcpdump a marcação irá aparecer no campo TOS que é equivalente ao byte DS. O campo TOS é identificado pelo tcpdump como sendo o filtro ip[1]. O flag -vv solicita que vários detalhes sejam mostrados, inclusive o campo TOS. O filtro ficará ativo após esse comando. > tcpdump -i eth2 -vv src 10.13.14.2 and ip[1]==0x28 6.a) Na VM A: Efetue o upload de um arquivo a partir da espec e anote a velocidade média obtida. Esse valor será solicitado no relatório da prática. > scp dns.tar.gz seulogin@20.0.0.1:. 6.c) Em G2: Verifique no tcpdump que vários pacotes apareceram com a marcação 0x28. Encerre o tcpdump com <CTRL>+C e anote a quantidade de pacotes capturada pelo filtro (packets received by filter). Esse valor será solicitado no relatório da prática como "quantidade de pacotes marcados como AF11 no upload". Esse valor será solicitado no relatório da prática. Após isso, reative novamente o filtro, mas agora para capturar pacotes marcados como AF12 (isto é, TOS=0x30). > tcpdump -i eth2 -vv src 10.13.14.2 and ip[1]==0x30 6.d) Na VM A: Repita o upload > scp dns.tar.gz seulogin@20.0.0.1:. 6.e) Em G2: Verifique no tcpdump que vários pacotes apareceram com a marcação 0x30. Encerre o tcpdump com <CTRL>+C e anote a quantidade de pacotes capturada pelo filtro (packets received by filter). Esse valor será solicitado no relatório da prática como "quantidade de pacotes marcados como AF12 no upload".
Relatório da Prática Crie um arquivo denominado RelatorioPraticaDiffServ.txt com as seguintes informações: A) Velocidade média de download da espec para A B) Velocidade média de upload de A para espec C) Quantidade de pacotes marcados como AF11 e AF12 no download da espec para A D) Quantidade de pacotes marcados como AF11 e AF12 no upload de A para espec Crie um arquivo denominado RelatorioPraticaDiffServ.txt com as seguintes informações: A) Velocidade média de download da espec para A. Esse resultado foi obtido no passo 5.b do roteiro. B) Velocidade média de upload de A para espec. Esse resultado foi obtido no passo 6.b do roteiro. C) Quantidade de pacotes marcados como AF11 e AF12 no download da espec para A. A quantidade de pacotes marcados como AF11 foi obtida no passo 5c, e a quantidade marcada como AF12 no passo 5e. D) Quantidade de pacotes marcados como AF11 e AF12 no upload de A para espec. A quantidade de pacotes marcados como AF11 foi obtida no passo 6c, e a quantidade marcada como AF12 no passo 6e.