Веду на сто
Конспект

Задание №10. Короткий конспект

Маска, адрес сети, последний узел и подсчёт единиц: формулы, порядок решения и проверка границ.

Адрес и маска

IPv4 — четыре октета по восемь битов. Маска содержит сначала единицы, затем нули. Единицы сохраняют сетевую часть адреса, нули отмечают свободные узловые биты. Число единиц маски — p, число нулей — h=32-p.

Побитовое И адреса A и маски M даёт адрес сети N=A\land M.

Что требуетсяРезультат
Все адреса подсети2^h
Широковещательный адресB=N+2^h-1
Последний адрес компьютераB-1, если крайние адреса запрещены узлам
Число адресов компьютеров2^h-2 при тех же ограничениях и h\ge2

Сложение в формулах выполняется над целым 32-битным адресом. Адрес сети имеет нулевую узловую часть, широковещательный — единичную. Правило вычитания двух не применяется автоматически к /31, /32 или к вопросу обо всех адресах.

Порядок решения

  1. Фиксируется вопрос: сеть, последний узел или число адресов; отдельно — формат ответа.
  2. Маска определяет границу частей. Октет маски 255 сохраняет октет адреса; 0 обнуляет. В промежуточном октете выполняется побитовое И.
  3. Для последнего узла свободные биты сначала заполняются единицами, затем из целого адреса вычитается 1.
  4. Для подсчёта адресов перебирается весь диапазон сети и проверяется условие. Единицы считаются во всём адресе.
  5. Полученный адрес преобразуется в сумму октетов или запись без точек только по требованию условия.

Условие на единицы

В префиксе c единиц, в свободной части — j. Всего c+j; кратность k означает нулевой остаток от деления этой суммы на k.

Python: bin(int(address)).count('1') считает единицы. Цикл по net включает оба края; net.hosts() для обычной подсети их исключает. «Кратно» — ones % k == 0, «не кратно» — ones % k != 0.

При h\ge1 ровно половина всех адресов имеет чётное число единиц, половина — нечётное: по 2^{h-1}. Для делимости на 3, 4 или 5 такое деление пополам неверно.

Возможные ловушки

  • Обнулён целый октет. В EGE-10-0097 ↗ 76\land240=64, а не 0: первые четыре бита сохраняются.
  • Исключены края при подсчёте всех адресов. В EGE-13-0015 ↗ они оба подходят. Их удаление меняет правильный ответ 5 на 3.
  • Пропущены единицы сети. В EGE-13-0010 ↗ к единицам свободных битов добавляются 8 единиц префикса; кратность проверяется после сложения.