Endereços IP e sub-redes, sem enrolação
Sub-redes têm fama de chatas, mas na verdade são uma única ideia aplicada com coerência: um endereço é um número, e um prefixo diz quantos dos seus bits iniciais estão fixos. Quando isso cai a ficha, contagem de hosts, sobreposições e agregação saem de graça. Este guia cobre a aritmética, as faixas com significado especial e os pontos em que a intuição quebra.
Um endereço é um número; um prefixo é uma fronteira
Um endereço IPv4 é um único número de 32 bits. A forma com pontos que conhecemos é apenas esse número dividido em quatro bytes para olhos humanos: 192.168.1.10 é 3232235786. Tudo o que uma máscara de sub-rede faz é decidir onde cortar esse número — os bits iniciais identificam a rede, os finais identificam um host dentro dela.
A notação CIDR escreve o corte diretamente. `/24` significa que os primeiros 24 bits são a rede, deixando 8 para hosts; `/26` fixa 26 e deixa 6. A máscara 255.255.255.0 e o sufixo `/24` são a mesma afirmação escrita de dois jeitos, e o comprimento do prefixo é o modo mais útil de pensar: é uma contagem, então comparação e contenção viram pura aritmética de bits.
Lendo um prefixo: quantos endereços e quantos utilizáveis
Um prefixo de comprimento *n* em IPv4 contém 2^(32−n) endereços. Um `/24` guarda 256, um `/26` guarda 64, um `/30` guarda 4. Numa sub-rede de difusão normal, o primeiro endereço é o identificador de rede e o último é o de difusão, então os hosts utilizáveis são dois a menos: 254, 62 e 2, respectivamente. Esse último número é o motivo de enlaces ponto a ponto serem tradicionalmente `/30`.
As fronteiras não são arbitrárias: um prefixo sempre começa num múltiplo do próprio tamanho. Existe um `/26` em .0, .64, .128 e .192, e nada entre eles — 192.168.1.100/26 descreve na verdade o bloco que começa em 192.168.1.64. Dois prefixos ou se aninham por completo ou não se sobrepõem de jeito nenhum, e é isso que torna tabelas de roteamento e regras de firewall tratáveis.
As faixas que significam algo especial
Três faixas de IPv4 são reservadas para uso privado e não são roteadas na internet pública: 10.0.0.0/8, 172.16.0.0/12 (atenção: não é todo o 172.x) e 192.168.0.0/16. Ao lado delas, 127.0.0.0/8 é loopback, 169.254.0.0/16 é link-local — o endereço que uma máquina dá a si mesma quando o DHCP falha — e 100.64.0.0/10 é NAT de operadora, razão pela qual um dispositivo pode relatar um endereço "público" que ainda assim não é alcançável.
Saber disso vale mais que curiosidade. Logs cheios de 10.x indicam que o endereço do cliente foi capturado atrás de um proxy; um endereço 169.254 significa que a rede nunca subiu; e tratar 172.20.x como público porque "172 não é privado" é um erro real e recorrente. Quando há lista de permissões envolvida, verifique os limites da faixa, não o primeiro octeto.
O IPv6 muda a aritmética
Endereços IPv6 têm 128 bits, escritos como oito grupos de quatro dígitos hexadecimais, com uma única sequência de grupos zerados colapsável para `::` — uma vez por endereço, senão a expansão fica ambígua. Zeros à esquerda num grupo são opcionais, então o mesmo endereço tem muitas grafias válidas e comparação textual não serve. Normalize antes de comparar ou remover duplicatas.
As convenções também mudam. Um `/64` é o tamanho padrão de um enlace, então a pergunta "quantos hosts" deixa em boa medida de ser interessante; não há endereço de difusão nem par rede/difusão a subtrair. Prefixos continuam sendo faixas de bits aninhadas, então a agregação funciona exatamente como no IPv4 — só que os números são muito maiores.
Ordenar, agregar e comparar
Nunca ordene endereços como strings. Lexicograficamente, 10.0.0.9 vem depois de 10.0.0.100 e 9.0.0.1 vem depois de 10.0.0.1, então qualquer relatório ordenado assim está silenciosamente errado. Ordene pelo valor numérico — é o que faz blocos adjacentes ficarem lado a lado, o primeiro passo de toda agregação.
A agregação é o inverso da divisão: dois prefixos de mesmo comprimento que compartilham todos os bits menos o último se fundem num único prefixo um bit mais curto. Repetir isso transforma uma lista de permissões espalhada em um punhado de blocos, o que vale dinheiro de verdade em limites de regras e tempo de busca. Só lembre que uma faixa arbitrária de início a fim nem sempre é um único prefixo: cobrir exatamente 10.0.0.5–10.0.0.20 exige vários blocos, e arredondar para um `/27` bonitinho concede acessos que você não pretendia.
- `/24` = 256 endereços, 254 utilizáveis. `/26` = 64, 62 utilizáveis. `/30` = 4, 2 utilizáveis.
- Um prefixo começa num múltiplo do seu tamanho — 192.168.1.100/26 é o bloco em .64.
- Privados: 10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16. Link-local: 169.254.0.0/16. CGNAT: 100.64.0.0/10.
- Compare endereços numericamente, nunca como texto.