Маски подсети, представленные в виде строки из 32 битов (1 или 0), всегда имеют все 1 слева (наиболее значимые биты первых октетов) и все 0 справа (наименее значимые биты последних октетов). ). Таким образом, мы можем описать их кратко, просто отметив, сколько их 1.
Как вы знаете, у /21 есть 21 1, начиная слева:
11111111.11111111.11111000.00000000
Теперь преобразуйте каждый октет в десятичную, чтобы получить знакомую нотацию «точечно-десятичная» или «точечно-четырехугольная»:
255.255.248.0
Это связано с тем, что наиболее значимый бит в октете (8-битный байт) - это «128-е место», следующий - «64-е место» и т. Д .:
128, 64, 32, 16, 8, 4, 2, 1
Итак, в этом третьем октете у вас есть 5 1 и 3 0:
128 + 64 + 32 + 16 + 8 + 0 + 0 + 0 = 248
Теперь давайте посмотрим на ваш /23:
11111111.11111111.11111110.00000000
Этот третий октет преобразуется в десятичную форму следующим образом:
128 + 64 + 32 + 16 + 8 + 4 + 2 + 0 = 254
255.255.254.0
Видите ли, добавляя два бита к маске подсети, вы не добавляете "двоичный 2" (значение 2, которое равно 10 в двоичном формате), или даже максимальное значение, которое могут хранить два бита (двоичное 11 = десятичное 3),
Вы должны взглянуть на двоичное значение места 1, которое вы добавляете в маску. В вашем случае вы добавляли 1 к 4 и 1 к 2, поэтому вы добавляете 6 к значению этого октета.
248 + 6 = 254
Из-за способа, которым маски подсетей "растут слева", как это, есть только 9 возможных значений для любого октета в маске подсети:
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