12k
All articles

Entendendo a Notação CIDR e Faixas de IP

CIDR, intervalos IP e cálculo de sub-redes para IPv4 e IPv6. Veja como ler prefixos, dimensionar redes e evitar sobreposição e regras abertas.

OpenReplay Team
OpenReplay Team
Entendendo a Notação CIDR e Faixas de IP

A notação CIDR é escrita como address/prefix, onde o prefixo é o número de bits iniciais fixados como a porção de rede — então, em 10.0.0.0/16, os primeiros 16 bits identificam a rede e os 16 restantes ficam livres para hosts.

A maioria das pessoas aprende isso do jeito difícil, por volta da terceira vez em que um security group bloqueia tráfego silenciosamente e o culpado acaba sendo um prefixo com um dígito errado. Essa única linha é quase tudo o que você precisa para parar de copiar e colar 10.0.0.0/16 em um arquivo Terraform e começar a realmente ler o valor. Este artigo apresenta o modelo mental, a matemática em dois passos para ir de um prefixo até uma faixa utilizável e a contagem de hosts, e os lugares onde um desenvolvedor web ou full-stack realmente encontra CIDR (dimensionamento de VPC, regras de security group, allowlists e redes de contêineres), incluindo as pegadinhas que quebram a conectividade silenciosamente.

Pontos Principais

  • A notação CIDR é address/prefix; o prefixo conta os bits iniciais de rede, não o total de bits do endereço.
  • A contagem de hosts utilizáveis de um bloco IPv4 é 2^(32 − prefix) − 2: um /24 dá 254, um /26 dá 62 e um /30 dá 2, subtraindo os endereços de rede e de broadcast.
  • 0.0.0.0/0 (IPv4) e ::/0 (IPv6) significam todos os endereços: uma regra de permissão com escopo 0.0.0.0/0 em SSH ou em uma porta de banco de dados expõe o serviço para a internet inteira.
  • A RFC 1918 reserva três faixas privadas que você vê constantemente em configurações de cloud e de contêineres: 10.0.0.0/8, 172.16.0.0/12 e 192.168.0.0/16.
  • Duas redes que você pretende conectar via peering ou VPN não podem usar blocos CIDR sobrepostos, ou o roteamento para endereços compartilhados se torna ambíguo.

O que é notação CIDR?

A notação CIDR (Classless Inter-Domain Routing) expressa uma rede como um endereço IP seguido de uma barra e um comprimento de prefixo, onde o comprimento do prefixo é a contagem de bits iniciais fixados como a porção de rede. Ela substituiu o rígido sistema de Classes A/B/C, permitindo que blocos tivessem qualquer tamanho em vez de se ajustarem obrigatoriamente a fronteiras de 8, 16 ou 24 bits. O esquema foi introduzido em 1993 pela RFC 1519 e consolidado na autoridade atual, a RFC 4632, em 2006. O prefixo não é o número total de bits do endereço, uma leitura equivocada comum. Em 192.168.129.23/17, o /17 significa que os primeiros 17 bits são bits de rede, deixando 15 para hosts.

O Modelo de Bits: Bits de Rede e Bits de Host

Um endereço IPv4 é um número de 32 bits dividido em quatro octetos de 8 bits, e o prefixo /n traça uma linha através desses 32 bits: tudo à esquerda da linha é rede fixa, tudo à direita é host variável. Mova a linha para a direita (um prefixo maior) e você obtém mais redes, menores; mova-a para a esquerda e obtém menos redes, maiores.

Considere 10.0.1.0/24. O /24 corta depois do terceiro octeto, então os primeiros 24 bits estão travados e os últimos 8 são seus:

00001010 . 00000000 . 00000001 . 00000000
└──────── network (24 bits) ──────┘ └ host ┘
   10          0          1        0–255

Esses 8 bits de host variam de 00000000 até 11111111: 256 combinações, de 10.0.1.0 até 10.0.1.255. O prefixo é a única coisa que decide onde o corte acontece.

Quantos hosts existem em um bloco CIDR?

O número de hosts utilizáveis em um bloco IPv4 é 2^(32 − prefix) − 2: um /24 dá 254, um /26 dá 62 e um /30 dá 2, sendo os dois endereços subtraídos o endereço de rede (todos os bits de host em 0) e o endereço de broadcast (todos os bits de host em 1), nenhum dos quais pode ser atribuído a um host. Calcule primeiro o total de endereços (2^(32 − prefix)) e depois subtraia dois.

PrefixoTotal de endereçosHosts utilizáveisOnde você encontra
/1665.53665.534Uma VPC inteira
/24256254Uma subnet padrão
/266462Uma camada dentro de uma subnet
/3042Link ponto a ponto
/3122Ponto a ponto (RFC 3021)
/3211Rota de host único

Duas exceções à regra do −2 importam na prática: um /31 fornece 2 endereços utilizáveis porque a RFC 3021 elimina a reserva de rede e broadcast em links ponto a ponto, e um /32 é uma rota de host único, a forma que você usa para nomear um IP exato em uma regra de firewall ou allowlist.

Lendo um Bloco CIDR no Mundo Real

Para ler um bloco como 10.0.1.0/24: o endereço de rede é 10.0.1.0, o broadcast é 10.0.1.255 e a faixa utilizável vai de 10.0.1.1 a 10.0.1.254. A receita tem quatro passos: (1) o prefixo diz quantos bits estão fixos; (2) coloque os bits de host restantes em 0 para obter o endereço de rede; (3) coloque-os em 1 para o broadcast; (4) tudo entre os dois é utilizável.

Para fazer o caminho inverso, de um requisito de hosts para um prefixo, escolha o menor bloco cuja contagem de utilizáveis atenda à sua necessidade. Precisa de espaço para 30 dispositivos? Um /27 dá 30 utilizáveis; um /28 dá apenas 14, então /27 é a resposta. Você pode confirmar qualquer bloco com o módulo ipaddress da biblioteca padrão do Python, sem necessidade de instalação:

python3 -c "import ipaddress; n=ipaddress.ip_network('10.0.1.0/24'); print(n.network_address, n.broadcast_address, n.num_addresses)"
# 10.0.1.0 10.0.1.255 256

Execute-o contra qualquer bloco para checar sua conta feita à mão antes de comprometê-la em uma configuração.

Se você preferir não abrir um terminal, a calculadora CIDR do OpenReplay faz a mesma expansão no navegador. Cole um bloco como 10.0.0.0/16 e ela retorna os endereços de rede e broadcast, a netmask e o wildcard, o primeiro e o último host utilizável e a contagem total de endereços. Ela lida com IPv4 e IPv6 e usa aritmética de inteiros grandes, então blocos grandes e faixas IPv6 voltam exatos. Tudo é calculado localmente, portanto faixas internas nunca saem da sua máquina.

Onde os Desenvolvedores Realmente Encontram CIDR

A maioria dos desenvolvedores encontra CIDR em configuração de cloud e de aplicações muito antes de encontrá-lo em uma tabela de roteamento. A RFC 1918 reserva três faixas privadas que você verá constantemente (10.0.0.0/8, 172.16.0.0/12 e 192.168.0.0/16), nenhuma das quais é roteável na internet pública, e é por isso que VPCs em cloud e redes Docker se baseiam nelas. Quatro padrões cobrem quase tudo com que você vai lidar:

  • Dimensionamento de VPC e subnets. Você define um bloco na criação e recorta subnets a partir dele. O bloco IPv4 de uma VPC da AWS deve estar entre /16 e /28, e cada subnet reserva os quatro primeiros endereços mais o último (cinco, não dois), então uma subnet /24 fornece 251 endereços utilizáveis na AWS, não 254. O −2 genérico é um teto, não uma garantia.
  • Regras de firewall e de security group. As regras têm escopo definido por um CIDR, por exemplo permitir entrada na 5432 apenas de 10.10.1.0/24, de modo que uma camada de banco de dados aceite tráfego Postgres da camada web e de nada mais.
  • Allowlists e denylists na configuração da aplicação. Origens CORS, regras de WAF, faixas de origem em API gateways e diretivas allow/deny do nginx todas aceitam blocos CIDR. Um prefixo muito estreito bloqueia silenciosamente clientes legítimos; session replays dessas implementações frequentemente revelam a falha como requisições bloqueadas ou com erro que remetem a um único prefixo errado.
  • A pegadinha dos CIDR sobrepostos. Duas redes que você pretende conectar via peering ou VPN não podem usar blocos CIDR sobrepostos, porque um host não pode ter duas rotas não ambíguas para o mesmo endereço. Dê a cada uma sua própria faixa RFC 1918 sem sobreposição, digamos 10.10.0.0/16 e 10.20.0.0/16.

Um valor vale a pena memorizar: 0.0.0.0/0 em IPv4 (e ::/0 em IPv6) significa todos os endereços. É útil para uma rota padrão, e um tiro no pé como regra de permissão de entrada: 0.0.0.0/0 na porta 22 ou 5432 é uma porta aberta para a internet inteira.

IPv6 Usa a Mesma Notação

O IPv6 aplica a notação de barra idêntica a endereços de 128 bits, e /64 é o tamanho padrão por subnet, deixando 64 bits para hosts dentro de cada subnet. Trate /64 como convenção, não como lei: não é um invariante universal, e mesmo a AWS permite netmasks de subnet IPv6 de /44 até /64 em incrementos de /4. A lógica de divisão de bits é exatamente a mesma. Apenas o endereço é mais longo.

Leia o prefixo como uma contagem de bits de rede, aplique 2^(32 − prefix) − 2 para hosts IPv4 utilizáveis, lembre-se das exceções de /31, /32 e das reservas de cloud, e mantenha redes conectadas por peering sem sobreposição. Faça isso e você conseguirá dimensionar uma subnet ou auditar uma regra de firewall sem recorrer a uma calculadora. Na próxima vez que um bloco CIDR aparecer em um pull request, interprete-o de imediato e verifique se aquele /0 realmente deveria estar ali.

Perguntas Frequentes

Qual é a diferença entre uma máscara de subnet como 255.255.255.0 e um prefixo CIDR como /24?

Ambos expressam a mesma fronteira de duas formas. Uma máscara de subnet é um valor de 32 bits em que os bits de rede são 1 e os bits de host são 0, então 255.255.255.0 em binário são 24 uns seguidos por 8 zeros. O prefixo CIDR /24 simplesmente conta esses bits 1 iniciais. 255.255.255.0 equivale a /24, 255.255.255.192 equivale a /26 e 255.255.255.252 equivale a /30. CIDR é a forma abreviada para a mesma máscara.

Quantos endereços IP utilizáveis um /30 fornece, e por que ele é comum em links ponto a ponto?

Um /30 fornece 2 endereços utilizáveis de 4 no total, porque os endereços de rede e broadcast continuam reservados sob a regra padrão do menos dois. Dois endereços utilizáveis é exatamente o suficiente para as duas extremidades de um link ponto a ponto, e é por isso que /30 era a escolha tradicional. A RFC 3021 mais tarde permitiu que /31 servisse ao mesmo propósito com 2 endereços utilizáveis de 2, eliminando a reserva de rede e broadcast e não desperdiçando nenhum endereço.

Duas subnets podem ter blocos CIDR sobrepostos na mesma rede?

Não se elas precisarem rotear entre si. Dentro de uma única tabela de roteamento, uma sobreposição é resolvida pelo longest prefix match: um pacote para 10.0.1.5 segue a rota 10.0.1.0/24 em vez da rota mais ampla 10.0.0.0/16, então o caminho nunca é ambíguo. O problema aparece quando você conecta duas redes que foram endereçadas independentemente. Uma conexão de peering entre duas VPCs que ambas usam 10.0.0.0/16 falha, porque cada lado já roteia esse bloco localmente e não tem como alcançar o outro. É por isso que VPC peering e VPNs site-to-site exigem faixas sem sobreposição. Atribua a cada rede seu próprio bloco RFC 1918 distinto desde o início.

Um número de prefixo menor significa uma rede maior ou menor?

Um número de prefixo menor significa uma rede maior. O prefixo conta bits fixos de rede, então menos bits de rede deixam mais bits de host livres. Um /8 tem 24 bits de host e mais de 16 milhões de endereços, enquanto um /24 tem 8 bits de host e 256 endereços. Conforme o número do prefixo diminui, o tamanho do bloco dobra a cada passo: um /23 contém o dobro de endereços de um /24, e um /16 contém 256 vezes mais que um /24.

Por que a AWS fornece apenas 251 endereços utilizáveis em uma subnet /24 em vez de 254?

A AWS reserva cinco endereços por subnet, não os dois que a regra genérica do menos dois pressupõe. A AWS retém os quatro primeiros endereços de todo bloco CIDR de subnet mais o último, para o endereço de rede, o roteador da VPC, DNS, uso futuro e broadcast. Portanto, um /24 com 256 endereços no total fornece 251 utilizáveis na AWS, contra 254 em um cálculo de rede simples. Sempre verifique as regras de reserva do seu provedor de cloud antes de dimensionar uma subnet de forma apertada.

Understand every bug

Uncover frustrations, understand bugs and fix slowdowns like never before with OpenReplay — self-hosted, with full data ownership.

Star on GitHub

We use cookies to improve your experience. By using our site, you accept cookies.