Como calcular máscaras de sub-rede de forma simples

Como calcular máscaras de sub-rede de forma simples
Yuri Matheus
Yuri Matheus

Compartilhe

Configurando VLans para segmentar nossa rede, podemos ter várias redes lógicas, com endereços IPs diferentes.

Imagem de destaque #cover

Sabendo disso, quando fui contratado por uma empresa para arrumar a rede em um novo prédio me deparei com o seguinte cenário: No Prédio funcionam quatro departamentos: Financeiro, Comercial, RH e Jurídic e cada departamento tem, em média, 50 hosts.

O departamento comercial envia muitas propostas técnicas que são arquivos bem pesados, por isso a rede de todos os departamentos está ficando lenta e instável.

Além disso, como todos os departamentos estão na mesma rede, ou seja, caso algum departamento tenha um problema, todos os departamentos serão atingidos.

Então, vamos atribuir os endereços de cada departamento. Nós podemos utilizar qualquer IP privado para isso, como são poucos hosts. Vou utilizar os endereços de classe C (192.168.x.x).

Podemos atribuir por exemplo uma departamento com o endereço de rede 192.168.0.0, outro com 192.168.1.0 e assim por diante.

Essa é uma opção totalmente válida, porém se pararmos para analisar, com esse tipo de configuração, vamos estar desperdiçando endereços IPs.

Mas como podemos diminuir esse número de endereços IPs na rede para evitar esse desperdício?

Nós podemos dividir nossa rede em parte menores, cada uma representando um departamento, ou seja, dividimos nossa rede em sub-redes.

Banner da Escola de DevOps: Matricula-se na escola de DevOps. Junte-se a uma comunidade de mais de 500 mil estudantes. Na Alura você tem acesso a todos os cursos em uma única assinatura; tem novos lançamentos a cada semana; desafios práticos. Clique e saiba mais!

O que é sub-rede

Toda endereço IP tem uma máscara correspondente. Essa máscara que identifica qual parte do endereço pertence a rede e qual parte ao host.

Por exemplo, o endereço 192.168.0.50 com uma máscara 255.255.255.0, identifica como parte da rede o endereço 192.168.0 e o host como 50:

Rede: 192,168,0 
Host: 50

Para dividir essa rede, nós podemos “dividir” essa máscara. Para isso, podemos usar valores diferentes entre 0 ou 255. Quando fazemos isso, damos o nome de sub-rede.

Mas quais valores podemos colocar?

Calculando as máscaras de sub-rede

Cada três dígitos na máscara, correspondem a uma parte do endereço IP do host. Essas partes são formadas por oito bits, por isso recebem o nome de octetos.

Cada bit no octeto, possui um valor em decimal correspondente a sua posição.

Por serem bits, só possuem dois estados, ou 0, representando o host, ou 1, representando a rede.

No caso, essa máscara (255.255.255.0), pode ser representada em binário como: 11111111.11111111.11111111.0000000.


Máscara: 255,255,255,0 
Binário: 11111111,11111111,11111111,00000000 

Caso todos os oito bits da máscara de sub-rede possuir valor 1, o valor em decimal 255, caso todos os bits forem 0, possui o valor 0 em decimal.

Mas por que quando todos os bits são 1, o valor em decimal fica é 255?

Isso é por causa da conversão de binário para decimall.

Criando sub-redes

Vimos que os bits 1 na máscara específica a porção da rede e que os bits 0 especificam o host no endereço IP. Para criar nossas redes, podemos pegar alguns bits 0 e transformá-los em 1.

Por exemplo, se pegarmos o primeiro bit 0 na máscara e transformá-lo em bit 1, teríamos a seguinte máscara em binário: 11111111.11111111.11111111.1000000

Mas como fica o valor dela em decimal?

Sabemos que os três primeiros octetos têm o valor em decimal de 255. Já para saber o valor do último, basta realizar a conversão:


2^7,2^6,2^5,2^4,2^3,2^2,2^1,2^0 

1,0,0,0,0,0,0,0 

Ou seja, temos: 1 x 2^7 + 0 x 2^6 + 0 x 2^5 + 0 x 2^4 + 0 x 2^3 + 0 x 2^2 + 0 x 2^1 + 0 x 2^0. Que nos deixa com 128.

Logo, a máscara dessa rede é: 255.255.255.128.

Mas quantas redes temos com essa máscara?

Para saber quantas redes temos com essa nova máscara basta elevar o número 2, que são o número de bits possíveis,** **ao número de bits emprestados da porção do host.

Neste caso pegamos um bit da porção do host, portanto temos **2^1 **redes. Ou seja, temos duas redes.

Mas quantos hosts cada rede comporta?

Os hosts são definidos como bits 0 na máscara de sub-rede, certo? Então para saber quantos hosts nossa rede comporta basta elevar 2 ao número de bits 0 na máscara.

Neste caso temos sete bits 0 (10000000), logo, 2^7, que nos dá 128.

Então cada uma de nossas redes comportam 128 hosts?

Dentre os endereços IPs, dois precisam ser reservados. Um para especificar a rede e outro para especificar o domínio de broadcast. Então, na verdade temos 128 - 2 hosts, logo temos 126 hosts em cada sub-rede.

Mas quais são esses endereços reservados?

O endereço que especifica a rede é sempre o primeiro endereço IP, já o de broadcast é o último endereço IP da rede.

Em uma rede classe C com máscara padrão, o endereço da rede é 192.168.0.0 e o de broadcast é 192.168.0.255. Só que no nosso caso são duas sub-redes, cada uma com um endereço de rede e de broadcast.

A primeira rede possui o endereço de rede 192.168.0.0, já o endereço de broadcast nós descobrimos somando 1 ao número de hosts, que neste caso são 126, mais o endereço de rede. Ou seja, temos **1 + 126 + 0. **Dessa forma temos que o endereço de broadcast da primeira sub-rede é 192.168.0.127.

Já o endereço de rede da segunda sub-rede é o endereço de broadcast da primeira sub-rede mais 1. Ou seja, temos como endereço de rede da segunda sub-rede 192.168.0.128. O endereço de broadcast conseguimos obter da mesma forma.

Somamos 1 ao número de hosts, mais o endereço de rede. Portanto, 1 + 126 + 128, isso nos dá o endereço de broadcast 192.168.0.255.

Bom, calculamos as sub-redes, mas com essa máscara temos apenas duas sub-redes. Porém, temos quatro departamentos e queremos colocar cada um em uma sub-rede. Como podemos fazer isso?

Se nós pegamos um bit a mais na máscara de sub-rede como no exemplo, nós temos duas sub-redes. Então, se nós pegarmos dois bits, teremos dois elevado a dois, que é número de bits que pegamos na porção do host, isso nos deixa com quatro que é o número de sub-redes que queremos.

Ou seja, nossa máscara ficará em binário: 11111111.11111111.11111111.1100000. Realizando a conversão:


2^7,2^6,2^5,2^4,2^3,2^2,2^1,2^0 1,1,0,0,0,0,0,0 

Logo: 1 x 2^7 + 1 x 2^6 + 0 x 2^5 + 0 x 2^4 + 0 x 2^3 + 0 x 2^2 + 0 x 2^1 + 0 x 2^0. Que nos deixa com 192.

Ou seja nossa máscara de sub-rede será 255.255.255.192. Mas quantos hosts cada sub-rede comportará?

Para saber isso, basta elevar 2 ao número de bits 0 na máscara, menos os dois bits reservados de cada rede, ou seja, como temos seis bits zero nossa conta fica 2^6 - 2, isso nos deixa com 62 hosts para cada rede.

Se quisermos saber qual é o endereço de cada sub rede, basta realizar os mesmos passos de antes.

O endereço de rede primeira sub-rede será 192.168.0.0, já o seu endereço de broadcast será um mais o número de hosts mais o endereço de rede. Isso nos deixa com ** 1 + 62 + 0**. Logo, o endereço de broadcast da nossa primeira sub rede será 192.168.0.63.

Dessa forma, após calcular cada sub-rede teremos o seguinte resultado:


Rede: 192.168.0.0,
Broadcast: 192.168.0.63 

Rede: 192.168.0.64,
Broadcast: 192.168.0.127 

Rede: 192.168.0.128,
Broadcast: 192.168.0.191

Rede: 192.168.0.192,
Broadcast: 192.168.0.255

Todos esses endereços utilizando a máscara 255.255.255.192.

Dessa forma conseguimos alocar cada departamento em uma sub-rede, o que otimiza a rede e isola os problemas.

Para saber mais

Como cada sub-rede é uma rede distinta, elas precisam de um roteador para se comunicarem umas com as outras.

Neste exemplo, utilizamos um IP da classe C para criar as sub-redes, porém conseguimos realizar essa configuração com todas as classes de IPs disponíveis.

Nós podemos utilizar outra notação quando falamos de máscaras de rede. Ao invés de utilizar a máscara em seu formato decimal, podemos dizer apenas a quantidade de bits um contidos nela.

Por exemplo, a máscara padrão da classe C, 255.255.255.0, em formato binário fica 11111111.11111111.11111111.0000000. Ou seja, ela tem 24 bits 1. Então caso desejemos falar que o endereço IP 192.168.0.35 utiliza a máscara padrão, podemos utilizar a notação /24. Ficando assim 192.168.0.35 /24.

O nome dessa notação é CIDR.

Dividir e calcular

Atribuir endereços IPs a redes é o um dos trabalhos de um administrador de redes. Saber qual endereço atribuir e qual máscara utilizar faz parte desse trabalho.

Quando estamos instalando uma rede, é bacana separarmos os departamentos para isolar possíveis problemas, melhorar a performance da rede, além da segurança.

Uma forma de fazer isso é criando VLans (Saiba como configurar VLans em dispositivos Cisco), porém mesmo com essa configuração, algumas redes podem ter problemas com o broadcast. Então uma forma de resolver isso é dividindo a rede em parte menores, criando sub-redes.

A Alura tem uma formacao de redes. Nela, são apresentados os conceitos de sub-rede e diversas outras situações bacanas de utilizá-las.

Yuri Matheus
Yuri Matheus

Yuri é desenvolvedor e instrutor. É estudante de Sistemas de Informação na FIAP e formado como Técnico em Informática no Senac SP. O seu foco é nas plataformas Java e Python e em outras áreas como Arquitetura de Software e Machine Learning. Yuri também atua como editor de conteúdo no blog da Alura, onde escreve, principalmente, sobre Redes, Docker, Linux, Java e Python.

Veja outros artigos sobre DevOps