As máscaras de sub-rede, quando representadas como uma linha de 32 bits (1s ou 0s), têm sempre todos os 1s à esquerda (os bits mais significativos dos primeiros octetos) e todos os 0s à direita (os bits menos significativos os últimos octetos). Então, podemos descrevê-los na forma abreviada apenas anotando quantos 1s existem.
Como você sabe, um / 21 tem 21 1s, começando pela esquerda:
11111111.11111111.11111000.00000000
Agora converta cada octeto em decimal para obter a conhecida notação "ponteada-decimal" ou "pontilhada-quádrupla":
255.255.248.0
Isso ocorre porque o bit mais significativo em um octeto (Byte de 8 bits) é o "lugar do 128", o próximo é o "lugar do 64", etc:
128, 64, 32, 16, 8, 4, 2, 1
Então, nesse terceiro octeto, você tem 5 1s e 3 0s:
128 + 64 + 32 + 16 + 8 + 0 + 0 + 0 = 248
Agora vamos ver seu / 23:
11111111.11111111.11111110.00000000
Esse terceiro octeto é convertido em decimal assim:
128 + 64 + 32 + 16 + 8 + 4 + 2 + 0 = 254
255.255.254.0
Veja, adicionando dois bits à máscara de sub-rede, você não está adicionando um "binário 2" (o valor 2, que é 10 em binário), ou mesmo o valor máximo que dois bits podem armazenar (binário 11 = decimal 3).
Você precisa olhar para o valor de binário dos 1s que está adicionando à máscara. No seu caso, você estava adicionando um 1 no lugar do 4 e um 1 no lugar do 2, então você está adicionando 6 ao valor do octeto.
248 + 6 = 254
Devido à forma como as máscaras de sub-rede "crescem a partir da esquerda", existem apenas 9 valores possíveis para qualquer octeto em uma máscara de sub-rede:
0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 = 0
128 + 0 + 0 + 0 + 0 + 0 + 0 + 0 = 128
128 + 64 + 0 + 0 + 0 + 0 + 0 + 0 = 192
128 + 64 + 32 + 0 + 0 + 0 + 0 + 0 = 224
128 + 64 + 32 + 16 + 0 + 0 + 0 + 0 = 240
128 + 64 + 32 + 16 + 8 + 0 + 0 + 0 = 248
128 + 64 + 32 + 16 + 8 + 4 + 0 + 0 = 252
128 + 64 + 32 + 16 + 8 + 4 + 2 + 0 = 254
128 + 64 + 32 + 16 + 8 + 4 + 2 + 1 = 255