Маска подсети является "маской" в том смысле, что она отделяет сетевую часть IP-адреса от части хоста. Это бинарная операция маскирования, поэтому для маски подсети могут быть только определенные значения.
Для примера рассмотрим только один октет. У вас есть 8 бит для IP-адреса, а не 32 бита (4 октета * 8 бит / октет = 32 бита) в адресном пространстве IPv4. Как бы вы сказали системе, какая часть адреса имеет локальную значимость? Вот варианты:
SUBNET SUBNET BINARY NUMBER OF NUMBER OF SUBNET
LENGTH MASK VALUE SUBNETS IP'S/SUBNET BOUNDARIES
------ ------ -------- --------- ----------- ----------
0 0 00000000 1 (2^0) 256 (2^8) None (entire subnet is local)
1 128 10000000 2 (2^1) 128 (2^7) Every multiple of 128 (0-127, 128-255)
2 192 11000000 4 (2^2) 64 (2^6) Every multiple of 64 (0-63, 64-127, etc)
3 224 11100000 8 (2^3) 32 (2^5) Every multiple of 32 (0-31, 32-63, etc)
4 240 11110000 16 (2^4) 16 (2^4) Every multiple of 16 (0-15, 16-31, etc)
5 248 11111000 32 (2^5) 8 (2^3) Every multiple of 8 (0-7, 8-15, etc)
6 252 11111100 64 (2^6) 4 (2^2) Every multiple of 4 (0-3, 4-7, etc)
7 254 11111110 128 (2^7) 2 (2^1) Every multiple of 2 (0-1, 2-3, etc)
8 255 11111111 256 (2^8) 1 (2^0) All (every host is its own subnet)
На практике вы теряете два IP-адреса на подсеть, поскольку первый IP-адрес считается "сетевым" адресом, а последний IP-адрес - "широковещательным" адресом. Это означает, что вы никогда не сможете направить трафик в сеть с маской подсети .254, так как она имеет только два возможных адреса, и оба они уже зарезервированы (нет дополнительного места для адреса шлюза и хоста). Наименьшая возможная маршрутизируемая подсеть использует маску подсети .252, поскольку она дает достаточно места для адресов сети, шлюза, хоста и широковещания.
В вашем примере вы хотите разделить сети между .12 и .105. Вы не можете использовать маску подсети .0, потому что это означает, что они находятся в одной подсети. Вы не можете использовать маску подсети .128, потому что и .12, и .105 в диапазоне .0-127 подсети. Вы можете использовать маску подсети .192, потому что .12 будет в подсети .0-63, а .105 будет в подсети .64-127.
Вы можете использовать маску подсети .224, потому что .12 будет в подсети .0-31, а .105 будет в подсети .96-127. Вы можете использовать маску подсети .240, потому что .12 будет в .0-15, в то время как .105 будет в .96-111. Вы можете использовать .248, потому что .12 будет в .8-15, в то время как .105 будет в .104-111.
Вы не можете использовать маску подсети .252, так как .12 попадает в "сетевую" часть адреса .12-15 подсети. Вы не можете использовать подсеть .254 или .255, так как .252 - это наименьшая возможная маршрутизируемая подсеть.
В качестве дополнительного упражнения, если вы хотите вычислить максимально возможную подсеть между двумя хостами, сравните, насколько похожи их двоичные значения, и это даст вам ответ. В вашем примере давайте посмотрим на двоичное сходство ваших IP-адресов, начиная с самого левого бита и двигаясь вправо, пока мы не обнаружим разницу:
152.46.69.12 10011000.00101110.01000101.00001100
152.46.69.105 10011000.00101110.01000101.01101001
........ ........ ........ .xxxxxxx
Subnet Length: 8 +8 +8 +1 = /25
Subnet Mask: 255 .255 .255 .128 = 255.255.255.128
Считая подобные биты слева направо, это показывает, что наибольшая возможная длина подсети составляет 25 битов. Выражено в обозначении маски подсети 255.255.255.128 (/25 в обозначении CIDR). Любая большая маска подсети (255.255.255.192 или /26) будет разделять эти хосты.