QoS (Qualidade de Serviço) – parte II

Prezados, este é o nosso post II sobre QoS (Qualidade de Serviço). Desta vez, vamos abordar temas indispensáveis para compreendermos como realizamos os tratamentos específicos para os pacotes, envolvendo-os desde a chegada deles nos roteadores até a sua expedição. Creio que a partir deste post, já teremos uma idéia de como e iniciar as nossas primeiras implementações de QoS. Então, vamos em frente…

CRONOGRAMA
Parte I
– Fundamentos do QoS
– Componentes do QoS
– Auto-QoS, CLI e MQC

Parte II
– Classificação e marcação
– Métodos de enfileiramento
– Métodos de evitar congestionamentos


1 – Classificação e Marcação

1.1 – Introdução

A classificação & marcação são dois termos muito importantes para o QoS, pois é através das atuações deles que compreendermos em plenitude os Serviços Diferenciados. A princípio, vamos fazer uma pequena alusão a grosso modo considerando que a marcação “define valores dos pacotes” e a classificação “agrupa as marcações em classes”. Para compreendermos melhor essa questão, vamos falar sobre a marcação em específico:

O termo “marcar pacote” nada mais é do que alterar o valor do DSCP. Como já sabemos, à nível de ipv4, existe um campo chamado ToS (Type of Service) que possui um sub-campo chamado: DS Filed que acopla o DSCP (DiffServ Code Point) formado por seis bits. Em algum momento podemos questionar: – Para que servem os dois outros dois bits restantes do ToS? A resposta é que eles simplesmente são usados para controle de descarte, assunto que será abordado no item 3.

 

blog_ccna_qos_ii_tos.jpeg

De antemão, a marcação padrão tem valor igual a 0 (zero), assim, quando não há marcação, esse valor é assumido. O valor DSCP=0 também é chamado de BE (Best Effort ou Melhor Esforço) ou mesmo precedência de nome routine. No item 1.2, vamos conhecer mais sobre precedências.

O PHB (Per-Hop Behavior) é o termo usado para informar os valores do DSCP, feito referencia ao seu comportamento. Por exemplo, o comportamento do tráfego de maior preferência terá que ser marcado com um valor que possibilite que ele seja realmente adequado a prioridade quando for escalonado. Você deve está se questionando… – Mas isso é tão óbvio! Sendo que na realidade, há ocasiões que um pacote é marcado com um valor menor, entretanto a sua expedição é mais rápida do que um pacote marcado com um valor maior, pois o seu escalonar possibilita que isso aconteça. Iremos entender isso quando estivermos tratando sobre os enfileiramentos.

Quando marcamos um pacote, devemos saber o objetivo de termos feito isso. Existe algumas convenções chaves que iremos conhecer mais adiante.

Agora vamos tratar sobre a classificação em específico:

O termo “criar classe” se refere a designar um grupo para alocar diversos tipos de modelagens de QoS englobando não só mais a marcação, mas também mecanismos de enfileiramento, controle de descarte de pacotes, entre outros aspectos. Um conjunto de classes deverá ter o propósito de formar uma política e esta será aplicada dentro de uma interface.

Como sabemos, as classes podem agrupar as marcações usando portas lógicas AND ou OR para que sejam efetivamente escolhidas. É válido mencionar que as classes são muito flexíveis, podendo inclusive apontar alvo para outras classes.

Portanto, classes são grupos que capacitam os pacotes a determinar um lugar para uma fila. Conheceremos as filas no item 2.
1.2 – PHB Detalhado

Agora o nosso foco é desmistificar os valores que podem ser alocados no DS Field. O PHB foi definido pelo IETF, alguns livros abordam que seriam em quatro categorias, mas na realidade sabemos que é melhor representá-los de forma mais abrangente. Portanto, abaixo, vamos conferir essas categorias:

  • CS (Class Selector) determina o valor da prioridade de modo linear.
  • BE este eu garanto que já conhecemos!
  • EF(Expedited Forwarding) é representado pelo DSCP=46 e é usado para aplicações que precisam de baixa latência.
  • IP Precedence apresenta grande compatibilidade com o CS, sendo que inclui o BE.
  • AF (Assured Forward) é mais específico do que o CS, pois consegue tratar o nível de descarte. O seu modo de atuação assemelhasse à uma matriz [4×3]. Desta forma, até 12 valores podem ser escolhidos.
  • Decimal valor é simplesmente um valor entre 0-63. Esses valores abrangem todos os possíveis valores do que o CS e o AF conseguem formar. Como exemplo, vamos citar o DSCP 32 que corresponde ao IP Precedence 3.

Em termos de implementação, podemos executar da seguinte maneira:

  • ip precendence <valor>
  • DSCP <valor> (DSCP puro – decimal)
  • DSCP CS<valor>
  • DSCP AF<valor>

1.2.1 – CS (Classe Seletora)

Começamos pelo CS por ele ser o mais fácil de entendermos. O CS usa os três bits mais significativos do DS Field. Portanto teremos a seguinte formação binária: XXXyyy, onde X pode valer 0 (zero) ou 1 (hum) e y sempre será igual a ZERO. A única exceção é a formação dos trio “X” igual a ZERO, pois formaríamos o nosso famoso BE. Para outros efeitos, se convertermos os valores para decimal teremos o DSCP puro.

Os valores do CS variam de 1-7, ou seja, CS1, CS2, CS3 e assim sucessivamente. Como começamos com o CS1, nosso binário inicia-se com 00100 e encerra-se 111000. Portanto devemos lembrar que o trio binário menos significativo deve se manter constante e igual a ZERO.

1.2.2 – IP Precedence

O IP precedence é o CS incluindo o BE (DSCP default). O IP precedence possui uma nomenclatura correspondente ao seu valor. Abaixo podemos conferi-la:

ip precedence 0 – routine
ip precedence 1 – priority
ip precedence 2 – immediate
ip precedence 3 – flash
ip precedence 4 – flash-override
ip precedence 5 – critical
ip precedence 6 – internet
ip precedence 7 – network

O ipp 6 e 7 correspondem aos valores que existem, porém são considerados como reservados e a Cisco não recomenda o uso deles. É natural que no começo possamos nos confundir um pouco com esses nomes, ou até mesmo confundir com o assunto de enfileiramento que será explorado adiante.
1.2.3 – AF (Assured Forward)

O AF é o mais difícil de entendermos, agora a por bits possui o formato: [XXX][yy(z)], gerando dois números decimais, onde X e Y podem assumir valores 0 (zero) ou 1 (um) e Z sempre será igual a ZERO. Desta forma, teremos mais combinações quando comparamos com o IP Precedence ou o CS. É importante considerarmos que a variável Z se torna o valor Y em decimal.

O valor AF é interessante de aprendermos, pois ele é um valor em hexadecimal quando referido ao decimal DSCP puro. Ele se torna interessante não apenas por isso, mas também porque tem um propósito da união do CS com um conceito chamado preferencia de descarte. Ah, agora acredito que estamos entendendo o porquê de termos citado aquela história da MATRIZ. Certo, vamos conhecer esses valores durante o LAB. É importante sabemos no momento que:

  • X corresponde a classe, sendo que o menor valor é 1 (último) e o maior é o 4 (primeiro).
  • Y corresponde ao valor da prioridade de descarte, sendo 1 (menor preferência); 2 (média) e 3 (alta preferência para descarte).

Agora, vamos entender como é formada a idéia da matriz:

[11] [21] [31] [41]
[12] [22] [32] [42]
[13] [23] [33] [43]

Essa matriz é importante, pois quando tratamos essas marcações em um tipo de escalonador que propícia a adequação dos pacotes de modo justo, isso será altamente útil.
1.3 – C&M na prática

Agora que vimos um pouco sobre classificação e marcação, vamos partir um pouco para a prática. Podemos usar o Dynamips para esses fins, simuladores ou mesmo roteadores Cisco.

Router>ena 

Password:Router#conf t 

Router(config)#hostname LAB_CLASSES 

% Hostname contains one or more illegal characters. 

LAB_C&M(config)#class-map DADOS_PRIORITARIOS   !criando a classe 

LAB_C&M(config-cmap)#match precedence ? 

<0-7>           Enter up to 4 precedence values separated by white-spaces 

critical        Match packets with critical precedence (5) 

flash           Match packets with flash precedence (3) 

flash-override  Match packets with flash override precedence (4) 

immediate       Match packets with immediate precedence (2) 

internet        Match packets with internetwork control precedence (6) 

network         Match packets with network control precedence (7) 

priority        Match packets with priority precedence (1) 

routine         Match packets with routine precedence (0) 

LAB_C&M(config-cmap)#match dscp ?<0-63>   Differentiated services codepoint value 

af11     Match packets with AF11 dscp (001010) 

af12     Match packets with AF12 dscp (001100) 

af13     Match packets with AF13 dscp (001110) 

af21     Match packets with AF21 dscp (010010) 

af22     Match packets with AF22 dscp (010100) 

af23     Match packets with AF23 dscp (010110) 

af31     Match packets with AF31 dscp (011010) 

af32     Match packets with AF32 dscp (011100) 

af33     Match packets with AF33 dscp (011110) 

af41     Match packets with AF41 dscp (100010) 

af42     Match packets with AF42 dscp (100100) 

af43     Match packets with AF43 dscp (100110) 

cs1      Match packets with CS1(precedence 1) dscp (001000) 

cs2      Match packets with CS2(precedence 2) dscp (010000) 

cs3      Match packets with CS3(precedence 3) dscp (011000) 

cs4      Match packets with CS4(precedence 4) dscp (100000) 

cs5      Match packets with CS5(precedence 5) dscp (101000) 

cs6      Match packets with CS6(precedence 6) dscp (110000) 

cs7      Match packets with CS7(precedence 7) dscp (111000) 

default  Match packets with default dscp (000000) 

ef       Match packets with EF dscp (101110)

Quando estamos realizando uma configuração de marcação, percebemos que há uma grande flexibilidade de uso, ora podemos mencionar um DSCP puro (decimal) ou DSCP usando alguma padronização para termos o mesmo resultado. Por exemplo: a marcação DSCP AF41 pode ser facilmente representada por DSCP 34. Como sabemos desse valor? Basta converter de hexadecimal (AF) para Decimal (dscp puro).

Para finalizarmos, vale citar que há uma característia do IOS chamada de NBAR (Network Based Application Recognition) que é muito útil também para marcar pacotes, baseando-se no tráfego da camada 7.
2 – Métodos de enfileiramento

2.1 – Introdução

Como vimos, a classificação e a marcação fazem um grande trabalho na categorização do tráfego, apesar disso se eles estiverem isolados, não haverá efeito algum do comportamento, sabiam? Ora, ora, e quem irá nos ajudar? Como resposta, já sabemos, os mecanismos de enfileiramento.

2.2 – Tipos de enfileiramento:

  • Hardware Queueing: esse é o tipo de enfileiramento conhecido como TxQ (fila de transmissão) ele é usa o hardware e SEMPRE usa o mecanismo FIFO (First In First Out) e apenas quando essa fila fica cheia o software queueing será acionado. Vale salientar que, o FIFO não é verdadeiramente um mecanismo de operação de QoS, apesar de alguns livros informar que sim. Não, porquê!? Não mesmo! Pois ele não realiza quaisquer operações de QoS, como por exemplo reordenação de pacotes. De qualquer maneira essa questão pode até gerar uma certa discussão…
  • Software Queueing: esse tipo de enfileiramento tem uma grande gama de opções. É importante nos prepararmos para a “sopa de letras” que está por vir. Cada tipo de enfileiramento possui características das quais auxiliam e organizam os pacotes nas filas, entretanto se o mecanismo que for escolhido para a ocasião não for o mais coerente, pode gerar alguns problemas. Como exemplo de softqueues, temos: PQ, CQ, MDRR, WFQ, LLQ, CBWFQ, dentre outros.

2.3 – Software Queueing:

Agora vamos aborda um pouco sobre as principais filas baseadas em software. Para facilitar nosso aprendizado, iremos discuti-las da seguinte forma: característica mais marcante, vantagens e desvantagens, de modo respectivo. Isso é bom até mesmo para facilitar nosso aprendizado. Desta forma, confiram:

  • PQ – Priority Queue. Formação: possui 4 filas FIFO, que são unidirecionais, e um pacote da fila em espera só entra em ação quando sua superior é esvaziada. Vantagens: Fornece prioridade restrita para um tráfego na classe. Desvantagem: pode sofrer de um fênomeno chamado: starvation (morte por insuficiência de alimentação).
  • CQ – Custom Queue. Formação: possui 16 filas FIFO, que são unidirecionais, e um pacote da fila em espera só entra em ação quando sua superior é esvaziada.Vantagens: garante banda para aplicações menos críticas. Desvantagem: precisa criar uma política dentro da interface.
  • WFQ – Weighted Fair Queueing, ou seja, enfileiramento justo baseado em peso, ele atua de forma justa eliminando o fenômeno stavartion. Ou seja, o primeiro da coluna de cada fila é expedido para o DEQUEUE e todos os pacotes da segunda coluna são expedidos e assim sucessivamente. Desvantagem: ideal para links até 2MBps, caso contrário muitos ciclos de CPU serão executados e não possui uma fila única de prioridade.
  • CBWFQ – Class-Based Weighted Fair Queue. Formação: possui 64 filas FIFO, que são unidirecionais, e um pacote da fila em espera só entra em ação quando sua superior é esvaziada. Vantagem: recordista do número de classes, suporta até 64 para realizar controle de banda. Desvantagem: sem fila exclusiva de prioridade.
  • IP RTP Priority – Conhecido por PQWFQ, por ser composto por uma fila PQ e o grupo de WFQ.Vantagens: ótimo para arquitetura AVVID da Cisco, garante banda e propicia a menor latência, não apenas para portas
  • UDP/RTP mas qualquer outro tipo de porta. Vantagens: adequado para transportar voz, dados e video, há um PQ que não sofre do fenômeno do starvation. Desvantagem: limitado para porta RTP/UDP e não por admissão de chamada.
  • LLQ – Low Latency Queue. Conhecido por PQCBWFQ, motivo: possui uma fila PQ e um grupo em CBWFQ! É sério é assim que ele é conhecido, num já havíamos mencionado que seria uma “sopa de letras”? Pois é… Vantagens: ótimo para arquitetura AVVID da Cisco, excelente para aplicações real-time, garante banda e propicia a menor latência, não apenas para portas UDP/RTP mas qualquer outro tipo de porta. O seu único problema diz respeito a sua classificação não ser feita de modo automatizado, havendo a necessidade de configuração. Esse é o nosso método mais utilizado, porém SE as classes não estiverem bem ajustadas conforme a realidade, podemos ter alguns problemas, que daí para frente teremos que realizar alguns troubleshootings!!! 😀

blog_ccna_qos_ii_pqwfq.jpeg

Agora vamos conferir um quadro comparativo (equivale a um sumário):

blog_ccna_qos_ii_tabela_queue.jpeg

Por padrão o FIFO é habilitado nas interfaces com a bandwidth acima de 2mbps e também por padrão o WFQ é habilitado nas interfaces com a bandwidth abaixo de 2Mbps. *

3 – Métodos de evitar congestionamentos

3.1 – Introdução

Esse é o assunto chamado de “Congestion Avoidance”. Vamos ser brévios sobre ele, ok? Pois o post já está imenso e esse assunto é fácil de entender, não vamos nos preocupar. Esse assunto é tranqüilo mesmo, uma vez compreendido os conceitos que iremos abordar.

3.2 – Mecanismos:

De antemão, a Cisco não implementa o mecanismo chamado: RED (Random Early Drop)

  • Tail DROP é o descarte de pacotes baseado em hardware quando a fila está cheia.
  • WRED (Weighted Randon Early Drop) é uma característica do IOS utilizada para previnir que uma fila seja preenchida pela capcidade de discartar o tráfego mais agressivamente quando a fila começa a se preencher. O descarte é feito baseado na prioridade de marcação, onde os pacotes de menor prioriodade terão maior chances de serem descartados. O WRED é formado pelo piso, teto, que são conhecidos por CDT (Congestion Discart Thresholds) e o MPD que iremos confirar abaixo:
    • PISO ou Minimum Threshold – especifica o número de pacotes que precisa estar em uma fila antes que a fila considere o descartes dos pacotes que tem uma particular marcação.
    • TETO ou Maximum Threshold – depois que uma fila excede o valor máximo todos os pacotes serão discartados “full drop”. Já um pouco antes disso acontecer, o valor da probabilidade de descarte será aumentado.
    • MPD (Mark Probability Denominator) trata-se do fator percentual em que o pacote pode terá chances de ser descartado.

Os roteadores indicam que ocorrerá o congestionamento atravé do ECN (Explict Congestion Notification) que usa os dois bits menos significativos do byte ToS, quando eles estão iguais a 11, temos um conestionamento.
Se o pacote for marcado com o bit DE (Discart Eligible) ele terá maior chances de ser descartado. Existe também o dWRED que é muito semelhante a essa característia.

O tipo de enfileiramento WFQ possui seu mecanismo de descarte de pacotes chamado de Early Dropping e Agressive Dropping.

3.3 – WRED Hands-on!

Como vimos conforme a gravura acima, agora vamos por em prática uma pequena configuração:

blog_ccna_qos_ii_wred.jpeg

Espero que tenham gostado! Deus abençoe a todos!

Abraço,

Italo Amaral

20 comentários

Pular para o formulário de comentário

  1. No final do quarto POST vou fazer o 642-642

  2. Ops, problema no avatar

  3. Muito bom mesmo…

    Abçs

  4. Excelente post Ítalo. Parabéns.

  5. Show de bola Italo, você usou uma forma bastante objetiva de expor o assunto pois nos poucos conteúdos divulgados na Web a respeito de QoS há muita complicação e consequentemente muita dúvida. Valeu pelos posts, estou ancioso pelos 2 últimos mas até o momento já tirei umas dúvidas que tinha sobre o tema. Um abraço aê Italo e até o próximo post.

    Abçs.

  6. Excelente! Eu não sacava NADA de QoS antes de ler os posts, e mesmo assim consegui compreender bem o funcionamento, as características e tudo o mais. Muito bom, e as configurações práticas me ajudaram a entender bem melhor os conceitos… ;D

  7. Italo,

    Voce tem algum precisa de quando irá escrever a parte III deste artigo??? Estou ancioso..

    Muito bom o artigo!

  8. Existe alguma previsao de continuacao deste post, li o material deste post e do 1 e achei muito bom, estou no aguardo da continuacao.

    Abcs

  9. Rapsil, o quanto antes! Não desanime!

  10. Opa, sera que sumiu mesmo =(

  11. Sumiu de vez a parte 3 e 4? :'(

  12. Se alguem descobrir onde foram parar as partes 3 e 4 … por favor … divulguem … abracos

  13. sumiu mesmo? não apareceu ainda? alguém sabe?

  14. Muito legal parabéns.

  15. mandô bem!!
    waiting for 3..4..

  16. Italo, qdo sai a parte III?

  17. Italooo, cade vc?

  18. Há algum lugar onde posso encontrar a parte 3 e 4 ? obrigado.

  19. estou procurando algum material sobre QOS em VRF MPLS, alguém tem alguma ideia de onde encontrar

  20. Quando vc configura o MCQ, e aplica o comando bandwith 25 na classe, vc deixa reservado 25% da banda para essa classe o tempo todo ou a reserva vai ocorrer apenas se houver um congestionamento??

Deixe um comentário