Para entender como funciona o endereçamento IP, vou começar explicando sobre a composição de um IP e suas classes. Acredito que muitos sabem como configurar uma rede seguindo os padrões de IP Addressing mas não tem conhecimento de como funcionam os IPs e máscaras, portanto espero poder dar uma noção básica e esclaredora sobre o assunto. Vamos lá!
Conversão:
Na figura abaixo temos um exemplo de um IP classe B em sua forma decimal e binária, observe que cada um dos quatro numeros que visualizamos em decimal, é formado por oito caracteres binários. Em números binários devemos sempre interpretar o numero 1 como válido ou "ligado" e o zero como "desligado".
Agora, vou mostrar como converter números decimais em binários e vice-versa. Para fazer isto sem usar a cálculadora científica, começe criando uma tabela da direita para a esquerda, começando com o número 1 e sempre dobrando o numero. Exemplo:
1024 - 512 - 256 - 128 - 64 - 32 - 16 - 8 - 4 - 2 - 1
Para transformar o número 172 em binário, só vamos utilizar a tabela do 1 ao 128, pois cada numero decimal em um IP é composto de 1 octeto. Começe verificando sempre a partir do número maior da tabela, caso ele seja menor que o número decimal, utiliza-se o 1 e depois subtrai o valor, e a mesma operação para o restante. Sempre que o for possível subtrair pelo próximo número da tabela sem ficar negativo, deve-se fazer e marcar o devido bit como 1.
172 é maior que 128, então para o primeiro número do octeto teremos 1xxxxxxx, 172-128 sobra 44.
Vamos ao próximo número na tabela, que é 64. Verica-se que 44 é menor que 64, não sendo possível subtrair. Então para o próximo número do octeto utilizamos um zero ficando 10xxxxxx.
Seguindo a lógica, 44-32, sobra 12 (octeto = 101xxxxx),
16 maior q 12, então mais um zero (octeto = 1010xxxx)
12-8=4 (octeto = 10101xxx)
4-4=0 (octeto = 101011xx)
Chegando ao zero preenche os dois ultimos com zeros pois a soma dos números utilizados da tabela já é o número decimal 172.
Bom, acredito que não sejam necessárias maiores informações sobre como transformar binário em decimal, pois é só fazer o mesmo inverso usando a tabela.
Anding Process:
Para definir se 2 IPs diferentes irão comunicar entre si, é necessário obter o resultado de um processo chamado "anding process". Neste, compara-se o número binário de um IP com o binário da máscara de rede em uso. onde 1 + 1 = 1, 1 + 0 = 0 e 0 + 0 = 0. O mesmo se faz para o ip e máscara de cada host e no caso do resultado ser o mesmo em ambos host, os dois estão na mesma rede e irão comunicar normalmente, sendo possível um encontrar o outro pelo broadcast. Caso o resultado seja diferente, os dois hosts devem estar em redes diferentes, sendo necessário um roteador para permitir a comunicação entre as duas redes.
Exemplo comparando três IPs diferentes com a mesma mask 255.255.255.0, note que o IP 192.168.2.2 tem um resultado do anding process diferente, estando assim em uma rede diferente dos 2 primeiros que possuem o mesmo resultado. (A primeira linha abaixo do IP em decimal é o IP em binário, a do meio é a máscara em binário e a linha de baixo é o resultado).

Classes de IP:
A tabela acima(clique para ampliar), mostra o range de IP de cada classe, a máscara de rede padrão, o número máximo de redes e o número máximo de hosts possível em cada classe. Observa-se que a relação é de que quanto mais bits são reservados para a rede, maior o número de redes possíveis, porém, menor o número de hosts em cada rede.
Qualquer IP que começe com 127.x.x.x é destinado ao localhost, é comum utilizar 127.0.0.1, mas também funciona para qualquer IP começando com 127, como por exemplo 127.65.133.2, é tudo a mesma coisa.
Para facilitar a idêntificação das classes, na classe A, no primeiro octeto da esquerda para direita, sempre inicia com "0", na classe B sempre com "10" e na C sempre com "110".
No último octeto, da esquerda para direita, sempre que for 00000000 ou 0 em decimal ,este é o endereço de rede e não é utilizado para nenhum host. No caso de 11111111 ou 255 em decimal é o endereço de broadcast da rede, e também não se utiliza em nenhum host.
Custom Subnet:
Vou usar um exemplo de exercício para mostrar como se define uma máscara de subrede.
Temos as seguintes informações sobre a rede:
Network ID: 172.16.0.0 (este é um IP classe B, portanto a máscara de rede é 255.255.0.0)
Mínimo de hosts que precisamos para cada subrede: 5000
Mínimo de redes necessárias: 5
Definindo a máscara de subrede:
Para se calcular quantos bits de host serão necessários "passar" para subrede na máscara, utiliza-se o número de hosts desejado + 1, e em seguida transforme este resultado em binário usando a tabela ou a calculadora. Conte quantos bits no total foram utilizados por exemplo:
5000 hosts + 1 = 5001
5001 em binário é 1 0011 1000 1001 que são no total 13 bits.
Assim no total de 16 posições de bits que são reservados para os hosts em um IP classe B, iremos utilizar 13 para os hosts e os 3 restantes para a máscara de subrede. Resultando:
11111111.11111111.11100000.00000000
255.255.224.0
O mesmo pode ser calculado pegando o número mínimo de redes desejadas, no caso 5 subtraindo 1.
5-1 = 4. Em binário 4 é 100 ( que são 3 posiçoes de bit) então dos 16 bits de host, 3 serão utilizados para a máscara de subrede.
Calculando total de Hosts para cada subnet:
Para calcular o total de hosts possíveis com esta mask 255.255.224.0, sabemos que são 13 bits reservados para os hosts, então como cada bit pode ser 1 ou 0 o cálculo é:
2 elevado na 13 = 8192 ( deste total é necessário subtrair 2, pois não é possivel ter um host que finalize com zero, pois seria o endereço de rede, e nem mesmo que finalize com 255 que é o endereço de broadcast).
Portanto 8192 - 2 = 8190 Hosts no máximo para cada subnet.
Calculando o total de subnets:
Da mesma maneira acima mas sem subtrair 2 do resultado, pois em subnets é permitido utilizar tudo zero ou um, então como são 3 posições de bit para as subnets:
2^3 = 8 subnets no máximo.
Calculando os Subnets IDs:
Para calcular os IDs de cada subnet, deve se verificar a posição do último bit da máscara de subrede dentro do octeto. No caso de 255.255.224.0 no octeto 224 temos 11100000, note que o último 1 da esquerda para direita está na posição 32, assim sabemos que os Subnets IDs serão em intervalos de 32 em 32.
Ex.:
Temos no máximo 8 subnets conforme calculamos acima, em intervalos de 32, ficando:
172.16.0.0
172.16.32.0
172.16.64.0
172.16.96.0
172.16.128.0
172.16.160.0
172.16.192.0
172.16.224.0
Calculando a range dos hosts:
Para calcular a range é muito fácil, sempre lembrando que o primeiro host de cada subnet inicia em 1 e o último em 254 como no exemplo abaixo.
172.16.0.1 – 172.16.31.254
172.16.32.1 – 172.16.63.254
172.16.64.1 – 172.16.127.254
172.16.128.1 – 172.16.160.254
172.16.160.1 – 172.16.191.254
172.16.192.1 – 172.168.223.254
172.16.224.1 – 172.16.255.254
Observação 1: Note que em alguns casos, é possível ter um IP em um host como por exemplo 172.16.10.0, este é um ip válido para a primeira subnet ID, pois se verificarmos em binário os 13 bits de host são em negrito 10101100.00010000.00001010.00000000, sendo assim não é tudo zero, nem mesmo tudo um, sendo um ip válido de host.
Observação 2: Quando estiver calculando a range de uma subnet que utiliza uma máscara classe C, existe uma diferença que pode ser observada no exemplo abaixo:
ID da rede: 192.168.1.0
Mínimo de subnet hosts requeridos: 60
Mínimo de networks requiridas: 2
Máscara de subrede 255.255.255.192
Máximo de Hosts por Subnet 62
Máximo de Subredes 4
IDs de subredes
192.168.1.0
192.168.1.64
192.168.1.128
192.168.1.192
Ranges de Host ID
192.168.1.1 – 192.168.1.62
192.168.1.65 – 192.168.1.126
192.168.1.129 – 192.168.1.190
192.168.1.193 – 192.168.1.254
Note que a primeira range acaba em .62 e não .63, isto por em binário .63 é tudo 00|111111 sendo assim o endereço de broadcast, o .64 é o endereço de rede da próxima subnet e acaba tudo com zeros 00|000000 então o primeiro host da próxima subnet será .65 . Assim verifica-se que o último IP de cada range será o ID da próxima subnet -2.