QoS e Serviços diferenciados usando Linux Juvenal A. Silva Jr. [email_address] http://www.v2-home.com.br
O que é roteamento Aplicação O roteamento orienta o encaminhamento, ou seja, a transferencia de pacotes endereçados para outras redes, usando para isso as tabelas de roteamento. Protocolos 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. Objetivo Conectar redes distintas e permitir a troca de pacotes entre elas.
Roteadores de Fronteira 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. Podem ser exemplificados como modems ADSL, cable modems, conectores Frame-Relay, Linhas Privadas, entre outros, e são responsáveis pela nossa conectividade exterior. Fluxos de entrada São todas as conexões externas (de fora do nosso domínio) que chegam ao nosso roteador. Fluxos de saída São todas as conexões provenientes de nossa rede interna, que são enviadas para redes externas (fora do nosso domínio).
Fluxo de conexões Classificando Várias conexões externas podem ser encaixadas em uma classe e agrupadas. Gerenciando As classes (fluxos de conexões agrupadas) são mais facilmente gerenciáveis. Priorizando Informamos como cada uma das classes deve ser tratada pelo roteador.
Custo do Link Questões cruciais para dimensionamento do link Banda insuficiente para utilização normal Congestionamentos constantes no link Má utilização da banda do link Gargalos durante o dia nos horários de maior utilização Aplicativos não prioritários que “roubam” banda de comunicação Devo aumentar a banda do Link?
Otimização do Link Distribuir carga Dividir a banda do link de comunicação entre divisões ou departamentos Dividir a banda do link de comunicação entre serviços  Impor limites Forçar os limites estabelecidos para cada serviço ou divisão especificado na divisão do link Garantir Banda Garantir o minimo de banda do link para cada um dos serviços ou divisões especificadas
O que é QoS 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 Garantir disponibilidade de um serviço dentro de padrões específicos, e Garantir o nível de serviço acordado (SLA) entre as partes envolvidas.
Proposta do IETF O IETF definiu os padrões para QoS nas seguintes RFCs RFC 2474 - Definition of the Differentiated Services Field (DS Field) in the IPv4 e IPv6 headers RFC 2475 - An Architecture for Differentiated Services RFC 2597 - Assured Forwarding PHB Group RFC 2598 - An Expedited Forwarding PHB
Formas de aplicação Paradigma do IETF para Serviços Diferenciados Classificação dos pacotes Marcam-se os pacotes utilizando a métrica obtida na classificação Limita-se ou descarta-se o pacote dependendo da métrica obtida na classificação
Utilizando QoS com Linux Todos os kernels do Linux, a partir da série 2.4, e em especial da 2.4.20, já possuem suporte para QoS Anteriormente à série 2.4, não havia suporte oficial à Advanced Routing e Traffic Control 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 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
Linux Advanced Routing Modelos de tratamento do stack IP no kernel do Linux Modelo do stack IP para pacotes internos Modelo do stack IP quando atuando como roteador
Traffic Control Modelo simples de rede com Traffic Control no Linux O que é Traffic Control? É o controle da utilização da banda de comunicação Como funciona Limita-se a velocidade de saída dos pacotes na interface de rede
Traffic Control Modelo completo de rede com Traffic Control no Linux Em um roteador, multiplas interfaces recebem e enviam pacotes entre várias redes Na entrada temos um controle pelo iptables Na saída o controle é feito pelas disciplinas de enfileiramento
QoS Extendida
Disciplinas de Filas Possuimos dois tipos de disciplinas, Classless e Classfull Disciplinas Classless pfifo – FIFO simples por pacotes bfifo – FIFO simples por bytes pfifo_fast – QDisc padrão para roteamento avançado red – Random Early Detection gred – Generalized red sfq – Stochastic Fairness Queueing tbf – Token Bucket Filter Disciplinas Classfull prio – Priority Classification cbq – Class Based Queuing htb – Hierarchy Token Bucket
Disciplinas CBQ e HTB Distribuição de banda usando CBQ ou HTB Compartilhamento plano do link Modelo Flat Link Sharing (compartilhamento plano)‏
Disciplinas CBQ e HTB Compartilhamento hierarquico do link Hierarchical Link Sharing (compartilhamento hierarquico)‏ Distribuição do link entre vários níveis
Exemplo de Implantação Exemplo de implantação Para implementar o compartilhamento hierarquico apresentado utilizando HTB devemos: Ativar a qdisc HTB na interface eth0 # tc qdisc add dev eth0 root handle 1:0 htb 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 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 A seguir definiremos cada classid (1:2, 1:3 e 1:4) separadamente
Exemplo de Implantação Aqui definiremos a divisão da classid 1:2 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 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
Exemplo de Implantação Aqui definiremos a divisão da classid 1:3 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 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
Exemplo de Implantação Aqui definiremos a divisão da classid 1:4 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 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
Exemplo de Implantação Aqui definiremos os filtros para o classificador 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
Exemplo de Implantação Aqui definiremos os filtros para o classificador 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
Exemplo de Implantação Aqui definiremos os filtros para o classificador 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
Exemplo de Implantação Modelo utilizando HTB para o Link Hierarquico (resultado final)‏
Questões Mudando Ag 1 e Ag 3 para 30%, o que seria necessário mudar? Por que o "shapper" está rodando na interface interna e não na externa?
Perguntas

QoS e serviços diferenciados usando Linux

  • 1.
    QoS e Serviçosdiferenciados usando Linux Juvenal A. Silva Jr. [email_address] http://www.v2-home.com.br
  • 2.
    O que éroteamento Aplicação O roteamento orienta o encaminhamento, ou seja, a transferencia de pacotes endereçados para outras redes, usando para isso as tabelas de roteamento. Protocolos 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. Objetivo Conectar redes distintas e permitir a troca de pacotes entre elas.
  • 3.
    Roteadores de FronteiraOs 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. Podem ser exemplificados como modems ADSL, cable modems, conectores Frame-Relay, Linhas Privadas, entre outros, e são responsáveis pela nossa conectividade exterior. Fluxos de entrada São todas as conexões externas (de fora do nosso domínio) que chegam ao nosso roteador. Fluxos de saída São todas as conexões provenientes de nossa rede interna, que são enviadas para redes externas (fora do nosso domínio).
  • 4.
    Fluxo de conexõesClassificando Várias conexões externas podem ser encaixadas em uma classe e agrupadas. Gerenciando As classes (fluxos de conexões agrupadas) são mais facilmente gerenciáveis. Priorizando Informamos como cada uma das classes deve ser tratada pelo roteador.
  • 5.
    Custo do LinkQuestões cruciais para dimensionamento do link Banda insuficiente para utilização normal Congestionamentos constantes no link Má utilização da banda do link Gargalos durante o dia nos horários de maior utilização Aplicativos não prioritários que “roubam” banda de comunicação Devo aumentar a banda do Link?
  • 6.
    Otimização do LinkDistribuir carga Dividir a banda do link de comunicação entre divisões ou departamentos Dividir a banda do link de comunicação entre serviços Impor limites Forçar os limites estabelecidos para cada serviço ou divisão especificado na divisão do link Garantir Banda Garantir o minimo de banda do link para cada um dos serviços ou divisões especificadas
  • 7.
    O que éQoS 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 Garantir disponibilidade de um serviço dentro de padrões específicos, e Garantir o nível de serviço acordado (SLA) entre as partes envolvidas.
  • 8.
    Proposta do IETFO IETF definiu os padrões para QoS nas seguintes RFCs RFC 2474 - Definition of the Differentiated Services Field (DS Field) in the IPv4 e IPv6 headers RFC 2475 - An Architecture for Differentiated Services RFC 2597 - Assured Forwarding PHB Group RFC 2598 - An Expedited Forwarding PHB
  • 9.
    Formas de aplicaçãoParadigma do IETF para Serviços Diferenciados Classificação dos pacotes Marcam-se os pacotes utilizando a métrica obtida na classificação Limita-se ou descarta-se o pacote dependendo da métrica obtida na classificação
  • 10.
    Utilizando QoS comLinux Todos os kernels do Linux, a partir da série 2.4, e em especial da 2.4.20, já possuem suporte para QoS Anteriormente à série 2.4, não havia suporte oficial à Advanced Routing e Traffic Control 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 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
  • 11.
    Linux Advanced RoutingModelos de tratamento do stack IP no kernel do Linux Modelo do stack IP para pacotes internos Modelo do stack IP quando atuando como roteador
  • 12.
    Traffic Control Modelosimples de rede com Traffic Control no Linux O que é Traffic Control? É o controle da utilização da banda de comunicação Como funciona Limita-se a velocidade de saída dos pacotes na interface de rede
  • 13.
    Traffic Control Modelocompleto de rede com Traffic Control no Linux Em um roteador, multiplas interfaces recebem e enviam pacotes entre várias redes Na entrada temos um controle pelo iptables Na saída o controle é feito pelas disciplinas de enfileiramento
  • 14.
  • 15.
    Disciplinas de FilasPossuimos dois tipos de disciplinas, Classless e Classfull Disciplinas Classless pfifo – FIFO simples por pacotes bfifo – FIFO simples por bytes pfifo_fast – QDisc padrão para roteamento avançado red – Random Early Detection gred – Generalized red sfq – Stochastic Fairness Queueing tbf – Token Bucket Filter Disciplinas Classfull prio – Priority Classification cbq – Class Based Queuing htb – Hierarchy Token Bucket
  • 16.
    Disciplinas CBQ eHTB Distribuição de banda usando CBQ ou HTB Compartilhamento plano do link Modelo Flat Link Sharing (compartilhamento plano)‏
  • 17.
    Disciplinas CBQ eHTB Compartilhamento hierarquico do link Hierarchical Link Sharing (compartilhamento hierarquico)‏ Distribuição do link entre vários níveis
  • 18.
    Exemplo de ImplantaçãoExemplo de implantação Para implementar o compartilhamento hierarquico apresentado utilizando HTB devemos: Ativar a qdisc HTB na interface eth0 # tc qdisc add dev eth0 root handle 1:0 htb 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 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 A seguir definiremos cada classid (1:2, 1:3 e 1:4) separadamente
  • 19.
    Exemplo de ImplantaçãoAqui definiremos a divisão da classid 1:2 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 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
  • 20.
    Exemplo de ImplantaçãoAqui definiremos a divisão da classid 1:3 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 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
  • 21.
    Exemplo de ImplantaçãoAqui definiremos a divisão da classid 1:4 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 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
  • 22.
    Exemplo de ImplantaçãoAqui definiremos os filtros para o classificador 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
  • 23.
    Exemplo de ImplantaçãoAqui definiremos os filtros para o classificador 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
  • 24.
    Exemplo de ImplantaçãoAqui definiremos os filtros para o classificador 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
  • 25.
    Exemplo de ImplantaçãoModelo utilizando HTB para o Link Hierarquico (resultado final)‏
  • 26.
    Questões Mudando Ag1 e Ag 3 para 30%, o que seria necessário mudar? Por que o "shapper" está rodando na interface interna e não na externa?
  • 27.