Archive
Blocos, prefixos e máscaras em IPv4
Introdução
Um IPv4 é usualmente repreentado como quatro números decimais separados por um “.“:
v.x.y.z
onde cada um dos v, x, y, z acima podem assumir valores de 0 a 255. Entretanto, internamente, cada v, x, y e z é representado em binário de 8 bits (1 byte), que agrupados possuem 4 x 8 = 32 bits. Então, o IPv4 168.66.0.30 é a representação decimal do binário:
10101000.01000010.00000000.00011110
Onde o ponto é um mero efeito didático para ilustrar cada um dos bytes do IPv4, do exemplo. Eventualmente podemos representar em hexadeximal:
A8.42.00.1E
onde o ponto continua mantendo o efeito didático, neste caso, também. Para nós é muito melhor a representação decimal.
Blocos, prefixos e máscaras
Quando um sistema autônomo recebe números IPv4 associados ao seu AS (Autonomous System), recebe-os na forma de um ou mais blocos, isto é, um conjunto de números IPsv4 organizados sequencialmente. Os blocos são caracterizados por um número precedido por uma /, no final do IPv4, chamado prefixo. Assim:
168.66.0.0/22
O prefixo identifica a quantidade de números na sequência que começa com o IPv4 168.66.0.0. O prefixo, também, caracteriza a máscara do bloco IPv4 recebido. Mais claramente, o prefixo informa o número de bits que a máscara possui. Assim, o prefixo /22 indica que a máscara possui 22 bits, isto é:
11111111.11111111.11111100.00000000
que em decimal é:
255.255.252.0
Tamanho dos blocos
A tabela abaixo representa o número de IPsv4 possue cada bloco formado pelos respectivos prefixos, até o prefixo /16.

O prefixo /24 está com sua linha e sua coluna em vermelho. O /24 é um prefixo muito interessante pois ele representa a máscara 255.255.255.0, a qual indica que o bloco tem 256 IPsv4! Adicionalmente, o prefixo /24 é interessante para determinar o tamanho dos outros prefixos. Na linha do /24 é possível ver que ele possui 256 x /32, 128 x /31, 64 x /30, …, 1 x /24 (claro!). Na coluna, temos que o /24 possui 1 x /24, o /23, 2 x /24 (512 IPsv4), o /22 possui 4 x /24 e assim sucessivamente!
Divisão dos blocos
Suponha que um AS tenha recebido um bloco /20. E que um cliente deste AS solicite um bloco /28 para sua rede. Quais IPsv4 devemos entregá-lo? Somente dividindo o /20 em prefixos maiores podermos responder a esta questão. Existem muitas formas de dividir um bloco /20. Vamos seguir aquela que divide os blocos pela metade e usar uma ferramenta como o XMind (https://www.xmind.net/), para apresentar esta divisão.
Um bloco /20 possui 16 blocos /24, segundo a tabela acima. Se o dividirmos em dois blocos /21, cada um deles terá 8 x /24. O primeiro bloco é o 168.66.0.0/21 e o segundo é o primeiro, mais 8 x /24: 168.66.8.0/21. Temos, então, a primeira divisão:

Vamos ao primeiro bloco /21 e dividí-lo em dois blocos /22. Um /22 possui 4 x /24, e continuar sucessivamente até /32, sempre focando no primeiro bloco da sequência. Então, o resultado final será:

Para melhorar a visibilidade, sem uso de qualquer ferramenta:

A aparência é de uma flecha…
Respostas a questões úteis
- A Internet fica sabendo que o bloco 168.66.0.0/20 é seu, através do anúncio deste bloco via o protoloco BGP (Border Gateway Protocol).
- Você pode anunciar o bloco /20 inteiro ou fazê-lo em blocos menores (i.e., prefixos maiores). A Internet, quando enviar um pacote para um de seus IPsv4, a entrada será por onde o anúncio de prefixos maiores foram feitos.
- O maior prefixo aceitável para anúncio é o /24. Você até pode tentar anunciar blocos com prefixos maiores, mas as boas práticas recomendam que anúncios de prefixos maiores do que /24 sejam bloqueados.
- Falando em boas práticas, vale a pena ver o Mutually Agreed Norms for Routing Security (MANRS => https://www.manrs.org), uma iniciativa da Internet Society (https://www.internetsociety.org).
- Cada bloco tem dois IPsv4 reservados: o primeiro IPv4 do bloco é aquele que identifica a rede e, o último bloco reservado para o broadcast.
- Se você precisa entregar, por exemplo, 497 IPsv4 para seus clientes precisará de um bloco /23 ou dois blocos /24. Se os blocos /24 forem contíguos, ótimo pois eles representam um /23 e perderá somente dois IPsv4. Se os dois /24 não forem contíguos perderá quatro IPsv4! Planejar sua divisão de blocos é uma tarefa essencial, portanto!
- Claro que terá de documentar a divisão de seu bloco IPv4 com seus respectivos destinatários. Existem diversas aplicações para lhe ajudar nisto, como uma planilha, por exemplo.
- Usar o /24 para pensar na divisão dos blocos foi uma estratégia baseada no fato de que em cada uma das quatro divisões da representação decimal do IPv4 pode-se fazer operações aritméticas, no limite de 0 a 255. Mas, podemos fazer operações aritméticas sobre todo o IPv4, se o transformamos em um número inteiro. Por exemplo, o IPv4 168.66.10.123 é representado pelo inteiro 2.822.900.347. As operações aritméticas devem estar no limite de 0 (0.0.0.0) a 4,294,967.295 (255.255.255.255). Existem diversas ferramentas que ajudam nas tarefas de conversões. O app DeadBeef é uma ótima opção, como mostra a figura abaixo:

- O /24 ajuda bastante. Suponha o bloco 168.66.128.0/21, que algumas vezes é apresentado como 168.66.128/21. Este bloco tem 8 x /24. O primeiro é 168.66.128/24. o segundo é 168.66.129/24, o terceiro é 168.66.130/24, …, o oitavo é 168.66.135/24.