Преобразование блока CIDR в диапазон IP-адресов в вашей голове за 9 секунд

Я часто сталкиваюсь с людьми, которые используют онлайн-инструменты CIDR всякий раз, когда им нужно рассчитать диапазон IP-адресов для блока CIDR. Мало ли эти люди знают, что на самом деле вы можете вычислить диапазон IP в своей голове всего за 9 секунд!

Прочтите, чтобы узнать о 2 ключевых шагах, которые сделают это возможным!

Получение первого и последнего IP-адресов

Сначала немного предыстории:

Давайте посмотрим на случайный блок CIDR:

3.58.1.97/12

Обозначение состоит из IP-адреса и номера префикса. Номер префикса - это количество заблокированных битов с левой стороны. IP-адрес - это начало диапазона IP-адресов, охватываемого блоком CIDR.

Биты? Какие биты?

Каждый IP-адрес может быть представлен в двоичной форме. Например, IP-адрес в нашем блоке CIDR при перезаписи в двоичной форме выглядит так:

00000011.00111010.00000001.01100001

Кстати, именно поэтому каждый раздел IPv4 также известен как «октет» (то есть группа из 8). Заблокированные биты в нашем IP-адресе:

00000011.00111010.00000001.01100001

Какой самый быстрый и самый запоминающийся способ вычислить первый и последний IP-адреса диапазона IP-адресов?

Понятие баланса

Какое количество битов может измениться в нашем адресе? Общее количество битов в двоичном представлении IPv4 равно 32. Как указано в нашем блоке CIDR, количество заблокированных битов равно 12. Вычитание из 32 оставляет нам 20 бит.

Думайте об этих 20 битах как о балансе, который вы можете «потратить» на октеты в IP-адресе. Вы всегда начинаете тратить с правильной стороны. Пример:

Total balance: 20 bits.
Spend 8 bits.
00000011.00111010.00000001.01100001
Spend 8 more bits.
00000011.00111010.00000001.01100001
Current balance: 4 bits.
Number of full octets that were covered: 2.
Remaining Balance: 4 bits.
Spend the remaining 4 bits.
00000011.00111010.00000001.01100001

Знание того, сколько полных октетов мы покрыли, особенно полезно, поскольку оно позволяет нам быстро вычислить соответствующие части первого и последнего IP-адресов.

Полностью закрытый октет - это полностью разблокированный октет. Числа в таком октете охватывают весь диапазон значений от 8 нулей до 8 единиц или в десятичной форме от 0 до 255.

Для каждых 8 в нашем балансе битов мы получаем полностью разблокированный октет с правой стороны.

Вот что нам известно о первом и последнем IP-адресах:

First IPv4   : XXX.XXX.0.0
Last IPv4    : XXX.XXX.255.255

Сложная часть

Как мы вычисляем значения для третьего справа октета?

Мы сразу знаем, что значение третьего октета в первом IP-адресе будет равно значению третьего октета IP-адреса, указанного в нашем блоке CIDR:

First IPv4   : XXX.58.0.0
Last IPv4    : XXX.XXX.255.255

Это связано с тем, что IP-адрес, указанный в блоке CIDR, является началом диапазона IP-адресов, охватываемого блоком CIDR.

Чтобы вычислить значение того же октета для последнего IP-адреса, возьмите 2 в степени количества битов, потраченных на этот октет, и добавьте это значение к значению того же октета в первом IP-адресе.

4 bits spent. 2 ^ 4 = 16.
16 is the range of change of the 3rd octet.
First IPv4   : XXX.58.0.0
Last IPv4    : XXX.73.255.255 (!?)

Вы знаете, почему это не 74? Разве 58 + 16 = 74? Это правильно, но оставшиеся 65536 адресов последней 16-й подсети типа B в нашем диапазоне уже покрыты двумя последними октетами:

First IPv4   : XXX.58.0.0
Last IPv4    : XXX.73.255.255

Наконец, для четвертого октета справа мы просто копируем значение того же октета с IP-адреса, указанного в блоке CIDR. Значения заблокированных октетов остаются неизменными для всех IP-адресов, охваченных CIDR:

First IPv4   : 3.58.0.0
Last IPv4    : 3.73.255.255

Вот и все!

Подводя итоги

Просто запомните три вещи, которые нужно сделать, чтобы вычислить первый и последний IP-адреса CIDR:

  • Найдите полностью разблокированные октеты. Для этих октетов используйте 0 и 255 для первого и последнего IP-адреса соответственно.
  • Рассчитайте диапазон изменения частично разблокированного октета. Не забывайте, что последняя подсеть покрыта предыдущими октетами (справа).
  • Для заблокированных октетов используйте значения из тех же октетов IP-адреса, который указан в блоке CIDR.

Это все, что вам нужно, чтобы быстро определить первый и последний IP-адреса блока CIDR!

Совет: запоминание таблицы степеней двойки значительно ускорит второй шаг!

Время практики!

Готовы принять вызов? Попробуйте вычислить следующие диапазоны блоков CIDR!

10.8.17.0/13
11.5.0.0/8
172.16.32.0/22
19.8.8.77/13
255.255.255.253/11  (hardcore)
0.0.0.0/19

Оставляйте свои ответы в комментариях ниже! Обещаю просмотреть каждую заявку :)

Если вы нашли эту статью ценной, поделитесь ею! И спасибо, что прочитали!