Guia explicativo · Cálculo IPv6
IPv6: como calcular sub-redes e prefixos, explicado para provedores
IPv6 como calcular: subtraia o tamanho do prefixo atual do tamanho que você quer e eleve 2 a esse resultado, que é o número de sub-redes. Para escrever cada uma, ache o dígito hexadecimal onde o corte cai e some de um em um nesse dígito.
Resumo
- O número de sub-redes é 2 elevado à diferença entre os dois prefixos, como 2⁸ = 256 de /48 para /56.
- Cada dígito hexadecimal vale 4 bits, e a posição do corte é o tamanho do prefixo dividido por 4.
- Cortes fora de múltiplos de 4 pedem a conta em binário só no dígito dividido.
- A conta errada aparece como pool sobreposto, rota que engole o POP vizinho e filtro de borda furado.
IPv6 como calcular: a regra dos bits que sobram
Toda conta de sub-rede IPv6 parte da mesma regra: quantos bits separam o prefixo que você tem do prefixo que você quer distribuir. Com esse número na mão, quantidade, tamanho e posição de cada sub-rede saem de cabeça.
Calcular IPv6 é mais fácil do que parece, porque não existe máscara decimal nem conta de hosts por rede. A pergunta é sempre a mesma: cabem quantos pedaços de tamanho B dentro de um bloco de tamanho A? A resposta é 2 elevado a B menos A.
| Você tem | Quer distribuir | Bits de diferença | Quantidade |
|---|---|---|---|
| /32 do Registro.br | /40 por POP | 8 | 256 |
| /40 de um POP | /44 por concentrador | 4 | 16 |
| /44 de um concentrador | /56 por assinante | 12 | 4.096 |
| /48 de um cliente empresarial | /64 por VLAN | 16 | 65.536 |
| /56 da casa | /64 por rede interna | 8 | 256 |
| /60 de um piloto | /64 por rede | 4 | 16 |
Essas contas são a matéria-prima do plano de endereçamento IPv6, que decide quantos bits vão para região, POP e assinante. O papel de cada tamanho de prefixo na rede está explicado no guia de como funciona o endereçamento IPv6; aqui o foco é a conta.
E a quantidade de endereços, entra na conta?
Quase nunca. Uma rede /64 tem 2⁶⁴ endereços, cerca de 18,4 quintilhões, e nenhuma casa chega perto disso. No IPv6 se conta rede, não endereço.
Por isso a pergunta "quantos IPs eu preciso" do IPv4 vira "quantas redes cada nível precisa" no IPv6. Quem dimensiona pelo número de aparelhos acaba entregando prefixos pequenos demais.
Como calcular sub-redes IPv6 nos limites de 4 bits
Quando o novo prefixo é múltiplo de 4, cada sub-rede muda um dígito inteiro do endereço. Divida o prefixo por 4 para achar a posição do dígito e conte em hexadecimal de 0 a f.
- Expanda o endereço: escreva os grupos com os quatro dígitos, como 2001:0db8:3000:0000, para não errar a posição.
- Ache o dígito: um /40 termina no décimo dígito, porque 40 dividido por 4 dá 10.
- Conte a diferença: de /36 para /40 são 4 bits, ou seja, um dígito só, que vai de 0 a f.
- Liste as sub-redes: troque esse dígito por 0, 1, 2 e assim até f, mantendo o começo igual.
- Abrevie no fim: só depois de listar, tire os zeros à esquerda e use o :: onde couber.
Aplicando ao bloco 2001:db8:3000::/36, que no exemplo é a região 3 do provedor, o décimo dígito é o primeiro depois do 3. As 16 sub-redes /40 ficam assim:
bloco da região 2001:db8:3000::/36
dígito que muda 2001:0db8:3X00:: (X = décimo dígito)
POP 0 2001:db8:3000::/40
POP 1 2001:db8:3100::/40
POP 2 2001:db8:3200::/40
...
POP 15 2001:db8:3f00::/40O mesmo raciocínio vale em qualquer nível. Para tirar /44 do POP 2001:db8:3200::/40, o dígito que muda é o décimo primeiro, e as sub-redes são 2001:db8:3200::/44, 2001:db8:3210::/44, até 2001:db8:32f0::/44.
E quando o corte não cai num dígito inteiro?
Aí o dígito do corte é dividido entre a rede e o resto, e só esse dígito precisa ser lido em binário. O salto entre uma sub-rede e a próxima passa a ser 2, 4 ou 8 nesse dígito, em vez de 1.
Pense num /34 dentro do 2001:db8::/32. São 2 bits de diferença, então 4 sub-redes, mas os 2 bits ocupam só a metade de cima do nono dígito. Esse dígito anda de 4 em 4: 0, 4, 8 e c.
| Bits do dígito na rede | Exemplo de prefixo | Salto no dígito | Valores possíveis |
|---|---|---|---|
| 1 | /33 ou /37 | 8 | 0 e 8 |
| 2 | /34 ou /38 | 4 | 0, 4, 8 e c |
| 3 | /35 ou /39 | 2 | 0, 2, 4, 6, 8, a, c e e |
| 4 | /36 ou /40 | 1 | De 0 a f |
Com o salto na mão, a lista sai sem conversão: o /34 vira 2001:db8::/34, 2001:db8:4000::/34, 2001:db8:8000::/34 e 2001:db8:c000::/34. Um /38, que corta o décimo dígito em 2 bits, vira 2001:db8::/38, 2001:db8:400::/38, 2001:db8:800::/38, e assim por diante.
Prefere receber o bloco já calculado?
No plano de endereçamento IPv6, um Especialista faz todas as contas do seu /32, escolhe cortes que a equipe lê de cabeça e entrega cada faixa listada.
Hexadecimal para binário, só o dígito que importa
Cada dígito hexadecimal corresponde a quatro dígitos binários: 0 é 0000, 4 é 0100, 8 é 1000 e c é 1100. Num /34, os dois primeiros bits do nono dígito são da rede, e os dois últimos já pertencem a quem recebe a sub-rede.
É por isso que 2001:db8:5000::/34 não é uma sub-rede válida: o 5, em binário 0101, tem um bit ligado na parte que deveria estar zerada. O equipamento ou aceita e corrige sem avisar, ou recusa a configuração.
Como achar a sub-rede de número N
Converta N para hexadecimal e escreva o resultado nos dígitos reservados para aquele nível, completando com zeros à esquerda. O caminho inverso, do prefixo para o número, é a mesma conta ao contrário.
Exemplo de concentrador: o pool é 2001:db8:4a00::/44 e entrega /56. Entre /44 e /56 há 12 bits, ou seja, três dígitos hexadecimais, do décimo segundo ao décimo quarto. A sub-rede de número 300, contando a partir do zero, sai assim:
- Converta: 300 em decimal é 12c em hexadecimal.
- Complete: são três dígitos reservados, e 12c já tem três; o número 27 viraria 01b.
- Encaixe: o décimo segundo dígito é o último do terceiro grupo, então o 1 vai para 4a01 e o 2c abre o quarto grupo.
- Resultado: o assinante 300 do pool recebe 2001:db8:4a01:2c00::/56.
- Limite: a última sub-rede do pool, de número 4.095, é 2001:db8:4a0f:ff00::/56.
Para conferir sem depender da conta manual, a biblioteca ipaddress do Python, que vem com a linguagem, faz o mesmo cálculo em uma linha. Ela ajuda a revisar uma planilha inteira antes de a faixa ir para o concentrador.
python3 -c "
import ipaddress as ip
pool = ip.ip_network('2001:db8:4a00::/44')
n = 300
print(list(pool.subnets(new_prefix=56))[n])
print(pool[-1])
"
# saída esperada:
# 2001:db8:4a01:2c00::/56
# 2001:db8:4a0f:ffff:ffff:ffff:ffff:ffffExemplo: a conta de um provedor com três cidades
Um provedor com o /32 2001:db8::/32 atende três cidades, a maior com dois concentradores e cerca de cinco mil assinantes. O fluxo mostra como a conta desce de nível em nível.
/32 → /36
Uma faixa por cidade
4 bits dão 16 cidades; usa 2001:db8:1000::/36, 2001:db8:2000::/36 e 2001:db8:3000::/36.
/36 → /40
Uma faixa por POP
Mais 4 bits, até 16 POPs por cidade. O POP central da cidade 1 fica com 2001:db8:1000::/40.
/40 → /44
Um pool por concentrador
Cada /44 comporta 4.096 assinantes, então a cidade com cinco mil usa dois pools.
/44 → /56
Um prefixo por login
O assinante 27 do primeiro pool recebe 2001:db8:1000:1b00::/56, fixo no RADIUS.
Sobra espaço em todos os níveis: 13 cidades, 15 POPs por cidade e pools vazios ao lado, sem tocar no que já foi entregue.
Quando a conta errada vira problema na rede?
A conta errada não dá erro na hora da configuração: ela aparece semanas depois, quando dois pools se sobrepõem ou uma rota resumida passa a cobrir o POP vizinho. Por isso vale revisar cada faixa antes de aplicar.
- Pool sobreposto: dois concentradores entregam o mesmo /56, e dois assinantes disputam o prefixo de forma intermitente.
- Resumo largo demais: um POP anuncia um /36 quando deveria anunciar um /40, e atrai tráfego que é da cidade vizinha.
- Filtro de borda errado: a prefix-list aceita um tamanho a mais ou a menos, e o bloco sai incompleto ou vaza mais específico.
- Prefixo inválido: um /38 escrito com bit ligado na parte zerada é corrigido em silêncio pelo equipamento, e a faixa real fica diferente da planilha.
O filtro de borda é o ponto onde o erro sai da sua rede e chega à dos outros. O guia de configuração de prefix-lists mostra como escrever o filtro com os tamanhos certos.
Erros comuns ao calcular IPv6
Os erros abaixo aparecem até em equipes experientes, porque vêm do hábito de calcular em IPv4.
Evite
- Contar a partir do 1: a primeira sub-rede é a de número zero, e a lista inteira fica deslocada em uma posição.
- Calcular com o endereço abreviado: sem expandir os grupos, o dígito do corte é contado na posição errada.
- Confundir dígito com bit: de /44 para /56 são 12 bits, que equivalem a três dígitos, e não a doze.
- Planilha sem conferência: uma faixa digitada errado só aparece quando o primeiro assinante reclama.
Quando vale pedir a conta a um Especialista?
Vale quando o bloco ainda não tem divisão, quando a rede vai receber cidades novas ou quando o IPv6 foi ligado sem plano e os pools já se cruzam. A Táquion Tech calcula a divisão do bloco e entrega cada faixa conferida, antes de qualquer configuração em produção.
Com as faixas prontas, a entrega ao assinante segue o guia de DHCPv6 com prefix delegation, que amarra o prefixo calculado a cada login.
Perguntas frequentes
Quantos /56 cabem dentro de um /48?
Cabem 256, porque a diferença é de 8 bits e 2⁸ é 256. Isso significa que um cliente empresarial com /48 tem espaço equivalente ao de 256 casas com /56.
Existe calculadora de IPv6 confiável para usar?
Existem várias, inclusive ferramentas de linha de comando e a biblioteca ipaddress do Python. Use a calculadora para conferir, mas entenda a conta, porque é ela que mostra quando uma faixa da planilha está errada.
Como converter hexadecimal em binário de cabeça?
Decore os valores dos quatro bits de cada dígito: 8, 4, 2 e 1. O dígito a vale 10, ou 8 mais 2, que em binário é 1010; o c vale 12, ou 8 mais 4, que é 1100.
Por que a conta de sub-rede do IPv4 não serve no IPv6?
Porque no IPv4 se calcula quantos hosts cabem e se desconta rede e broadcast. No IPv6 a rede comum é sempre /64, não há broadcast, e a conta passa a ser só de quantas redes cada nível recebe.
Qual o primeiro e o último endereço de um prefixo IPv6?
O primeiro tem todos os bits depois do prefixo zerados, e o último tem todos esses bits ligados. No pool 2001:db8:4a00::/44, vão de 2001:db8:4a00:: até 2001:db8:4a0f:ffff:ffff:ffff:ffff:ffff.
Fontes
- RFC 5952, A Recommendation for IPv6 Address Text Representation: como abreviar o endereço depois de calcular, com zeros à esquerda e o uso do ::
- RFC 6177, IPv6 Address Assignment to End Sites: orientação sobre o tamanho do prefixo entregue a cada cliente final
- ipaddress, biblioteca padrão do Python: módulo usado no exemplo para listar sub-redes e conferir a sub-rede de número N