Um endereço IPv4 é um único número de 32 bits, e todo header IPv4 carrega dois, o Source Address e o Destination Address, como os define a (RFC) 791 (RFC 791, seções 2.3 e 3.1). Pontos, classes e a barra do Classless Inter-domain Routing () são formas de ler esse número, presente em toda interface, rota e log. Ao final, você consegue converter um endereço para binário e inteiro, aplicar a máscara como o host faz, ler os blocos de uso especial da Internet Assigned Numbers Authority (), seguir os endereços pelos Regional Internet Registries (RIRs), datar o fim do estoque livre e ver tudo isso num host.

Trinta e dois bits, escritos como quatro números

A RFC 791 é direta: "Addresses are fixed length of four octets (32 bits)", tamanho fixo de 32 bits (RFC 791, seção 2.3). O bit 0, o da esquerda, é o mais significativo, e o octeto mais significativo vai primeiro (apêndice B). A notação decimal com pontos escreve cada octeto, um byte, como um número de 0 a 255 (RFC 3986, seção 3.2.2), e o endereço é o inteiro formado pelos quatro bytes:

192.0.2.10 = 11000000.00000000.00000010.00001010
           = 192*2^24 + 0*2^16 + 2*2^8 + 10
           = 3221225472 + 0 + 512 + 10
           = 3221225994 = 0xc000020a

Uma captura mostra os mesmos bytes em hexadecimal. O espaço tem 2³² = 4.294.967.296 endereços (RFC 4632, seção 3.1); os exemplos usam os blocos de documentação 192.0.2.0/24, 198.51.100.0/24 e 203.0.113.0/24 (RFC 5737, seção 3).

Parte de rede, parte de host e a máscara

O CIDR escreve a divisão depois de uma barra: o endereço e "a decimal value between 0 and 32 that describes the number of significant bits", quantos bits contam (RFC 4632, seção 3.1). Esses bits são o prefixo de rede, "a contiguous set of bits at the more significant end of the address that defines a set of systems; host numbers select among those systems", bits contíguos à esquerda (RFC 1812, seção 2.2.5.2). O host usa a máscara para uma só decisão, obrigatória pela RFC 1122: "If the IP destination address bits extracted by the address mask match the IP source address bits extracted by the same mask, then the destination is on the corresponding connected network, and the datagram is to be transmitted directly to the destination host", se coincidem, entrega direta. Senão, "If not, then the destination is accessible only through a gateway", só por um gateway (RFC 1122, seção 3.3.1.1). Aplicar a máscara é um AND binário (Documentação do Python 3.14, ipaddress), aqui para um host em 198.51.100.77/26:

endereço  198.51.100.77    11000110.00110011.01100100.01001101
máscara   255.255.255.192  11111111.11111111.11111111.11000000   /26, máscara de host 0.0.0.63
AND       198.51.100.64    11000110.00110011.01100100.01000000   endereço de rede
bits de host todos em 1    198.51.100.127                        endereço de broadcast
2^6 = 64 endereços, 62 hosts utilizáveis: 198.51.100.65 a 198.51.100.126

para 198.51.100.100   01100100 AND 11000000 = 01000000 = 64    mesma rede: envio direto
para 198.51.100.130   10000010 AND 11000000 = 10000000 = 128   outra rede: vai pelo gateway

O tráfego externo ao enlace vai ao default gateway; Como funciona a notação CIDR e Fundamentos de subnetting partem daqui.

As classes, e por que acabaram

Antes do CIDR, os bits iniciais fixavam a divisão; a RFC 791 definiu três classes em setembro de 1981: "in class a, the high order bit is zero", a classe a começa com o bit 0; a b, com 10; a c, com 110 (RFC 791, seção 2.3). A RFC 1112 deu 1110 à classe D, os grupos multicast de 224.0.0.0 a 239.255.255.255, e reservou 1111 como classe E (RFC 1112, seção 4); a classe D sobrevive como multicast. Tamanhos segundo a RFC 4632, com o padrão da classe A corrigido pela errata 3485 para um só 0 inicial (RFC 4632, seção 2; errata da RFC 4632):

bits iniciais  primeiro octeto  classe  tamanho
0              0 a 127          A       128 redes, 16.777.216 sistemas finais cada
10             128 a 191        B       16.384 redes, 65.536 sistemas finais cada (menos valores reservados)
110            192 a 223        C       2.097.152 redes, 254 sistemas finais cada
1110           224 a 239        D       grupos multicast de hosts
1111           240 a 255        E       reservada

Em janeiro de 1992, um grupo da Internet Engineering Task Force () apontou três problemas: a classe B se esgotando, porque nenhuma classe servia a uma organização média; tabelas de roteamento além da capacidade dos roteadores; e o espaço de 32 bits rumo à exaustão (RFC 4632, seção 2). O CIDR, especificado na RFC 1519 em setembro de 1993 (RFC 1519, seção 1), trocou as classes por prefixos de qualquer tamanho potência de dois (RFC 4632, seções 3 e 3.1), e hoje "they are used as generalized unicast network prefixes with only historical interest in their class", classe é só história (RFC 1812, seção 4.2.2.11).

Endereços com significado fixo

A RFC 1122 escreve endereços como campos de rede e de host, com -1 para todos os bits em 1 (RFC 1122, seção 3.2.1.3):

  • { 0, 0 }, 0.0.0.0, é este host nesta rede, e "MUST NOT be sent, except as a source address as part of an initialization procedure by which the host learns its own IP address", só como origem, ao iniciar.
  • { -1, -1 }, 255.255.255.255, é o broadcast limitado: nunca é origem nem sai do enlace.
  • { network, -1 } é o broadcast dirigido a uma rede, também nunca origem.
  • { 127, <any> }, todo o 127.0.0.0/8, é loopback: "Addresses of this form MUST NOT appear outside a host", nunca fora do host.

Campos de host só com zeros ou só com uns ficam reservados, e um /24 tem 254 hosts (RFC 1812, seção 4.2.2.11), salvo que "In a point-to-point link with a 31-bit subnet mask, the two addresses above MUST be interpreted as host addresses", no /31, ambos são hosts (RFC 3021, seção 2.1).

O registro da IANA guarda todo bloco de uso especial (RFC 6890, seção 1) em colunas de sim ou não (origem, destino, encaminhável, globalmente alcançável, reservado por protocolo) e avisa: "Address prefixes listed in the Special-Purpose Address Registry are not guaranteed routability in any particular local or global context", roteabilidade não garantida (IANA, IPv4 Special-Purpose Address Space). As linhas principais:

BlocoNome no registroDefinido em
0.0.0.0/8This networkRFC 791
10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16Private-UseRFC 1918
100.64.0.0/10Shared Address SpaceRFC 6598
127.0.0.0/8LoopbackRFC 1122
169.254.0.0/16Link LocalRFC 3927
192.0.2.0/24, 198.51.100.0/24, 203.0.113.0/24TEST--1 a TEST-NET-3RFC 5737
240.0.0.0/4ReservedRFC 1112
255.255.255.255/32Limited BroadcastRFC 919

Entre empresas, "packets with private source or destination addresses should not be forwarded across such links", privado não cruza esses enlaces (RFC 1918, seção 3), e um pacote link-local "MUST NOT be sent to any router for forwarding", nunca vai a um roteador (RFC 3927, seção 2.7). Espaço de endereços IPv4 privados e a RFC 1918 e Faixas de IP privadas, reservadas e públicas vão mais fundo.

Quem distribui os endereços

Na raiz, "The Internet Assigned Numbers Authority (IANA) is a role, not an organization", função, não organização (RFC 7020, seção 3). A IANA aloca aos RIRs blocos /8 de 2²⁴ endereços; os RIRs alocam ou atribuem blocos menores a Local Internet Registries (LIRs) ou Internet Service Providers (ISPs): alocar é delegar espaço para nova delegação, atribuir é entregá-lo a um site que numera os próprios hosts (RFC 4632, seção 3.1). A RFC 7020 nomeia cinco RIRs (seção 3); o registro da IANA mostra os /8 de cada um, e nenhuma das suas 256 linhas está sem alocação (IANA, IPv4 Address Space):

RIRRegião/8 recebidos da IANA
AFRINICÁfrica4
APNICpartes da Ásia e a região do Pacífico45
ARINAmérica do Norte e partes do Caribe36
(Latin American and Caribbean Internet Address Registry)América Latina e partes do Caribe9
RIPE NCCEuropa, partes da Ásia e o Oriente Médio35

O dia em que o estoque livre acabou

Uma política global ratificada em 6 de março de 2009 (aviso de ratificação) prometia a cada RIR um último /8 quando o estoque da IANA chegasse a um mínimo (a política). Em 31 de janeiro de 2011, a IANA alocou 39/8 e 106/8 ao APNIC, o que acionou a regra; em 3 de fevereiro de 2011 saíram os cinco últimos /8, um por RIR, e a IANA ficou sem IPv4 para alocar (comunicado do esgotamento; ARIN, 3 de fevereiro de 2011; IANA, IPv4 Address Space). Os RIRs vieram depois:

  • 15 de abril de 2011: o APNIC chegou ao último /8 (APNIC).
  • 14 de setembro de 2012: o RIPE NCC começou a alocar do último /8 (RIPE NCC).
  • 10 de junho de 2014: o LACNIC, com um /10, deu o IPv4 por esgotado na região (aviso de esgotamento).
  • 24 de setembro de 2015: o ARIN entregou os últimos endereços do estoque livre (ARIN).
  • 25 de novembro de 2019: o RIPE NCC anunciou "The RIPE NCC has run out of IPv4 Addresses", o fim do seu estoque de IPv4 (RIPE NCC).
  • 28 de agosto de 2020: o LACNIC anunciou a reserva do último bloco (LACNIC).
  • AFRINIC: fase 2 do soft-landing desde 13 de janeiro de 2020, ainda vigente em 18 de outubro de 2026 (AFRINIC).

O RIPE NCC acrescenta que nem um mercado de transferências nem o uso maior do -grade network address translation () resolvem a falta (RIPE NCC, 25 de novembro de 2019). O NAT e o CGNAT esticam o espaço; Como funciona o endereçamento IPv6 e Como rodar IPv6 e IPv4 juntos mostram a saída.

Como o endereçamento dá errado

Uma máscara errada dá ao teste do host uma entrada ruim (RFC 1122, seção 3.3.1.1):

198.51.100.77/24 para 198.51.100.130   ambos dão 198.51.100.0      envio direto, mas o destino não está no enlace
198.51.100.77/27 para 198.51.100.100   .64 contra .96, não batem   um vizinho de verdade vai pelo gateway

Dois hosts com o mesmo endereço num enlace causam problemas a um ou a ambos, e para isso existe a detecção de conflito (RFC 5227, resumo). Um endereço 169.254 é sintoma: o link-local serve a enlaces sem endereços estáveis e roteáveis (RFC 3927, resumo), então, numa rede gerenciada, a interface nunca foi configurada; o ipconfig mostra se um valor veio do Dynamic Host Configuration Protocol () ou do Automatic Private IP Addressing (APIPA) (Microsoft Learn, ipconfig), e o próximo passo é o ciclo de vida do lease.

Nenhum campo do header prova a origem. "A router SHOULD NOT forward, except over a loopback interface, any packet that has a source address on network 127", origem 127 não se encaminha (RFC 1812, seção 5.3.7), e a filtragem de entrada nas bordas enfraquece ataques de negação de serviço com origem forjada (RFC 2827, seção 6). O ataque Smurf juntou echo requests forjados a broadcasts dirigidos, e o alerta de 5 de janeiro de 1998 mandou desativar esses broadcasts em todos os roteadores (CA-1998-01). Em agosto de 1999, a RFC 2644 fez do bloqueio o default: "These options MUST default to blocking receipt and blocking forwarding of network-prefix-directed broadcasts", bloqueio por default (RFC 2644, seção 3).

Endereços também falham como texto. 10.0.258, 0xA000102 e 012.0x102 são o mesmo endereço (RFC 6943, seção 3.1.1), porque inet_aton() aceita partes decimais, octais e hexadecimais (inet(3)) e inet_pton() só decimal com pontos (inet_pton(3)). Daí a regra: "literals should be converted to numeric form and filtered based on the numeric value, and not on a prefix or suffix of the string form", filtre o número, nunca o texto (RFC 3986, seção 7.4). O ipaddress do Python tratava mal zeros à esquerda antes da 3.9.5, o que às vezes permitia contornar controle de acesso por endereço IP (CVE-2021-29921); hoje eles dão erro (Documentação do Python 3.14, ipaddress). Essas grafias alimentam o server-side request forgery (), uma busca não conferida contra o destino esperado (CWE-918); veja o que é SSRF e os truques de ofuscação de endereço.

Como ver na prática

No Linux, ip address show lista os endereços de cada interface com prefixo e escopo (host: válido só dentro deste host); -4 deixa só o IPv4 e -br imprime uma tabela (ip-address(8); ip(8)). Saída ilustrativa:

$ ip -br address show
lo               UNKNOWN        127.0.0.1/8 ::1/128
eth0             UP             192.0.2.10/24 2001:db8::10/64
$ ip -4 address show dev lo
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever

No Windows, ipconfig mostra os endereços, a máscara de sub-rede e o default gateway de cada adaptador, e ipconfig /all, a configuração completa (Microsoft Learn, ipconfig). O ipaddress do Python faz a mesma aritmética e conta como hosts os dois endereços de um /31 (Documentação do Python 3.14, ipaddress); o Playground de Python roda isso no navegador, em CPython 3.14.2, após um download único que você autoriza, e Python como calculadora vai além. Uma sessão resumida:

>>> import ipaddress
>>> a = ipaddress.IPv4Address('192.0.2.10')
>>> int(a), '{:#b}'.format(a)
(3221225994, '0b11000000000000000000001000001010')
>>> net = ipaddress.IPv4Interface('198.51.100.77/26').network
>>> net, net.broadcast_address, net.num_addresses
(IPv4Network('198.51.100.64/26'), IPv4Address('198.51.100.127'), 64)
>>> list(ipaddress.IPv4Network('203.0.113.200/31').hosts())
[IPv4Address('203.0.113.200'), IPv4Address('203.0.113.201')]
>>> ipaddress.IPv4Address('192.0.2.010')
Traceback (most recent call last):
  ...
ipaddress.AddressValueError: Leading zeros are not permitted in '010' in '192.0.2.010'

No fio, tcpdump -n -x net 192.0.2.0/24 imprime em hexadecimal os pacotes filtrados, com endereços numéricos e sem o header de enlace (tcpdump(1); pcap-filter(7)). Origem e destino vêm depois dos 12 primeiros bytes do header, quatro bytes cada (RFC 791, seção 3.1), como decodificado abaixo deste dump ilustrativo:

12:00:00.000000 IP 192.0.2.10 > 198.51.100.77: ICMP echo request, id 7, seq 1, length 64
	0x0000:  4500 0054 1c46 4000 4001 31d8 c000 020a
	0x0010:  c633 644d ...

bytes 13 a 16   c0 00 02 0a   192.0.2.10      Source Address
bytes 17 a 20   c6 33 64 4d   198.51.100.77   Destination Address

A Calculadora CIDR / de sub-redes transforma A.B.C.D/prefixo nos endereços de rede e de broadcast, máscara, máscara wildcard, faixa utilizável e contagens; 198.51.100.77/26 dá os números acima. Ela não diz se um bloco é privado ou de uso especial. O Classificador de URL para SSRF classifica o host de um link web, decodificando formas decimais, octais e hexadecimais sem resolver nem enviar nada: http://3221225994/ vira 192.0.2.10, uma faixa de documentação.

Para lembrar

  • Um endereço IPv4 é um número de 32 bits, escrito como quatro octetos decimais, o mais significativo primeiro.
  • O host aplica a máscara ao destino e ao próprio endereço: iguais, envio direto; diferentes, gateway.
  • 0.0.0.0 só é origem enquanto o host descobre o endereço, 127.0.0.0/8 nunca sai do host, 169.254.0.0/16 nunca é encaminhado.
  • A IANA, uma função, aloca /8 a cinco RIRs, que alocam a LIRs e ISPs ou atribuem a sites finais.
  • O estoque livre da IANA acabou em 3 de fevereiro de 2011; o do RIPE NCC, em 2019.
  • Compare endereços como números, nunca como texto, e não confie em origem nenhuma sem filtragem de entrada.

Esta série, em ordem

Este artigo abre a série Endereçamento IPv4 e subnetting. Com os 32 bits expostos, a série constrói a habilidade em ordem: o prefixo, a divisão de uma rede, sub-redes desiguais e uma atribuição completa resolvida do início ao fim, sobreposições e lacunas, a recombinação das rotas, e depois as faixas que não são públicas, a tradução de endereços que fez um endereço público servir milhares e a aritmética dessa divisão.

  1. Como funciona a notação CIDR. O que a barra em 192.168.1.0/24 significa, e como um comprimento de prefixo define um bloco de endereços.
  2. Fundamentos de subnetting. Dividir uma rede em redes menores, e por que tomar bits de host emprestados é o truque inteiro.
  3. VLSM: como dividir um bloco em sub-redes de tamanhos diferentes. Recortar um bloco em sub-redes de tamanhos diferentes sem desperdício, e a regra do maior primeiro.
  4. Uma alocação com VLSM, resolvida do começo ao fim. Uma atribuição completa para uma rede realista: dimensionar, ordenar, atribuir e contabilizar o que sobra.
  5. Sobreposições e lacunas de sub-redes. Quando prefixos se sobrepõem ou um contém o outro, por que o longest match torna algumas sobreposições deliberadas, e como achar as lacunas.
  6. Sumarização de rotas. Uma rota no lugar de muitas, a atribuição alinhada de que ela depende e o buraco negro de sumarizar um espaço que não é seu.
  7. Supernetting e agregação de rotas. A regra de alinhamento que decide se dois blocos se fundem, e a agregação exata contra um supernet que cobre tudo.
  8. Espaço de endereços IPv4 privados e a RFC 1918. As três faixas da RFC 1918, por que não são roteadas na internet e os outros blocos especiais.
  9. Faixas de IP privadas, reservadas e públicas. O mapa completo de que um filtro de SSRF precisa: privado, loopback, link-local, de operadora, documentação e público.
  10. NAT explicado: origem, destino, e por que a internet ainda funciona. O NAT de origem deixa milhares de hosts dividirem um endereço, o NAT de destino publica um serviço: como os dois reescrevem pacotes em trânsito.
  11. CGNAT: o que quebra quando mil assinantes dividem o mesmo endereço. A ponte para o IPv6 que virou permanente: o que o CGNAT muda no que os clientes podem rodar e em quem leva a culpa.
  12. Port blocks e port sets: a aritmética de dividir um endereço IPv4. Quantos assinantes cabem num endereço: port blocks, o mapeamento determinístico da RFC 7422 e os port sets da RFC 7597, número a número.

Fontes