Статья Автор: Деникина Н.В., Деникин А.В.

От числа адресов обратно к маске

Задача наоборот

Сказано, сколько в подсети адресов ровно с k единицами. Маску надо восстановить по этому числу.


Подгонка сочетания

Если свободных бит n, а в адресе сети уже b единиц, то адресов ровно с k единицами будет C(n, k − b).

Перебирай маску, пока C(n, k − b) не совпадёт с данным числом. Совпадение обычно единственное.

Числа сочетаний в условиях узнаваемы: 45 это C(10,2), 78 это C(13,2), 105 это C(15,2).


Пример

Узел с IP-адресом 196.138.142.89 принадлежит подсети, в которой 78 адресов с 18 единицами в двоичной записи. Сколько единиц в маске?

Шаг 1. Откуда вообще берётся число адресов

Сетевая часть у всех адресов подсети одна, в ней b единиц. Свободных бит n. Адрес попадает в счёт, если в хвосте ровно k − b единиц, а таких хвостов C(n, k − b).

Шаг 2. Узнать число в лицо

78 = 13 · 12 / 2 = C(13,2). Скорее всего свободных бит 13, а в хвосте нужно 2 либо 11 единиц: C(13,2) и C(13,11) равны.

Шаг 3. Проверить догадку до конца

13 свободных бит — маска из 19 единиц, то есть 255.255.224.0. Ломается третий байт: 142 и 224 дают 128, поэтому адрес сети 196.138.128.0.

Единиц в нём: 196 даёт 3, 138 даёт 3, 128 даёт 1. Итого b = 7.

В хвосте надо набрать 18 − 7 = 11 единиц из 13 мест: C(13,11) = 78. Сошлось.

Шаг 4. Ответ и его форма

В маске 19 единиц. Спросили бы нули — было бы 32 − 19 = 13.


Та же задача программой

Перебирать все адреса тут нельзя: при короткой маске их миллиарды. Поэтому программа повторяет ту же выкладку — считает единицы в адресе сети и одно сочетание.



Что печатает программа
19

То же через ipaddress

Библиотека здесь экономит только адрес сети, сочетание всё равно считается руками. Это тот случай, когда без понимания формулы модуль не спасает.



Что печатает программа
19
255.255.224.0

Чему равно C(6, 2)?

Где теряют балл

  • Считали единицы в адресе узла, а не в адресе сети при этой маске.
  • Ответили количеством нулей, когда просили единицы.
  • Не проверили k − b на выход за границы: отрицательное число единиц набрать нельзя.
Печать