Notação CIDR e máscaras de sub-rede: como ler de /8 a /32
O número depois da barra em 192.168.1.0/24 conta bits, não endereços. Ele diz quantos dos 32 bits de um endereço IPv4 pertencem à rede; o que sobra pertence aos hosts. Essa única frase já é quase tudo o que a notação CIDR significa.
Todo o resto decorre dela. Um /24 deixa 8 bits de host, então o bloco comporta 2⁸ = 256 endereços. Um /26 deixa 6, então comporta 64. Cada bit devolvido ao lado do host dobra o bloco; cada bit tomado dobra a quantidade de blocos. A quantidade que você consegue de fato atribuir a dispositivos costuma ser duas unidades menor que o total, porque o primeiro endereço nomeia a rede e o último é o broadcast. Um /26 dá 62 hosts utilizáveis, não 64.
Dois prefixos quebram essa regra do menos dois de propósito. E uma máscara wildcard não é uma máscara de sub-rede, embora as duas vivam sendo coladas no campo uma da outra. Se você quer só a resposta para um bloco específico, a calculadora de sub-redes imprime tudo; este artigo é sobre chegar lá sem ela.
O que a notação CIDR realmente diz
Uma máscara de sub-rede também é um número de 32 bits, escrito do mesmo jeito que um endereço. Seus bits são uma sequência de 1s seguida de uma sequência de 0s. Os 1s marcam bits de rede, os 0s marcam bits de host. Escreva um /26 por extenso e você tem:
11111111.11111111.11111111.11000000
255 . 255 . 255 . 192
Converta cada octeto de volta para decimal e o resultado é 255.255.255.192. A notação CIDR conta os 1s iniciais em vez de escrever todos os trinta e dois. 192.168.1.0/26 e 192.168.1.0 255.255.255.192 são a mesma afirmação em duas sintaxes, e qual delas um equipamento quer depende inteiramente do comando que você está digitando.
Não há nada por trás dessa contagem além dela mesma. /8, /16 e /24 caem em fronteiras de octeto, e é por isso que ficam arrumadinhos em decimal: 255.0.0.0, 255.255.0.0, 255.255.255.0. Nada na notação exige isso. /22 e /27 são igualmente válidos. Eles cortam pelo meio de um octeto e produzem máscaras como 255.255.252.0, que parecem arbitrárias até você escrevê-las em binário.
As classes sumiram por um motivo aritmético. Antes de 1993, os bits iniciais de um endereço decidiam seu tamanho: classe A ficava com um /8, classe B com um /16, classe C com um /24, e não havia nada entre eles. Uma organização com 300 hosts tinha de reivindicar uma classe B e desperdiçar mais de 65000 endereços, ou pegar dois blocos classe C e carregar duas rotas. O CIDR (RFC 1519, depois revisado como RFC 4632) quebrou esse acoplamento. O prefixo viaja junto com o endereço, então um bloco pode ser qualquer potência de dois. As classes ainda aparecem em provas de certificação e em documentação antiga, mas o roteamento classful está obsoleto desde a chegada do CIDR em 1993. Quem decide onde uma rede termina é a máscara, não o primeiro octeto.
O guia rápido de máscaras de sub-rede, de /8 a /32
A conversão de CIDR para máscara de sub-rede cabe numa tabela só. A última coluna é proposital: mostra o que a fórmula genérica 2ⁿ − 2 produz, que bate com a contagem real de utilizáveis em toda parte, exceto nas duas últimas linhas.
| Prefixo | Máscara de sub-rede | Máscara wildcard | Total de endereços | Hosts utilizáveis | 2ⁿ − 2 ingênuo dá |
|---|---|---|---|---|---|
| /8 | 255.0.0.0 | 0.255.255.255 | 16777216 | 16777214 | 16777214 |
| /9 | 255.128.0.0 | 0.127.255.255 | 8388608 | 8388606 | 8388606 |
| /10 | 255.192.0.0 | 0.63.255.255 | 4194304 | 4194302 | 4194302 |
| /11 | 255.224.0.0 | 0.31.255.255 | 2097152 | 2097150 | 2097150 |
| /12 | 255.240.0.0 | 0.15.255.255 | 1048576 | 1048574 | 1048574 |
| /13 | 255.248.0.0 | 0.7.255.255 | 524288 | 524286 | 524286 |
| /14 | 255.252.0.0 | 0.3.255.255 | 262144 | 262142 | 262142 |
| /15 | 255.254.0.0 | 0.1.255.255 | 131072 | 131070 | 131070 |
| /16 | 255.255.0.0 | 0.0.255.255 | 65536 | 65534 | 65534 |
| /17 | 255.255.128.0 | 0.0.127.255 | 32768 | 32766 | 32766 |
| /18 | 255.255.192.0 | 0.0.63.255 | 16384 | 16382 | 16382 |
| /19 | 255.255.224.0 | 0.0.31.255 | 8192 | 8190 | 8190 |
| /20 | 255.255.240.0 | 0.0.15.255 | 4096 | 4094 | 4094 |
| /21 | 255.255.248.0 | 0.0.7.255 | 2048 | 2046 | 2046 |
| /22 | 255.255.252.0 | 0.0.3.255 | 1024 | 1022 | 1022 |
| /23 | 255.255.254.0 | 0.0.1.255 | 512 | 510 | 510 |
| /24 | 255.255.255.0 | 0.0.0.255 | 256 | 254 | 254 |
| /25 | 255.255.255.128 | 0.0.0.127 | 128 | 126 | 126 |
| /26 | 255.255.255.192 | 0.0.0.63 | 64 | 62 | 62 |
| /27 | 255.255.255.224 | 0.0.0.31 | 32 | 30 | 30 |
| /28 | 255.255.255.240 | 0.0.0.15 | 16 | 14 | 14 |
| /29 | 255.255.255.248 | 0.0.0.7 | 8 | 6 | 6 |
| /30 | 255.255.255.252 | 0.0.0.3 | 4 | 2 | 2 |
| /31 | 255.255.255.254 | 0.0.0.1 | 2 | 2 | 0 |
| /32 | 255.255.255.255 | 0.0.0.0 | 1 | 1 | −1 |
Leia a tabela como um conjunto de relações, e não como uma lista de respostas. Cada linha para baixo divide o bloco pela metade: um /24 comporta 256 endereços, um /25 comporta 128, um /26 comporta 64. A coluna wildcard é a máscara de sub-rede com todos os bits invertidos, então 255.255.255.192 e 0.0.0.63 sempre caem na mesma linha. As duas linhas em negrito são onde a fórmula padrão deixa de descrever a realidade, assunto de uma seção mais adiante.
Você só precisa decorar os valores do último octeto na coluna da máscara, porque eles se repetem: 128, 192, 224, 240, 248, 252, 254, 255. Esses são os únicos oito valores de byte não triviais com que uma máscara válida pode terminar. Para enxergar o motivo convertendo por conta própria, o conversor de base numérica imprime qualquer um deles em binário.
Lendo a tabela ao contrário: da máscara de sub-rede para o CIDR
Dada uma máscara em decimal pontuado, conte os bits 1. Cada 255 contribui com 8, e o único octeto interessante contribui com o resto:
| Último octeto da máscara | 128 | 192 | 224 | 240 | 248 | 252 | 254 | 255 |
|---|---|---|---|---|---|---|---|---|
| Bits que ele acrescenta | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
Então 255.255.255.192 é 8 + 8 + 8 + 2 = /26. E 255.255.252.0 é 8 + 8 + 6 + 0 = /22, porque 252 em binário é 11111100.
Duas coisas decorrem disso. Qualquer octeto que não seja 255 nem 0 é o octeto de fronteira, e uma máscara válida só pode ter um deles. E o valor desse octeto entrega o tamanho do bloco diretamente.
Como calcular máscara de sub-rede e rede na mão
O método mecânico tem três passos e funciona para qualquer prefixo. O exemplo abaixo usa 192.168.1.130/26, mas o procedimento vale para qualquer outro endereço.
Passo 1 — encontre o tamanho do bloco
O tamanho do bloco é 256 − o octeto de fronteira da máscara.
Para um /26 a máscara é 255.255.255.192, então o tamanho do bloco é 256 − 192 = 64. Sub-redes desse tamanho ficam em múltiplos de 64 no quarto octeto: 0, 64, 128, 192. Não existe nenhum outro ponto de partida possível.
Tamanho do bloco e quantidade de endereços são o mesmo número, alcançado pelo lado da máscara em vez do lado da contagem de bits.
Passo 2 — descubra em que bloco o endereço cai
Divida o octeto de fronteira do endereço pelo tamanho do bloco e arredonde para baixo.
O endereço é 192.168.1.130, o tamanho do bloco é 64, então 130 ÷ 64 = 2.03…, que arredonda para baixo dando 2. Multiplique de volta: 2 × 64 = 128. O endereço está no bloco que começa em 128.
A maioria dos erros acontece aqui, e sempre na mesma direção: quem calcula toma o endereço recebido pelo início do bloco dele, e em geral não é. 192.168.1.130 é um endereço de host que mora no terceiro /26 daquele /24.
Passo 3 — rede, broadcast, primeiro e último host
O início do bloco é o endereço de rede. O broadcast é o início do bloco mais o tamanho do bloco menos um. Tudo estritamente entre os dois é atribuível:
Network 192.168.1.128
Broadcast 192.168.1.191
Usable 192.168.1.129 - 192.168.1.190
Usable 62 (of 64 total)
Netmask 255.255.255.192
Wildcard 0.0.0.63
O broadcast é 128 + 64 − 1 = 191. O primeiro host é rede + 1, o último host é broadcast − 1, e a contagem de utilizáveis é 64 − 2 = 62, batendo com a linha /26 do guia rápido.
Numa frase que dá para repetir de cabeça: o tamanho do bloco é 256 menos o octeto da máscara; arredonde o endereço para baixo até um múltiplo dele; esse é o endereço de rede, e o início do próximo bloco menos um é o broadcast.
O método não é específico do quarto octeto. Para um /22 a máscara é 255.255.252.0, então o octeto de fronteira é o terceiro e o tamanho do bloco ali é 256 − 252 = 4. Os blocos começam, portanto, em 10.0.0.0, 10.0.4.0, 10.0.8.0, e o bloco 10.0.0.0/22 vai até o broadcast 10.0.3.255, com endereços utilizáveis de 10.0.0.1 a 10.0.3.254, ou seja, quatro /24s consecutivos dentro de um mesmo domínio de broadcast. Mesmos três passos, outro octeto.
Se é na conversão de binário para decimal que você trava, o guia de conversão de bases numéricas cobre a conversão em si com mais profundidade do que um artigo sobre sub-redes deveria.
Para conferir seu trabalho num script em vez de na cabeça, a biblioteca padrão do Python já sabe tudo isso:
import ipaddress
net = ipaddress.ip_network("192.168.1.130/26", strict=False)
print(net) # 192.168.1.128/26
print(net.network_address) # 192.168.1.128
print(net.broadcast_address) # 192.168.1.191
print(net.netmask) # 255.255.255.192
print(net.hostmask) # 0.0.0.63
print(net.num_addresses) # 64
print(len(list(net.hosts()))) # 62
strict=False é o que permite passar um endereço de host em vez de um endereço de rede; com o padrão strict=True a mesma chamada levanta ValueError.
Onde a regra do menos dois deixa de valer
A subtração tem um motivo por trás. Numa sub-rede comum, o padrão de host todo-zeros nomeia a própria rede e o padrão todo-uns é o endereço de broadcast direcionado. Nenhum dos dois pode ser configurado numa interface, então um bloco de 2ⁿ endereços oferece 2ⁿ − 2 aos hosts. É por isso que um /24 dá 254 e um /26 dá 62.
O motivo é também o limite. Quando um bloco é pequeno demais para conter esses dois endereços reservados, subtraí-los deixa de fazer sentido.
Um /31 tem dois endereços e dois hosts utilizáveis. A RFC 3021 define o /31 para enlaces ponto a ponto. Um enlace desses tem exatamente duas pontas e nenhum segmento compartilhado, então não há nada para um endereço de broadcast fazer nem nada para um endereço de rede identificar. Os dois endereços vão para as duas pontas. Aplicar 2ⁿ − 2 aqui devolve 0, e esse 0 só diz que a fórmula saiu do domínio dela. A condição associada é real: /31 só vale em interfaces genuinamente ponto a ponto. Um segmento de LAN multiacesso continua precisando de /30 ou menor, e o Windows não aceita um /31 numa placa de rede.
Um /32 tem um endereço e um host utilizável. É uma rota de host único: interfaces de loopback, rotas estáticas, endereços anycast, regras de firewall para um endereço só. Não existe endereço de broadcast, então o − 2 da fórmula devolveria −1.
O Python concorda com os dois:
import ipaddress
p2p = ipaddress.ip_network("203.0.113.4/31")
print([str(h) for h in p2p.hosts()]) # ['203.0.113.4', '203.0.113.5']
host = ipaddress.ip_network("10.0.0.1/32")
print([str(h) for h in host.hosts()]) # ['10.0.0.1']
Guardar isso como duas exceções para decorar funciona pior do que guardar o princípio: a subtração remove dois endereços específicos, então convém verificar se eles existem antes de removê-los. Um /31 e um /32 não têm endereço de broadcast nenhum, logo não há o que remover.
Total, utilizáveis e número de sub-redes são três números diferentes
Muita gente confunde os três, e a confusão é compreensível porque todos são potências de dois derivadas do mesmo prefixo.
- Total de endereços num /p é
2^(32 − p). Num /26: 64. - Hosts utilizáveis é esse número menos 2, exceto em /31 e /32. Num /26: 62.
- Número de sub-redes que você obtém ao dividir um /p pai em filhos /q é
2^(q − p). Dividir um /24 em /26s toma dois bits emprestados, então dá2² = 4sub-redes.
Os três respondem perguntas diferentes, então uma frase como “um /26 te dá 4” só é verdadeira se a pergunta era sobre dividir um /24. Dividir também custa endereços, porque cada sub-rede filha reserva o próprio par de rede e broadcast. Quatro /26s recortados de um /24 comportam 4 × 62 = 248 endereços utilizáveis contra os 254 do pai, com seis endereços gastos na própria divisão.
Máscara wildcard e máscara de sub-rede: qual comando quer qual
Uma máscara wildcard é o inverso bit a bit da máscara de sub-rede. Onde a máscara de sub-rede tem 1s, a wildcard tem 0s. Pegue a linha /26 do guia rápido: máscara 255.255.255.192, wildcard 0.0.0.63. Inverta cada bit de uma e você tem a outra.
As duas são usadas em sentidos opostos, e essa é a parte que precisa entrar no sangue. Uma máscara de sub-rede é aplicada com um AND bit a bit, então um bit 1 significa “este bit faz parte da rede”. Uma wildcard é um filtro de correspondência, então um bit 0 significa “este bit tem de bater” e um bit 1 significa “tanto faz”. Mesma operação por baixo, polaridade oposta. Se a mecânica em nível de bit estiver nebulosa, o guia de operações bit a bit cobre AND, OR e NOT em termos mais gerais.
Qual delas um equipamento quer não é questão de preferência. Para o bloco 192.168.1.128/26:
! wants the subnet mask
ip address 192.168.1.129 255.255.255.192
! wants the wildcard mask
access-list 10 permit 192.168.1.128 0.0.0.63
network 192.168.1.128 0.0.0.63 area 0
! Cisco ASA — wants the subnet mask, unlike IOS ACLs
access-list OUT permit ip 192.168.1.128 255.255.255.192 any
# Linux iproute2 — takes the prefix directly
ip addr add 192.168.1.129/26 dev eth0
As ACLs do Cisco IOS e as instruções network do OSPF pegam a máscara wildcard; o ASA pega a máscara de sub-rede. É um mesmo fabricante com duas convenções dentro da mesma família de produtos, e daí vem a falha de copiar e colar mais comum da área. Outras plataformas têm suas próprias convenções, então, antes de colar um valor num campo desconhecido, confirme qual dos dois aquele campo espera.
O perigo está no modo de falha. Cole 255.255.255.192 numa ACL do IOS e o roteador lê o valor como wildcard: três octetos só de 1s significam “tanto faz”, então os três primeiros octetos deixam de ser comparados e a regra alcança muito além do bloco que você tinha em mente. O roteador não emite erro de sintaxe nem linha de log, e a instrução permit fica valendo com o escopo errado. O engano inverso pelo menos tem chance de ser pego, porque 0.0.0.63 não é uma máscara de sub-rede válida: falta a ela uma sequência inicial de 1s. Se uma dada plataforma rejeita isso ou aceita em silêncio não é algo para descobrir em produção.
Por que wildcards de ACL podem ter buracos e máscaras de sub-rede não
Uma máscara de sub-rede precisa ser uma sequência contígua de 1s seguida de 0s. A regra existe porque é a contiguidade que faz a operação AND partir um endereço em exatamente duas partes. Um valor como 255.0.255.0 tem um buraco no meio, não descreve fronteira coerente nenhuma, e os equipamentos rejeitam. O Python também:
import ipaddress
ipaddress.ip_network("10.0.0.0/255.0.255.0")
# ValueError: '10.0.0.0/255.0.255.0' does not appear to be an IPv4 or IPv6 network
Só 33 máscaras são válidas, de /0 a /32. Qualquer outra coisa é erro de digitação.
Wildcards de ACL não sofrem essa restrição, porque não estão partindo um endereço em parte de rede e parte de host. São um filtro de correspondência bit a bit, então buracos são legais e vez ou outra úteis: uma única wildcard com buraco consegue casar, por exemplo, com todos os endereços ímpares de uma faixa. Essa diferença de expressividade é a razão pela qual os dois valores não podem ser trocados. Não são o mesmo tipo de objeto, apenas se parecem em decimal pontuado.
Faixas privadas, CGNAT e outras reservadas
Um prefixo diz o tamanho de um bloco. Qual é o bloco decide se você pode usá-lo.
| Bloco | Faixa | Reservado por |
|---|---|---|
| 10.0.0.0/8 | 10.0.0.0 – 10.255.255.255 | privada, RFC 1918 |
| 172.16.0.0/12 | 172.16.0.0 – 172.31.255.255 | privada, RFC 1918 |
| 192.168.0.0/16 | 192.168.0.0 – 192.168.255.255 | privada, RFC 1918 |
| 100.64.0.0/10 | 100.64.0.0 – 100.127.255.255 | NAT de operadora, RFC 6598 |
| 169.254.0.0/16 | 169.254.0.0 – 169.254.255.255 | link-local, RFC 3927 |
| 255.255.255.255/32 | endereço único | broadcast limitado |
As faixas da RFC 1918 nunca são roteadas na internet pública, e é isso que as torna seguras para alocar. As outras três aparecem por motivos diferentes.
100.64.0.0/10 é espaço de NAT de operadora (carrier-grade NAT). Se o seu provedor te entrega um endereço dessa faixa, você está atrás do NAT dele e nenhuma conexão de entrada vai te alcançar sem um túnel. Não é espaço privado no sentido da RFC 1918 e não serve para um plano de endereçamento interno, porque o provedor pode já estar usando essa faixa do outro lado do seu roteador.
169.254.0.0/16 é link-local. Um host atribui um desses a si mesmo quando o DHCP falha, então ver um endereço 169.254 numa interface é um diagnóstico, não uma configuração: nada respondeu à requisição DHCP. O tráfego para esses endereços nunca atravessa um roteador.
Para exemplos em documentação e runbooks, a RFC 5737 reserva 192.0.2.0/24, 198.51.100.0/24 e 203.0.113.0/24 justamente para que um exemplo copiado não aponte para um host de verdade.
172.16.0.0/12 são dezesseis /16s, não um só
Essa é a faixa reservada que as pessoas erram, e o prefixo explica o porquê. Um /12 toma quatro bits emprestados do segundo octeto, então o bloco vai de 172.16.0.0 até 172.31.255.255, ou seja, dezesseis /16s consecutivos, e não apenas 172.16.x.x.
As consequências vão nos dois sentidos. Um endereço como 172.20.5.1 é privado, bem dentro da faixa, mesmo não começando com 172.16. E 172.15.x.x e 172.32.x.x são endereços públicos que pertencem a outra pessoa, de modo que uma regra de firewall ou uma verificação do tipo “confie na faixa interna” escrita contra 172.0.0.0/8 passa a confiar silenciosamente numa fatia enorme da internet.
Se você precisa confirmar uma fronteira dessas, o guia rápido dá a aritmética: um /12 tem 2^(32−12) endereços, o segundo octeto anda em passos de 256 − 240 = 16, e 16 + 16 = 32, então o bloco termina imediatamente antes de 172.32.0.0.
VLSM: dividindo um bloco em sub-redes desiguais
Sub-redes de tamanho igual são fáceis e quase sempre erradas. Um escritório filial que recebeu um único 192.168.1.0/24 pode precisar de quatro segmentos sem nada em comum: cem estações de trabalho, cinquenta telefones, uma dúzia de servidores e um punhado de interfaces de gerência. Divida o /24 em quatro /26s iguais e o segmento das estações estoura em 62 hosts, enquanto o de gerência guarda 62 endereços para atender dez dispositivos.
Variable Length Subnet Masking (máscara de sub-rede de comprimento variável) significa dar a cada segmento um prefixo do tamanho que ele precisa. Abaixo, o mesmo /24 recortado em um /25, um /26 e dois /28s.
Aloque do maior para o menor. Cada bloco precisa começar num múltiplo do próprio tamanho, então o maior escolhe primeiro:
| Segmento | Hosts necessários | Prefixo | Rede | Faixa utilizável | Broadcast | Máscara de sub-rede |
|---|---|---|---|---|---|---|
| Estações de trabalho | 100 | /25 | 192.168.1.0 | 192.168.1.1 – 192.168.1.126 | 192.168.1.127 | 255.255.255.128 |
| Voz | 50 | /26 | 192.168.1.128 | 192.168.1.129 – 192.168.1.190 | 192.168.1.191 | 255.255.255.192 |
| Servidores | 12 | /28 | 192.168.1.192 | 192.168.1.193 – 192.168.1.206 | 192.168.1.207 | 255.255.255.240 |
| Gerência | 10 | /28 | 192.168.1.208 | 192.168.1.209 – 192.168.1.222 | 192.168.1.223 | 255.255.255.240 |
| não alocado | — | /27 | 192.168.1.224 | 192.168.1.225 – 192.168.1.254 | 192.168.1.255 | 255.255.255.224 |
O método de três passos, linha a linha:
- O /25 tem tamanho de bloco
256 − 128 = 128, então começa em 0 e seu broadcast é0 + 128 − 1 = 127. Utilizáveis de 1 a 126, ou seja, 126 endereços, suficiente para 100 estações com sobra. A linha /25 do guia rápido concorda: 128 no total, 126 utilizáveis. - O próximo endereço livre é 128. O /26 tem tamanho de bloco 64, e 128 é múltiplo de 64, então cabe: rede 192.168.1.128, broadcast
128 + 64 − 1 = 191, utilizáveis de 129 a 190. São 62 utilizáveis para 50 telefones. Linha /26 do guia rápido: 64 no total, 62 utilizáveis. - O próximo livre é 192. O /28 tem tamanho de bloco 16, e
192 = 16 × 12, então cabe: rede 192.168.1.192, broadcast 207, utilizáveis de 193 a 206, ou 14 endereços para 12 servidores. Linha /28 do guia rápido: 16 no total, 14 utilizáveis. - O próximo livre é 208, e
208 = 16 × 13, então o segundo /28 pousa em 192.168.1.208, com broadcast 223 e utilizáveis de 209 a 222.
Isso dá conta de 128 + 64 + 16 + 16 = 224 dos 256 endereços, deixando de 192.168.1.224 a 192.168.1.255. Esses 32 endereços formam exatamente um /27 alinhado, que é de onde sairiam depois os enlaces ponto a ponto: dezesseis /31s cabem ali dentro, um por enlace de roteador.
Fazer na ordem inversa custa caro. Suponha que você coloque os dois /28s no começo: 192.168.1.0/28 e 192.168.1.16/28. O próximo endereço livre é 192.168.1.32, e um /25 precisa começar num múltiplo de 128, logo não pode começar ali. Ele tem de pular para 192.168.1.128. Os endereços de 32 a 127 não se perdem, mas só ficam aproveitáveis como pedaços alinhados menores (um /27 em 192.168.1.32 e um /26 em 192.168.1.64), de modo que o espaço restante acaba espalhado em vez de ficar num único bloco contíguo no topo. Acrescente mais um segmento ao pedido e a mesma manobra já não cabe.
Ordenar por tamanho evita isso. Depois que você coloca um bloco, o próximo endereço livre é múltiplo do tamanho daquele bloco, e um múltiplo de uma potência de dois maior é automaticamente múltiplo de todas as menores, então cada bloco seguinte, sendo menor, fica alinhado onde quer que o anterior tenha terminado. Você nunca precisa pular. Antes de levar um plano desses para um switch, passá-lo pela tabela de divisão da calculadora de sub-redes é mais rápido do que conferir o alinhamento de cada segmento na mão.
Cinco erros que sobrevivem até a produção
1. Tratar o endereço digitado como endereço de rede
Sintoma: uma regra de firewall não casa com nada, ou uma rota cobre a metade errada de um segmento.
Causa: 192.168.1.130/26 foi lido como rede 192.168.1.0, broadcast 192.168.1.255, a fronteira do /24, porque é ela que as pessoas enxergam em decimal.
Correção: aplique o passo 2. Tamanho do bloco 64, 130 ÷ 64 arredonda para baixo dando 2, então a rede é 2 × 64 = 128. O bloco vai de 192.168.1.128 a 192.168.1.191, e 192.168.1.0 é outra sub-rede completamente. Sempre que um prefixo for mais longo que /24, presuma que o endereço recebido é um endereço de host até você tê-lo mascarado.
2. Aplicar 2ⁿ − 2 a um /31
Sintoma: uma ferramenta de IPAM ou uma planilha reporta 0 hosts utilizáveis para um enlace ponto a ponto que está no ar e passando tráfego. Causa: a regra do menos dois pressupõe que existam um endereço de rede e um de broadcast para subtrair. Num /31 eles não existem. Correção: trate /31 e /32 como as condições de contorno da fórmula, não como anomalias. A RFC 3021 torna atribuíveis os dois endereços de um /31, e um /32 é uma rota de host único com um endereço. Qualquer coisa que reporte 0 ou −1 aplicou a fórmula fora do domínio dela. Confira antes o suporte a /31 na interface específica, já que a exceção só vale em enlaces genuinamente ponto a ponto.
3. Tratar 172.16.0.0/12 como se fosse só 172.16.x.x
Sintoma: um serviço interno fica inacessível a partir de um escritório, ou uma regra de “bloquear todas as faixas privadas” vaza. Causa: o /12 foi lido como se fosse um /16. Correção: a faixa vai de 172.16.0.0 a 172.31.255.255. Escreva ACLs e listas de permissão contra o prefixo 172.16.0.0/12, não contra um padrão de octeto, e lembre que 172.15.x.x e 172.32.x.x ficam fora dela, na internet pública. Se estiver comparando na mão, o segundo octeto é o octeto de fronteira e ele anda de 16 em 16.
4. Colar uma wildcard num campo que quer máscara de sub-rede
Sintoma: uma ACL permite muito mais, ou muito menos, do que se pretendia, e nada na configuração parece errado. Causa: as ACLs do IOS e as instruções network do OSPF pegam a wildcard enquanto o ASA pega a máscara de sub-rede, e 0.0.0.63 e 255.255.255.192 são visualmente intercambiáveis numa olhada rápida. Correção: confira o campo antes de colar, não depois. Um sinal útil: para qualquer prefixo de /8 ou mais longo, uma máscara de sub-rede começa com 255 e uma wildcard começa com 0. Se um valor numa ACL ou numa instrução network do OSPF começa com 255, é uma máscara de sub-rede num campo de wildcard.
5. Escrever uma máscara não contígua, ou gerar uma sem querer
Sintoma: um equipamento rejeita uma linha de configuração, ou um script caseiro produz máscaras que parecem plausíveis e estão erradas. Causa: um valor como 255.0.255.0 não é máscara de sub-rede válida: tem um buraco. A versão via script é mais sutil: em JavaScript, os operadores de deslocamento tomam o operando da direita módulo 32, então um prefixo fora da faixa produz silenciosamente uma máscara errada de aparência plausível (33 vira /1, −1 vira /31) em vez de lançar erro. Correção: valide a faixa do prefixo antes de deslocar, e rejeite qualquer máscara que não seja um bloco sólido de 1s seguido de 0s. Uma biblioteca que levanta erro diante de entrada ruim vale mais aqui do que uma que adivinha, porque os dois modos de falha são silenciosos.
FAQ
Qual é a diferença entre uma sub-rede e uma VLAN?
Uma VLAN é um domínio de broadcast de camada 2 configurado nos switches; uma sub-rede é uma faixa de endereços de camada 3. Em geral são mapeadas uma para uma, mas nada obriga isso: você pode colocar duas sub-redes numa VLAN, ou trunkar uma VLAN entre sites. Renumere a sub-rede e o ID da VLAN continua o mesmo.
Quantas sub-redes eu ganho ao dividir um /24 em /26s?
Quatro. A conta é 2 elevado ao número de bits emprestados, e o /26 é dois bits mais longo que o /24, então dá 2² = 4 sub-redes de 64 endereços cada. Cada filha reserva o próprio endereço de rede e de broadcast, então os quatro /26s comportam 248 endereços utilizáveis contra os 254 do /24 pai.
A notação CIDR funciona igual no IPv6?
A barra continua contando os bits iniciais de rede, então /64 significa 64 bits de rede dentre 128. O que não se transfere é a regra do menos dois: o IPv6 não tem endereço de broadcast, então nada é subtraído do total. O guia rápido acima e a calculadora por trás dele são só para IPv4.
O que significa 0.0.0.0/0?
Zero bits de rede, então ele casa com todo endereço IPv4. Numa tabela de roteamento é a rota padrão, usada quando nenhum prefixo mais específico casa. Como endereço de bind, significa “todas as interfaces”, então um serviço escutando em 0.0.0.0 fica acessível a partir de toda rede à qual a máquina está conectada.
O que acontece se duas sub-redes da mesma rede se sobrepõem?
Os roteadores escolhem a rota mais específica, já que o encaminhamento sempre prefere o prefixo mais longo que casa, enquanto os hosts dentro da sobreposição discordam sobre quais destinos são locais. O sintoma é parcial: alguns destinos funcionam e outros não, e quais são muda conforme o ponto de onde você testa.
Por que os endereços de classe A, B e C foram substituídos pelo CIDR?
Porque as classes ofereciam só três tamanhos: /8, /16 e /24. Uma organização que precisava de 300 endereços tinha de pegar uma classe B e desperdiçar quase tudo, ou rodar duas rotas classe C. O CIDR permitiu que um prefixo tivesse qualquer comprimento, o que desacelerou o esgotamento de endereços e deixou os provedores resumirem muitos blocos de clientes numa rota só.
Posso dividir uma faixa privada como 192.168.0.0/16 do jeito que eu quiser?
Pode. O espaço da RFC 1918 é seu para dividir em qualquer comprimento de prefixo e ninguém fora da sua rede enxerga isso. A restrição é interna: sobrepor com a rede de um parceiro ou com uma VPC de nuvem à qual você venha a se conectar depois é caro de desfazer, e por isso os planos costumam evitar os blocos que todo roteador doméstico já usa.
O que levar daqui: o prefixo conta bits de rede, e o tamanho do bloco é 256 − o octeto de fronteira da máscara. Arredonde o endereço para baixo até um múltiplo do tamanho do bloco para achar a rede, e some o tamanho do bloco menos um para achar o broadcast. Subtraia dois pelo par reservado, mas só quando um /31 ou /32 já não tiver removido o motivo de subtrair. Mantenha a wildcard e a máscara de sub-rede separadas pelo formato de cada uma. Aloque blocos grandes antes dos pequenos.
Nada disso precisa de ferramenta depois que entra na mão, que é o motivo de fazer o exercício no papel. Para checar um plano antes de ele chegar a um roteador, ou para ler a fronteira binária de um bloco de relance, a calculadora de sub-redes faz a aritmética localmente no seu navegador.