quarta-feira, 28 de janeiro de 2015

Como Funcionam as Wildcard Masks

Olá Pessoal.

Este artigo foi escrito para aqueles que já têm familiaridade com cálculos de sub-redes e compreendem bem a dinâmica de operação da máscara de rede. A wildcard mask (máscara coringa) é um recurso bastante comum na configuração de roteadores e outros equipamentos, principalmente no que diz respeito à escrita de listas de controle de acesso (ACL) e até mesmo à configuração de alguns protocolos de roteamento dinâmico. Essa semana um aluno me pediu para escrever um artigo no blog explicando o conceito de wildcard mask, além daquele clichê simplista de que elas são o inverso da máscara de rede. Pois bem, então vamos à explicação... 



Vamos começar com uma resposta objetiva para a seguinte pergunta:
Por que wildcard mask ao invés da tradicional máscara de rede?
R: Porque a wildcard mask oferece maior flexibilidade.



Eis então que surge a segunda pergunta:
Por que a wildcard mask oferece maior flexibilidade?
Essa resposta demanda um pouco de discussão...




É importante ter em mente que a máscara de rede e a máscara coringa não estão diretamente relacionadas uma com a outra. Lembrem-se que o propósito da máscara de rede é estabelecer uma fronteira entre aquilo que chamamos de prefixo de rede (identificador da rede) e o sufixo de host (identifcador de um host na rede), necessariamente nessa ordem (contíguas). Ou seja, na estrutura da máscara de rede há uma sequência ininterrupta de bits 1 (prefixo) e, depois, uma sequência ininterrupta de bits 0, sem que haja intercalação de bits 0s e 1s. Por outro lado a wildcard mask não tem essa estrutura rígida e os bits são tratados individualmente, por isso é possível ter máscaras coringas que intercalam bits 0s e 1s. 

Na máscara de rede tradicional os bits sigificam:
  • 1 = REDE
  • 0 = HOST

Na wildcard mask os bits siginificam:
  • 1 = o bit equivalente é irrelevante e pode assumir qualquer valor
  • 0 = o bit equivalente DEVE ser igual

Hum, então é daí que vem a flexibilidade das máscaras coringas!!!??? Parece que conceitualmente as coisas estão ficando um pouco mais claras, mas vamos continuar desenvolvendo esse raciocínio a partir de um exemplo prático da maior flexibilidade das máscaras coringas. Um exemplo clássico diz respeito à máscara coringa 0.0.0.254 para fins de correspondência somente daqueles endereços IP com valores pares ou ímpares no último octeto de redes /24. 

Tomando o endereço IP 192.168.0.10 (par) como referência, em binário ele equivale a:
> 11000000.10101000.00000000.00001010

A wildcard mask 0.0.0.254 em binário equivale a:
> 00000000.00000000.00000000.11111110

O valor 0 na máscara coringa (destaque em vermelho) indica que o respectivo bit posicional de um endereço IP qualquer deve ser equivalente ao endereço de referência, enquanto que o valor 1 indica que os bits posicionais não interessam e podem assumir qualquer valor. 

Todos os endereços IPs que têm o último octeto ímpar terminam com o bit 1, enquanto que todos os endereços IP que são pares terminam em 0. Logo, se o endereço IP associado à máscara coringa é par (192.168.0.10), então somente haverá correspondência com outros endereços pares, quaisquer que sejam. Por exemplo, 192.168.0.22 equivale a 11000000.10101000.00000000.00010110. Reparem nas linhas abaixo como fica a comparação entre o endereço de referência, o endereço a ser testado e a máscara coringa (com destaque em vermelho nos bits "travados"):

> 11000000.10101000.00000000.00001010 = IP 192.168.0.10 (referência)
> 11000000.10101000.00000000.00010110 = IP 192.168.0.22
> 00000000.00000000.00000000.11111110 = Wildcard Mask

Os três primeiros octetos tiveram uma correspondência porque todos os primeiros 24 bits dos endereços 192.168.0.10 e 192.168.0.22 são iguais, equivalentes a 192.168.0 (prefixo /24). O último octeto teve uma correspondência porque o último bit dos endereços 192.168.0.10 e 192.168.0.22 é igual, equivalente a 0 (ambos são pares). 

Agora tomemos um exemplo contrário, ou seja, o IP 192.168.0.33 (ímpar) que em binário é 11000000.10101000.00000000.00100001. Ao comparar esse endereço com o endereço de referência (192.168.0.10) e sua respectiva máscara coringa fica evidente que não há correspondência no último bit, logo o endereço 192.168.0.33 é rejeitado. 

> 11000000.10101000.00000000.00001010 = IP 192.168.0.10 (referência)
> 11000000.10101000.00000000.00100001 = IP 192.168.0.33
> 00000000.00000000.00000000.11111110 = Wildcard Mask

Os três primeiros octetos tiveram uma correspondência porque todos os primeiros 24 bits dos endereços 192.168.0.10 e 192.168.0.33 são iguais, equivalentes a 192.168.0. O último octeto não teve uma correspondência porque o último bit do endereço 192.168.0.10 é 0(2), enquanto que o último bit do endereço 192.168.0.33 é 1(2)

Assim é possível utilizar a wildcard mask 0.0.0.254 associada com um endereço par para permitir apenas endereços pares, enquanto que a associação dessa máscara coringa com um endereço ímpar implica em correspondência apenas com endereços ímpares. Esse foi apenas um exemplo frequentemente utilizado para demonstrar a flexibilidade da wildcard mask.

Uma recomendação para trabalhar rapidamente com as máscaras coringas no cotidiano operacional é pensar nela como o "inverso" da máscara de rede. Por exemplo, os valores das wildcard masks associados com as máscaras padrões são:

  • 255.0.0.0     (/08) = WC 0.255.255.255
  • 255.255.0.0   (/16) = WC 0.0.255.255
  • 255.255.255.0 (/24) = WC 0.0.0.255

Decorar esses valores associados com as máscaras padrões não é suficiente para ajudá-lo em ambientes onde existem sub-redes que não seguem as classes padrões (classless). Quando o ambiente possui sub-redes que utilizam máscaras de rede que não sejam as tradicionais /8, /16 ou /24, a máscara coringa pode ser obtida por meio da subtração da máscara em uso na sub-rede do valor 255.255.255.255. Por exemplo, uma rede /26 (255.255.255.192) tem a wildcard 0.0.0.63 (exemplo a), enquanto que uma rede /30 (255.255.255.252) tem a wildcard 0.0.0.3 (exemplo b).

-------------------------------------------------------
a) Exemplo: Sub-Rede /26   |   b) Exemplo: Sub-Rede /30
---------------------------|---------------------------
   255.255.255.255         |      255.255.255.255        
                   (-)     |                      (-)    
   255.255.255.192         |      255.255.255.252        
   _______________ (=)     |      _______________ (=)    
     0.  0.  0. 63         |        0.  0.  0.  3        
-------------------------------------------------------

Ainda em dúvida? Continue estudando e praticando... 

Samuel.

11 comentários:

  1. Parabéns professor Samuel. Utilizo seus materiais em minhas duas disciplinas de Redes da UFPA.

    ResponderExcluir
  2. Muito grato por suas excelentes postagens professor Samuel.

    ResponderExcluir
  3. Excelente explicação. Parabéns!!!

    ResponderExcluir
  4. Ótima explicação, com excelentes exemplos. Parabéns

    ResponderExcluir
  5. Melhor forma de explicação que encontrei à respeito até o momento, não conseguia entender sobre o uso da wildmask para "liberar" apenas IPs pares ou impares.
    Muito bom.

    ResponderExcluir
  6. sim tenho uma dúvida...

    Tenho uma rede iniciando em 192.168.10.132 e terminando em 192.168.10.149 a máscara que chega mais próximo é 255.255.255.224, correto?
    Então minha wildcard seria 0.0.0.31, a pergunta é....
    onde começaria minha rede e onde terminaria .. aguardo retorno professor.

    ResponderExcluir
  7. Ótimo postagem, tirou minhas dúvidas, obrigado !

    ResponderExcluir