Redes

CIDR, sub-rede IPv4 e IPv6: o que a máscara faz em binário

Quase todo mundo decora a tabela: /24 é 255.255.255.0, /26 é 255.255.255.192. Mas máscara não é tabela, é aritmética binária. Cada campo que uma calculadora de sub-rede devolve (endereço de rede, broadcast, faixa de hosts, total de endereços) sai de uma única operação: o E lógico, bit a bit, entre o endereço e a máscara. Este é o guia conceitual: o que o CIDR realmente diz, como a máscara opera em binário, por que ela nasceu para substituir as antigas classes A/B/C e por que o IPv6 muda tudo ao abandonar o broadcast e o NAT. Se o seu objetivo é dividir uma rede de produção sem desperdício, o passo seguinte é o [subnetting com VLSM na prática](guide:subnetting-cidr-mascara-vlsm-na-pratica); aqui a gente monta a fundação. Cole qualquer prefixo na [calculadora de sub-rede](tool:calculadora-subrede) enquanto lê, ela roda tudo no navegador.

J-Kit15 min de leituraIntermediário
  • CIDR
  • Sub-rede
  • IPv4
  • IPv6
  • Binário

Resumo rápido

  • O prefixo /n diz quantos bits são de rede; a máscara é só esses n bits em 1 e os 32 − n restantes em 0. Em IPv4 o resto endereça hosts.
  • O endereço de rede é o E lógico (AND) bit a bit entre o IP e a máscara; o broadcast é o OU com o wildcard. Nada de decorar.
  • Hosts utilizáveis = 2^(32 − prefixo) − 2, tirando a rede e o broadcast, exceto no /31 (ponto a ponto) e no /32 (host único).
  • IPv6 usa 128 bits, dispensa broadcast (usa multicast) e NAT, e trata o /64 como a sub-rede padrão por causa do SLAAC.

O que o prefixo CIDR significa

CIDR (Classless Inter-Domain Routing) descreve, com um único número após a barra, quantos bits do endereço pertencem à rede. Um endereço IPv4 tem 32 bits no total. Um /24 reserva os 24 primeiros bits para a rede e deixa os 8 últimos para os hosts; um /26 reserva 26 e deixa 6. A palavra classless é o coração da ideia: antes do CIDR, o tamanho da rede era ditado pelo primeiro octeto (as classes A, B e C); com o CIDR, você escolhe o ponto de corte livremente, bit a bit. É isso que "sem classe" quer dizer.

A partir do prefixo, e só dele, a calculadora deriva todos os campos que você vê. Cada um tem um significado preciso:

Endereço de rede
O primeiro endereço do bloco (todos os bits de host em 0). Identifica a sub-rede e não é atribuído a nenhum host.
Broadcast
O último endereço (todos os bits de host em 1). Envia para todos os hosts da sub-rede de uma vez, existe só em IPv4.
Máscara
A forma decimal do prefixo: n bits em 1 seguidos de 32 − n bits em 0. Um /24 é 255.255.255.0.
Wildcard
O inverso da máscara (troca cada 0 por 1 e vice-versa). É o que marca os bits de host, útil em ACLs e para achar o broadcast.
Faixa de hosts
Do primeiro ao último endereço utilizável, entre a rede e o broadcast.

A máscara é uma operação binária, não uma tabela

Aqui está o que a maioria dos tutoriais esconde atrás da tabela decorada. Para achar o endereço de rede, o dispositivo faz um E lógico (AND), bit a bit, entre o endereço e a máscara. A regra do AND é simples: o resultado só é 1 quando os dois bits são 1. Onde a máscara tem 1 (bits de rede), o bit do IP passa intacto; onde a máscara tem 0 (bits de host), o resultado é sempre 0. É por isso que o endereço de rede tem todos os bits de host zerados, não por convenção, mas porque o AND os apaga. Veja com 192.168.10.77/26:

  IP     192.168.10.77   11000000.10101000.00001010.01001101
AND
  máscara /26           11111111.11111111.11111111.11000000   (255.255.255.192)
  mask    /26
= ------------------------------------------------------------
  rede    192.168.10.64  11000000.10101000.00001010.01000000
  network

// Só o último octeto muda: 01001101 (77) AND 11000000 = 01000000 (64).
// Only the last octet changes: 01001101 (77) AND 11000000 = 01000000 (64).
O E lógico entre o IP e a máscara zera os 6 bits de host e revela o endereço de rede: 192.168.10.64. O broadcast é o oposto, o OU (OR) com o wildcard 0.0.0.63.

O broadcast segue o mesmo raciocínio, invertido: faça o OU lógico (OR) entre a rede e o wildcard (a máscara invertida). Onde o wildcard tem 1, o bit vira 1; o resultado enche todos os bits de host com 1. Para o nosso exemplo, 192.168.10.64 OR 0.0.0.63 dá 192.168.10.127. Todo o resto, primeiro host, último host, contagem, é só andar entre essas duas fronteiras. Uma máscara nunca tem 1 e 0 misturados fora de ordem: ela é sempre uma sequência de 1s seguida de uma sequência de 0s. É isso que torna o prefixo (o número de 1s) suficiente para descrevê-la.

Quantos endereços cada prefixo comporta

O total de endereços de um prefixo IPv4 é 2 elevado ao número de bits de host. Como dois desses endereços não podem ser dados a um host (o primeiro é a rede, o último é o broadcast), os hosts utilizáveis são o total menos 2. Essa é a fórmula que a calculadora aplica em toda linha:

hosts_utilizaveis = 2^(32 − prefixo) − 2
prefixo / prefix
o número após a barra (0 a 32), quantidade de bits de rede
32 − prefixo
os bits de host restantes em IPv4
− 2
desconta o endereço de rede e o de broadcast
O expoente (32 − prefixo) é o número de bits de host. O "− 2" remove o endereço de rede e o de broadcast, que não são atribuíveis. A regra NÃO se aplica ao /31, onde a RFC 3021 libera os 2 endereços, nem ao /32, que é um host único.
Prefixos comuns de /24 a /30, com a máscara decimal, o total de endereços e os hosts utilizáveis. A cada bit a mais no prefixo, o bloco cai pela metade.
PrefixoMáscaraTotal de endereçosHosts utilizáveis
/24255.255.255.0256254
/25255.255.255.128128126
/26255.255.255.1926462
/27255.255.255.2243230
/28255.255.255.2401614
/29255.255.255.24886
/30255.255.255.25242

Repare no padrão: cada bit adicionado ao prefixo corta o bloco pela metade, 256, 128, 64, 32…, porque tira um bit do host. É uma queda exponencial, não linear. Um /30, com apenas 2 hosts, é o menor bloco que ainda respeita a regra do menos 2; é o clássico de enlaces ponto a ponto antes do /31 se popularizar.

Por que o CIDR existiu: o fim das classes

O IPv4 original (RFC 791, de 1981) dividia o espaço em classes fixas pelo valor do primeiro octeto: Classe A (1–126) reservava 8 bits de rede e dava 16 milhões de hosts; Classe B (128–191), 16 bits e 65 mil hosts; Classe C (192–223), 24 bits e só 254 hosts. O problema era grotesco. Uma empresa com 300 máquinas não cabia num /24 (Classe C, 254 hosts) e recebia um /16 (Classe B), desperdiçando mais de 65 mil endereços. Não havia meio-termo entre 254 e 65 mil. Ao mesmo tempo, cada rede virava uma linha na tabela de roteamento global, que crescia rápido demais.

O CIDR (RFC 1519, de 1993, hoje atualizada pela RFC 4632, de 2006) resolveu os dois problemas de uma vez. Ao permitir qualquer prefixo, ela deu o /23, o /22, o /20, os tamanhos intermediários que faltavam. E, ao alocar blocos de forma hierárquica por provedor, permitiu a agregação de rotas: um provedor anuncia um único prefixo grande no lugar de milhares de redes pequenas. A RFC 6890 mais tarde consolidou os blocos de propósito especial (loopback, documentação, privados) num registro único. E, antes disso, a RFC 1918 reservou as faixas privadas, 10.0.0.0/8, 172.16.0.0/12 e 192.168.0.0/16, que aliviaram a pressão ao permitir reutilizar endereços atrás de NAT. Quais faixas saem para a internet e quais ficam na LAN é o tema do guia IP público vs privado.

  1. 1981IPv4 e as classes (RFC 791)

    O endereçamento nasce classful: o primeiro octeto define se a rede é A, B ou C, tamanhos fixos, sem flexibilidade.

  2. 1993Nasce o CIDR (RFC 1519)

    Prefixos livres substituem as classes para conter o esgotamento e frear o crescimento da tabela de roteamento global.

  3. 1996Endereços privados (RFC 1918)

    As faixas 10/8, 172.16/12 e 192.168/16 são reservadas para uso interno, atrás de NAT, aliviando a demanda por IPs públicos.

  4. 2006CIDR consolidado (RFC 4632) e IPv6

    A RFC 4632 (BCP 122) vira a especificação atual do CIDR; em paralelo, o IPv6 amadurece com 128 bits para acabar de vez com a escassez.

  5. 3 fev 2011A IANA zera o estoque de IPv4

    A IANA aloca os últimos cinco blocos /8 aos registros regionais. O IPv4 acabou; a migração para o IPv6 deixa de ser opcional.

IPv4 e IPv6 lado a lado

A diferença começa no tamanho e reverbera em todo o resto. O IPv4 tem 32 bits: 2^32 = 4.294.967.296 endereços, cerca de 4,3 bilhões, menos de um por pessoa no planeta. O IPv6 tem 128 bits: 2^128 ≈ 3,4 × 10^38, um número tão grande que deixa de ter intuição humana. Um único /64 do IPv6 já contém 2^64 ≈ 1,8 × 10^19 endereços, mais de 4 bilhões de vezes toda a internet IPv4, numa só sub-rede. Curiosamente, um endereço IPv6 tem exatamente 128 bits, o mesmo tamanho de um UUID: 128 bits são suficientes para dar um identificador único a praticamente qualquer coisa.

2^32≈ 4,3 bilhões de endereços IPv4
2^128≈ 3,4 × 10^38 endereços IPv6
2^64endereços num único /64 (≈ 1,8 × 10^19)

IPv4

  • 32 bits, cerca de 4,3 bilhões de endereços, escassos.
  • Notação decimal com pontos: 192.168.1.10.
  • Tem endereço de broadcast por sub-rede.
  • NAT é onipresente para reaproveitar endereços privados.

IPv6

  • 128 bits, um espaço praticamente inesgotável.
  • Notação hexadecimal com dois-pontos: 2001:db8::1.
  • Sem broadcast; usa multicast (ff02::1 = todos os nós).
  • NAT deixa de ser necessário; cada host pode ter IP global.

Duas escolhas do IPv6 confundem quem vem do IPv4. A primeira: não há broadcast. A função de "falar com todos" passou para o multicast, com endereços reservados como ff02::1 (todos os nós do enlace) e ff02::2 (todos os roteadores). Isso evita o "storm" de broadcast e deixa o tráfego mais eficiente. A segunda: o prefixo de sub-rede padrão é o /64, e isso é quase uma lei. O motivo é o SLAAC (autoconfiguração sem estado, RFC 4862): o host monta seu próprio endereço juntando o prefixo /64 anunciado pelo roteador a um identificador de interface de 64 bits. A RFC 4291 exige 64 bits de identificador de interface para a maioria dos endereços unicast, por isso sub-redes menores que /64 quebram a autoconfiguração. Endereços link-local (fe80::/10) e os privados ULA (fc00::/7, na prática fd00::/8, RFC 4193) completam o quadro, cada um com seu papel, como os privados fazem no IPv4.

Por que o /31 é válido em enlaces ponto a ponto

Num enlace entre dois roteadores só existem duas pontas. Um /30 funcionava, mas gastava 4 endereços para usar 2, jogando fora a rede e o broadcast. A RFC 3021 percebeu que, num enlace com exatamente dois nós, o broadcast é redundante (mandar para "todos" é mandar para o outro), então ela reinterpreta os dois endereços de um /31 como hosts válidos. Resultado: 2 endereços, 2 hosts, zero desperdício. É a razão de a fórmula do menos 2 não valer aqui.

Por que quase toda sub-rede IPv6 é /64

Parece esbanjamento dar 2^64 endereços a uma LAN com dez dispositivos, mas o /64 não é sobre quantidade, é sobre o SLAAC. A autoconfiguração precisa de exatamente 64 bits para o identificador de interface (RFC 4862 e RFC 4291). Usar um prefixo maior que /64 numa rede de acesso quebra a autoconfiguração e muitos recursos do IPv6. A recomendação prática é: sub-redes de host são sempre /64; você varia o prefixo apenas ao dividir blocos maiores entre sites (por exemplo, dando um /48 ou /56 a cada local).

NAT não é firewall (e o IPv6 deixa isso claro)

Muita gente acha que o NAT do IPv4 "protege" a rede por esconder os IPs internos. Ele não protege: o NAT existe para economizar endereços, não para segurança. Quem bloqueia conexões de entrada é o firewall, com ou sem NAT. O IPv6, com endereços de sobra, dispensa o NAT e dá IP global a cada host, o que assusta quem confundia NAT com defesa. A resposta certa não é reintroduzir NAT no IPv6, e sim configurar um firmware/firewall com política de entrada padrão-negar. Segurança é regra de firewall; tradução de endereço é economia.

Dois exemplos trabalhados

Exemplo 1, IPv4. Dado 192.168.10.77/26, ache rede, broadcast, faixa útil e número de hosts. O /26 tem 6 bits de host (32 − 26), então o bloco tem 2^6 = 64 endereços e o tamanho do bloco é 64. O endereço 192.168.10.77 cai no bloco que começa em .64 (os blocos de um /26 são .0, .64, .128, .192, e 77 está entre 64 e 127). Fazendo o AND que vimos na seção binária, o endereço de rede é 192.168.10.64. O broadcast é o topo do bloco, .64 + 64 − 1 = .127. A faixa útil vai do primeiro host ao último: .65 até .126. E os hosts utilizáveis são 64 − 2 = 62.

192.168.10.64endereço de rede (IP AND máscara)
192.168.10.127broadcast (rede OR wildcard)
.65 – .126faixa de hosts utilizáveis
62hosts utilizáveis (64 − 2)

Exemplo 2, IPv6. Comprima e expanda 2001:0db8:0000:0000:0008:0800:200c:417a. A compressão tem duas regras: remova os zeros à esquerda de cada grupo (0db8 vira db8, 0008 vira 8, 0800 vira 800) e substitua a maior sequência de grupos totalmente zerados por dois-pontos duplos (::), o que só pode acontecer uma vez no endereço. Aqui os grupos 3 e 4 são 0000:0000 e viram ::. O resultado comprimido é 2001:db8::8:800:200c:417a, exatamente o exemplo canônico da RFC 4291. Para expandir, faça o inverso: o :: representa quantos grupos de zero faltam para chegar a 8 (aqui, dois), e cada grupo volta a ter 4 dígitos.

Expandido / Expanded:  2001:0db8:0000:0000:0008:0800:200c:417a
Comprimido / Compressed: 2001:db8::8:800:200c:417a

// Sub-rede / Subnet 2001:db8::/64
//   primeiro / first: 2001:db8::
//   último   / last : 2001:db8::ffff:ffff:ffff:ffff
//   total: 2^64 endereços de interface / interface addresses
Um /64 fixa os 64 bits de prefixo (2001:db8:0:0) e deixa os 64 bits finais para o identificador de interface, 2^64 endereços numa sub-rede só.
  • Confirme o número de bits de host: 32 − prefixo (IPv4) ou 128 − prefixo (IPv6).
  • Ache a rede com o AND entre o IP e a máscara; o broadcast é o topo do bloco.
  • Lembre do menos 2 em IPv4, exceto /31 e /32.
  • Ao comprimir IPv6, use o :: uma única vez, na maior sequência de zeros.
  • Mantenha sub-redes de host em /64 no IPv6 para não quebrar o SLAAC.
Digite 192.168.10.77/26 ou o endereço IPv6 acima: a calculadora mostra rede, broadcast, máscara, binário e a expansão IPv6, tudo no navegador, sem enviar nada.Abrir a ferramenta em página inteira

Com a fundação binária no lugar, o próximo passo é dividir uma rede real de tamanhos diferentes sem buracos nem sobreposições, é exatamente o que o subnetting com VLSM na prática mostra, passo a passo. Para descobrir o seu próprio prefixo e endereço agora, veja o Meu IP; para geolocalizar qualquer endereço, o Localizador de IP.

Perguntas frequentes

Por que um /24 tem 254 hosts e não 256?
Porque dos 256 endereços do bloco, o primeiro é o endereço de rede e o último é o broadcast; nenhum dos dois pode ser atribuído a um host, sobrando 254 utilizáveis. É a regra do 2^(32 − prefixo) − 2.
Como a máscara de sub-rede realmente funciona?
A máscara é uma sequência de 1s (bits de rede) seguida de 0s (bits de host). O dispositivo faz um E lógico (AND) bit a bit entre o IP e a máscara: onde a máscara é 1, o bit do IP passa; onde é 0, o resultado zera. Isso produz o endereço de rede. Não é uma tabela decorada, é aritmética binária.
Por que o CIDR substituiu as classes A, B e C?
As classes só ofereciam três tamanhos (256, 65 mil ou 16 milhões de hosts), o que desperdiçava endereços e inchava a tabela de roteamento. O CIDR (RFC 1519, de 1993, atualizada pela RFC 4632) permitiu qualquer prefixo e a agregação hierárquica de rotas, contendo o esgotamento do IPv4 e o crescimento das tabelas.
O IPv6 tem broadcast?
Não. O IPv6 abandonou o broadcast e usa multicast para as mesmas funções, por exemplo, ff02::1 alcança todos os nós do enlace e ff02::2, todos os roteadores. Isso reduz tráfego desnecessário e é uma das diferenças mais visíveis em relação ao IPv4.
Por que as sub-redes IPv6 são quase sempre /64?
Porque a autoconfiguração sem estado (SLAAC, RFC 4862) exige 64 bits para o identificador de interface, e a RFC 4291 fixa esse tamanho para a maioria dos endereços unicast. Um prefixo maior que /64 numa rede de host quebra o SLAAC. Você varia o prefixo só ao dividir blocos maiores entre sites, como um /48 ou /56.
O NAT do IPv4 é uma medida de segurança?
Não. O NAT existe para economizar endereços IPv4, não para proteger a rede. Quem bloqueia conexões de entrada é o firewall, com ou sem NAT. O IPv6 dispensa o NAT por ter endereços de sobra; a proteção continua sendo tarefa de um firewall com política de entrada padrão-negar.

Máscara é aritmética, não decoreba: o endereço de rede é o AND entre o IP e a máscara, o broadcast é o OR com o wildcard, e os hosts utilizáveis são 2^(32 − prefixo) − 2 (fora o /31 e o /32). O CIDR nasceu para acabar com o desperdício das classes A/B/C e frear a tabela de roteamento; o IPv6, com 128 bits, dispensa broadcast e NAT e adota o /64 por causa do SLAAC. Entendido o binário aqui, siga para o planejamento prático com VLSM.

Fontes e referências

  1. RFC 4632, Classless Inter-domain Routing (CIDR), BCP 122
  2. RFC 1519, CIDR: especificação original (1993)
  3. RFC 1918, Endereços privados IPv4, BCP 5
  4. RFC 4291, Arquitetura de endereçamento IPv6
  5. RFC 4193, Endereços IPv6 Unique Local (fc00::/7)
  6. RFC 4862, Autoconfiguração sem estado IPv6 (SLAAC)
  7. RFC 3021, Prefixos /31 em enlaces ponto a ponto