QoS e serviços diferenciados usando Linux

679 views
544 views

Published on

Esta apresentação foi realizada no CONISLI (Congresso Internacional de Software Livre) realizado no Anhembi entre os dias 10 e 11 de Novembro de 2006.
Esta palestra apresenta como QoS (Quality of Service) é implementado no Linux (na época, no Kernel 2.4). Apresento também conceitos sobre redes, roteamento e tratamento de pacotes, assim como exemplos de implementação de QoS usando Advanced Routing e Traffic Control.

Published in: Technology, Business
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
679
On SlideShare
0
From Embeds
0
Number of Embeds
14
Actions
Shares
0
Downloads
12
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

QoS e serviços diferenciados usando Linux

  1. 1. QoS e Serviços diferenciados usando Linux Juvenal A. Silva Jr. [email_address] http://www.v2-home.com.br
  2. 2. O que é roteamento <ul><ul><li>Aplicação </li></ul></ul><ul><ul><ul><li>O roteamento orienta o encaminhamento, ou seja, a transferencia de pacotes endereçados para outras redes, usando para isso as tabelas de roteamento. </li></ul></ul></ul><ul><ul><li>Protocolos </li></ul></ul><ul><ul><ul><li>As tabelas de roteamento são estáticas ou dinamicas, sendo as dinamicas geradas por protocolos de busca como IGRP, EIGRP, OSPF, RIP, EGP e BGP principalmente. </li></ul></ul></ul><ul><ul><li>Objetivo </li></ul></ul><ul><ul><ul><li>Conectar redes distintas e permitir a troca de pacotes entre elas. </li></ul></ul></ul>
  3. 3. Roteadores de Fronteira <ul><ul><li>Os Roteadores de fronteira são responsáveis por todo o tráfego entre nosso domínio (nossa rede interna) e redes externas, sendo a principal porta de acesso às redes externas. </li></ul></ul><ul><ul><ul><li>Podem ser exemplificados como modems ADSL, cable modems, conectores Frame-Relay, Linhas Privadas, entre outros, e são responsáveis pela nossa conectividade exterior. </li></ul></ul></ul><ul><ul><li>Fluxos de entrada </li></ul></ul><ul><ul><ul><li>São todas as conexões externas (de fora do nosso domínio) que chegam ao nosso roteador. </li></ul></ul></ul><ul><ul><li>Fluxos de saída </li></ul></ul><ul><ul><ul><li>São todas as conexões provenientes de nossa rede interna, que são enviadas para redes externas (fora do nosso domínio). </li></ul></ul></ul>
  4. 4. Fluxo de conexões <ul><ul><li>Classificando </li></ul></ul><ul><ul><ul><li>Várias conexões externas podem ser encaixadas em uma classe e agrupadas. </li></ul></ul></ul><ul><ul><li>Gerenciando </li></ul></ul><ul><ul><ul><li>As classes (fluxos de conexões agrupadas) são mais facilmente gerenciáveis. </li></ul></ul></ul><ul><ul><li>Priorizando </li></ul></ul><ul><ul><ul><li>Informamos como cada uma das classes deve ser tratada pelo roteador. </li></ul></ul></ul>
  5. 5. Custo do Link <ul><ul><li>Questões cruciais para dimensionamento do link </li></ul></ul><ul><ul><ul><li>Banda insuficiente para utilização normal </li></ul></ul></ul><ul><ul><ul><li>Congestionamentos constantes no link </li></ul></ul></ul><ul><ul><ul><li>Má utilização da banda do link </li></ul></ul></ul><ul><ul><ul><li>Gargalos durante o dia nos horários de maior utilização </li></ul></ul></ul><ul><ul><ul><li>Aplicativos não prioritários que “roubam” banda de comunicação </li></ul></ul></ul><ul><ul><ul><li>Devo aumentar a banda do Link? </li></ul></ul></ul>
  6. 6. Otimização do Link <ul><ul><li>Distribuir carga </li></ul></ul><ul><ul><ul><li>Dividir a banda do link de comunicação entre divisões ou departamentos </li></ul></ul></ul><ul><ul><ul><li>Dividir a banda do link de comunicação entre serviços </li></ul></ul></ul><ul><ul><li>Impor limites </li></ul></ul><ul><ul><ul><li>Forçar os limites estabelecidos para cada serviço ou divisão especificado na divisão do link </li></ul></ul></ul><ul><ul><li>Garantir Banda </li></ul></ul><ul><ul><ul><li>Garantir o minimo de banda do link para cada um dos serviços ou divisões especificadas </li></ul></ul></ul>
  7. 7. O que é QoS <ul><li>Segundo a Wikipedia: “QoS é a probabilidade de um pacote de comunicação atingir seu endereço de destino com sucesso dentro do período de latência desejado.” Sua utilização principal visa </li></ul><ul><ul><li>Garantir disponibilidade de um serviço dentro de padrões específicos, e </li></ul></ul><ul><ul><li>Garantir o nível de serviço acordado (SLA) entre as partes envolvidas. </li></ul></ul>
  8. 8. Proposta do IETF <ul><li>O IETF definiu os padrões para QoS nas seguintes RFCs </li></ul><ul><ul><li>RFC 2474 - Definition of the Differentiated Services Field (DS Field) in the IPv4 e IPv6 headers </li></ul></ul><ul><ul><li>RFC 2475 - An Architecture for Differentiated Services </li></ul></ul><ul><ul><li>RFC 2597 - Assured Forwarding PHB Group </li></ul></ul><ul><ul><li>RFC 2598 - An Expedited Forwarding PHB </li></ul></ul>
  9. 9. Formas de aplicação <ul><li>Paradigma do IETF para Serviços Diferenciados </li></ul><ul><ul><li>Classificação dos pacotes </li></ul></ul><ul><ul><li>Marcam-se os pacotes utilizando a métrica obtida na classificação </li></ul></ul><ul><ul><li>Limita-se ou descarta-se o pacote dependendo da métrica obtida na classificação </li></ul></ul>
  10. 10. Utilizando QoS com Linux <ul><li>Todos os kernels do Linux, a partir da série 2.4, e em especial da 2.4.20, já possuem suporte para QoS </li></ul><ul><ul><li>Anteriormente à série 2.4, não havia suporte oficial à Advanced Routing e Traffic Control </li></ul></ul><ul><ul><li>Na série 2.4 temos a inclusão oficial do AR e do TC, porém somente com as qdiscs classfull CBQ e PRIO </li></ul></ul><ul><ul><li>A partir da versão 2.4.20, incluíu-se a qdisc classfull HTB, mais precisa e fácil de configurar que a CBQ </li></ul></ul>
  11. 11. Linux Advanced Routing <ul><li>Modelos de tratamento do stack IP no kernel do Linux </li></ul><ul><ul><li>Modelo do stack IP para pacotes internos </li></ul></ul><ul><ul><li>Modelo do stack IP quando atuando como roteador </li></ul></ul>
  12. 12. Traffic Control <ul><li>Modelo simples de rede com Traffic Control no Linux </li></ul><ul><ul><li>O que é Traffic Control? </li></ul></ul><ul><ul><ul><li>É o controle da utilização da banda de comunicação </li></ul></ul></ul><ul><ul><li>Como funciona </li></ul></ul><ul><ul><ul><li>Limita-se a velocidade de saída dos pacotes na interface de rede </li></ul></ul></ul>
  13. 13. Traffic Control <ul><li>Modelo completo de rede com Traffic Control no Linux </li></ul><ul><ul><li>Em um roteador, multiplas interfaces recebem e enviam pacotes entre várias redes </li></ul></ul><ul><ul><li>Na entrada temos um controle pelo iptables </li></ul></ul><ul><ul><li>Na saída o controle é feito pelas disciplinas de enfileiramento </li></ul></ul>
  14. 14. QoS Extendida
  15. 15. Disciplinas de Filas <ul><li>Possuimos dois tipos de disciplinas, Classless e Classfull </li></ul><ul><ul><li>Disciplinas Classless </li></ul></ul><ul><ul><ul><li>pfifo – FIFO simples por pacotes </li></ul></ul></ul><ul><ul><ul><li>bfifo – FIFO simples por bytes </li></ul></ul></ul><ul><ul><ul><li>pfifo_fast – QDisc padrão para roteamento avançado </li></ul></ul></ul><ul><ul><ul><li>red – Random Early Detection </li></ul></ul></ul><ul><ul><ul><li>gred – Generalized red </li></ul></ul></ul><ul><ul><ul><li>sfq – Stochastic Fairness Queueing </li></ul></ul></ul><ul><ul><ul><li>tbf – Token Bucket Filter </li></ul></ul></ul><ul><ul><li>Disciplinas Classfull </li></ul></ul><ul><ul><ul><li>prio – Priority Classification </li></ul></ul></ul><ul><ul><ul><li>cbq – Class Based Queuing </li></ul></ul></ul><ul><ul><ul><li>htb – Hierarchy Token Bucket </li></ul></ul></ul>
  16. 16. Disciplinas CBQ e HTB <ul><li>Distribuição de banda usando CBQ ou HTB </li></ul><ul><ul><li>Compartilhamento plano do link </li></ul></ul><ul><ul><li>Modelo Flat Link Sharing (compartilhamento plano)‏ </li></ul></ul>
  17. 17. Disciplinas CBQ e HTB <ul><li>Compartilhamento hierarquico do link </li></ul><ul><ul><li>Hierarchical Link Sharing (compartilhamento hierarquico)‏ </li></ul></ul><ul><ul><li>Distribuição do link entre vários níveis </li></ul></ul>
  18. 18. Exemplo de Implantação <ul><li>Exemplo de implantação </li></ul><ul><ul><li>Para implementar o compartilhamento hierarquico apresentado utilizando HTB devemos: </li></ul></ul><ul><ul><ul><li>Ativar a qdisc HTB na interface eth0 # tc qdisc add dev eth0 root handle 1:0 htb </li></ul></ul></ul><ul><ul><ul><li>Ativar a primeira classe htb limitada a 2048 kbit de banda # tc class add dev eth0 parent 1:0 classid 1:1 htb rate 2048kbit </li></ul></ul></ul><ul><ul><ul><li>Ativar as subclasses para os links Ag 1, Ag 2 e Ag 3 com limites de 716 kbit, 820 kbit e 512 kbit respectivamente # tc class add dev eth0 parent 1:1 classid 1:2 htb rate 716kbit ceil 716kbit # tc class add dev eth0 parent 1:1 classid 1:3 htb rate 820kbit ceil 820kbit # tc class add dev eth0 parent 1:1 classid 1:4 htb rate 512kbit ceil 512kbit </li></ul></ul></ul><ul><ul><li>A seguir definiremos cada classid (1:2, 1:3 e 1:4) separadamente </li></ul></ul>
  19. 19. Exemplo de Implantação <ul><ul><li>Aqui definiremos a divisão da classid 1:2 </li></ul></ul><ul><ul><ul><li>Para os limites da classid 1:2 # tc class add dev eth0 parent 1:2 classid 1:21 htb rate 40kbit ceil 716kbit # tc class add dev eth0 parent 1:2 classid 1:22 htb rate 512kbit ceil 716kbit # tc class add dev eth0 parent 1:2 classid 1:23 htb rate 164kbit ceil 716kbit </li></ul></ul></ul><ul><ul><ul><li>Adicionando as queue disciplines para cada uma das classes # tc qdisc add dev eth0 parent 1:21 handle 210: pfifo_fast # tc qdisc add dev eth0 parent 1:22 handle 220: pfifo_fast # tc qdisc add dev eth0 parent 1:23 handle 230: pfifo_fast </li></ul></ul></ul>
  20. 20. Exemplo de Implantação <ul><ul><li>Aqui definiremos a divisão da classid 1:3 </li></ul></ul><ul><ul><ul><li>Para os limites da classid 1:3 # tc class add dev eth0 parent 1:3 classid 1:31 htb rate 40kbit ceil 820kbit # tc class add dev eth0 parent 1:3 classid 1:32 htb rate 616kbit ceil 820kbit # tc class add dev eth0 parent 1:3 classid 1:33 htb rate 164kbit ceil 820kbit </li></ul></ul></ul><ul><ul><ul><li>Adicionando as queue disciplines para cada uma das classes # tc qdisc add dev eth0 parent 1:31 handle 310: pfifo_fast # tc qdisc add dev eth0 parent 1:32 handle 320: pfifo_fast # tc qdisc add dev eth0 parent 1:33 handle 330: pfifo_fast </li></ul></ul></ul>
  21. 21. Exemplo de Implantação <ul><ul><li>Aqui definiremos a divisão da classid 1:4 </li></ul></ul><ul><ul><ul><li>Para os limites da classid 1:4 # tc class add dev eth0 parent 1:4 classid 1:41 htb rate 40kbit ceil 512kbit # tc class add dev eth0 parent 1:4 classid 1:42 htb rate 308kbit ceil 512kbit # tc class add dev eth0 parent 1:4 classid 1:43 htb rate 164kbit ceil 512kbit </li></ul></ul></ul><ul><ul><ul><li>Adicionando as queue disciplines para cada uma das classes # tc qdisc add dev eth0 parent 1:41 handle 410: pfifo_fast # tc qdisc add dev eth0 parent 1:42 handle 420: pfifo_fast # tc qdisc add dev eth0 parent 1:43 handle 430: pfifo_fast </li></ul></ul></ul>
  22. 22. Exemplo de Implantação <ul><ul><li>Aqui definiremos os filtros para o classificador </li></ul></ul><ul><ul><ul><li>Filtros por endereço e porta de conexão para classid 1:2 # tc filter add dev eth0 parent 1:0 protocol ip prio 1 u32 match ip dst 172.16.1/24 match ip sport 22 0xfff flowid 1:21 # tc filter add dev eth0 parent 1:0 protocol ip prio 1 u32 match ip dst 172.16.1/24 match ip sport 80 0xfff flowid 1:22 # tc filter add dev eth0 parent 1:0 protocol ip prio 1 u32 match ip dst 172.16.1/24 match ip sport 25 0xfff flowid 1:23 </li></ul></ul></ul>
  23. 23. Exemplo de Implantação <ul><ul><li>Aqui definiremos os filtros para o classificador </li></ul></ul><ul><ul><ul><li>Filtros por endereço e porta de conexão para classid 1:3 # tc filter add dev eth0 parent 1:0 protocol ip prio 1 u32 match ip dst 172.16.2/24 match ip sport 22 0xfff flowid 1:31 # tc filter add dev eth0 parent 1:0 protocol ip prio 1 u32 match ip dst 172.16.2/24 match ip sport 80 0xfff flowid 1:32 # tc filter add dev eth0 parent 1:0 protocol ip prio 1 u32 match ip dst 172.16.2/24 match ip sport 5060 0xfff flowid 1:33 </li></ul></ul></ul>
  24. 24. Exemplo de Implantação <ul><ul><li>Aqui definiremos os filtros para o classificador </li></ul></ul><ul><ul><ul><li>Filtros por endereço e porta de conexão para classid 1:4 # tc filter add dev eth0 parent 1:0 protocol ip prio 1 u32 match ip dst 172.16.3/24 match ip sport 25 0xfff flowid 1:31 # tc filter add dev eth0 parent 1:0 protocol ip prio 1 u32 match ip dst 172.16.3/24 match ip sport 80 0xfff flowid 1:32 # tc filter add dev eth0 parent 1:0 protocol ip prio 1 u32 match ip dst 172.16.3/24 match ip sport 5060 0xfff flowid 1:33 </li></ul></ul></ul>
  25. 25. Exemplo de Implantação <ul><ul><li>Modelo utilizando HTB para o Link Hierarquico (resultado final)‏ </li></ul></ul>
  26. 26. Questões <ul><ul><li>Mudando Ag 1 e Ag 3 para 30%, o que seria necessário mudar? </li></ul></ul><ul><ul><li>Por que o &quot;shapper&quot; está rodando na interface interna e não na externa? </li></ul></ul>
  27. 27. Perguntas

×