segunda-feira, 2 de janeiro de 2012

Fundamentos de QoS - Marcação de pacotes (parte 1)

QoS para mim é um dos temas mais complicados da prova, porque hoje em dia, na vida real, o Auto QoS já resolve todos os nossos problemas na LAN (geralmente), e a WAN acaba ficando sob responsabilidade da operadora, por não termos acesso ao roteador de borda da MPLS. Então acabo não exercitando tanto assim o QoS no dia-a-dia. Esse tópico abordará conceitos bem básicos sobre marcação de pacotes em Layer 2 e Layer 3.

A marcação em Layer 2 chama-se CoS (Class of Service), e ela utiliza campos do cabeçalho Ethernet quando o 802.1Q está habilitado. O campo TPID do 802.1Q possui 2 bytes (16 bits), e os 3 primeiros (chamados de user-priority) são os que usamos para a marcação do CoS. Dessa forma, com esses 3 bits, é possível definir 8 valores para o CoS:

000: Best Effort (CoS 0)
001: Bulk Data (CoS 1)
010: Critical Data (CoS 2)
011: Call Signaling (CoS 3)
100: Video (CoS 4)
101: Voice (CoS 5)
110: Routing (CoS 6)
111: Reserved (CoS 7)

Desses, o importante é sabermos que o CoS 3 é usado para sinalização e o CoS 5 para voz (RTP). É assim que o telefone IP marca os seus pacotes por default, por exemplo.

A marcação em Layer 3 chama-se ToS (Type of Service), e utiliza 8 bits do cabeçalho IP. Desses 8 bits, os 3 primeiros são chamados de IP Precedence. E com os 6 primeiros bits (utilizando também os 3 bits do IP Precendence), formamos os DSCPs. Os outros dois bits são usados para ECN (Explicit Congestion Notification).

O interessante dessa marcação é que o IP Precedence é compatível com os 3 bits do CoS. Então quando no CoS está marcado 101 por exemplo (CoS 5), o IP Precedence também será 101 no cabeçalho IP (Precedence 5). Dessa forma, é possível estabelecer uma relação entre as marcações de L2 e L3. Cos 0 = Precedence 0, CoS 1 = Precedence 1, CoS 2 = Precedence 2, e assim por diante.

Agora juntando os DSCPs na jogada, vamos começar a utilizar os outros 3 bits. Quando os 3 bits seguintes são 000, formamos a classe CSx do DSCP:
CS1 = Precedence 1 = 001000 = DSCP 8
CS2 = Precedence 2 = 010000 = DSCP 16
CS3 = Precedence 3 = 011000 = DSCP 24
CS4 = Precedence 4 = 100000 = DSCP 32
CS5 = Precedence 5 = 101000 = DSCP 40
CS6 = Precedence 6 = 110000 = DSCP 48
CS7 = Precedence 7 = 111000 = DSCP 56

Agora, mexendo com os valores dos 3 bits à direta, formamos a classe AFxy (Assured Forwarding), onde x é o IP Precedence e y é a preferência no descarte de pacotes em caso de congestionamento (utilizado em algoritmos de Congestion Avoidance como o WRED). Quanto maior o y, maior a preferência de descarte desse pacote.
O precedence (x) varia de 1 a 4, e drop preference (y) de 1 a 3. Assim, temos os seguintes valores possíveis:
AF11 = 001010 = DSCP 10
AF12 = 001100 = DSCP 12
AF13 = 001110 = DSCP 14
AF21 = 010010 = DSCP 18
AF22 = 010100 = DSCP 20
AF23 = 010110 = DSCP 22
AF31 = 011010 = DSCP 26
AF32 = 011100 = DSCP 28
AF33 = 011110 = DSCP 30
AF41 = 100010 = DSCP 34
AF42 = 100100 = DSCP 36
AF43 = 100110 = DSCP 38

Dica: Uma maneira rápida de calcular o valor do DSCP é fazer 8x + 2y!

Bom, mas se no AF o IP Precedence varia de 1 a 4, o que acontece quando o precedence for 5, que é justamente como os pacotes de voz são marcados? Aí temos a classe EF (Expedited Forwarding), DSCP 46, 101110. Por padrão os telefones marcam os seus pacotes de voz como ef (DSCP 46). Inclusive, quando você configura um auto qos no switch, pode reparar que ele faz o mapeamento do cos-dscp colocando o cos 5 como dscp 46 ao invés de 40.

Além desses, temos também o DSCP 0, que é o BE (Best Effort).

Mas lembre-se que isso é só marcação de pacote. Num adianta nada você marcar tudo e não aplicar as regras (policy) devidas para cada classe de tráfego. Mas isso é assunto para um outro post.

2 comentários:

  1. Bruno

    Sobre o item: O precedence (x) varia de 1 a 4, e drop preference (y) de 1 a 3. Assim, temos os seguintes valores possíveis:
    AF11 = 001010 = DSCP 10
    AF12 = 001100 = DSCP 12

    O valor Y seu nao esta variando de 1 .. 3 ..

    Nao era pra ser ..
    AF11 = 001001
    AF12 = 001010

    ResponderExcluir
    Respostas
    1. Oi Willian,

      O y varia de 1 a 3, e para isso só são necessários 2 bits. Pode notar que o último bit é sempre 0, por isso você utiliza na conta apenas os dois primeiros.
      Dessa forma, AF11 = 001 01 0. E transformando 001010 em decimal, temos 10, que é o nosso DSCP.

      O jeito mais fácil de fazer a conversão é utilizando a formula 8x + 2y.

      Abraço!

      Bruno

      Excluir