Модуль: Вопрос 10 (2027). Компьютерные сети: IP-адрес и маска


Сколько адресов сети обладают свойством


Войдите на сайт, чтобы ответы сохранялись и баллы за тетрадь засчитывались.

Вопрос только про хвост

Спрашивают: сколько в сети адресов, у которых количество единиц в двоичной записи чётно, или кратно трём, или ещё что-то подобное.

Сетевая часть у всех адресов сети одна и та же, и единицы в ней у всех одни и те же. Меняется только хвост — значит и считать надо только его.


Постоянная добавка плюс сочетания

Посчитай единицы в адресе сети — это добавка, она есть у каждого адреса. Пусть свободных бит n.

Хвостов ровно с k единицами столько, сколькими способами выбрать k мест из n. Это C(n, k).
Не знаешь как посчитать С(n, k), попроси посчитать Python

import math
n = 8
k = 3
print(math.comb(n, k))

Дальше перебери k от 0 до n, оставь те, где добавка плюс l даёт нужное свойство, и сложи все посчитанные C(k, m).


Пример

Сеть задана адресом 192.168.32.160 и маской 255.255.255.240. Определите, сколько в данной сети адресов с чётной суммой цифр.
 

Шаг 1. Сколько бит свободно

Маска 255.255.255.240: три байта единиц плюс 4 единицы в последнем байте. Всего 28 единиц, значит свободных бит 4, а адресов в сети 16.

Адрес сети 192.168.32.160 и маска 255.255.255.240. В маске 28 единиц, свободны последние 4 бита, поэтому в сети 16 адресов. номер сети, 28 бит хвост, 4 бита адрес сети 192 1 1 0 0 0 0 0 0 168 1 0 1 0 1 0 0 0 32 0 0 1 0 0 0 0 0 160 1 0 1 0 0 0 0 0 маска 255 1 1 1 1 1 1 1 1 255 1 1 1 1 1 1 1 1 255 1 1 1 1 1 1 1 1 240 1 1 1 1 0 0 0 0 В маске 28 единиц — меняться могут только последние 4 бита Четыре свободных бита дают 16 разных адресов

Всё, что слева от черты, у всех 16 адресов одинаковое. Меняется только подсвеченный хвост.
 

Шаг 2. Единицы в адресе сети

Считаем единицы по байтам: 192 это 11000000 — две единицы, 168 это 10101000 — три, 32 это 00100000 — одна, 160 это 10100000 — две.

В двоичной записи адреса сети 192.168.32.160 единиц: 2 + 3 + 1 + 2 = 8. Все они попадают в номер сети. номер сети, 28 бит хвост, 4 бита адрес сети 192 1 1 0 0 0 0 0 0 +2 168 1 0 1 0 1 0 0 0 +3 32 0 0 1 0 0 0 0 0 +1 160 1 0 1 0 0 0 0 0 +2 2 + 3 + 1 + 2 = 8 единиц, и все они слева от черты 8 — чётное, поэтому дальше смотрим только на хвост

Итого 8, и все они сидят в номере сети: хвост у адреса сети нулевой.
 

Шаг 3. Переписать условие про хвост

У любого адреса этой сети сумма единиц равна 8 плюс единицы хвоста. Восемь — чётное, а чётное плюс чётное даёт чётное, чётное плюс нечётное — нечётное.

Номер сети даёт 8 единиц, это чётное число. Поэтому сумма чётна только тогда, когда в хвосте чётное число единиц. номер сети: 8 единиц + хвост: 0, 2 или 4 единицы = сумма чётная годится номер сети: 8 единиц + хвост: 1 или 3 единицы = сумма нечётная не годится Восьмёрка чётна и ничего не меняет: чётность суммы решает только хвост

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

Шаг 4. Пересчитать хвосты

Хвостов всего 16, и их можно просто выписать, разложив по числу единиц.

Шестнадцать четырёхбитовых хвостов, разложенных по числу единиц: 1, 4, 6, 4 и 1 штука. Хвостов с чётным числом единиц 1 + 6 + 1 = 8. 0 1 2 3 4 0 0 0 0 0 0 0 1 0 0 1 0 0 1 0 0 1 0 0 0 0 0 1 1 0 1 0 1 0 1 1 0 1 0 0 1 1 0 1 0 1 1 0 0 0 1 1 1 1 0 1 1 1 1 0 1 1 1 1 0 1 1 1 1 1 4 6 4 1 Сверху — сколько единиц в хвосте, снизу — сколько таких хвостов Подсвечены чётные: 1 + 6 + 1 = 8, ровно половина из 16

Ноль единиц — один хвост, две единицы — C(4,2) = 6, четыре единицы — один. Итого 1 + 6 + 1 = 8.

Ровно половина сети, и это не случайность: при чётной добавке чётных и нечётных хвостов всегда поровну. 
На самом деле ответ можно было найти легче, поделив на 2 общее число хостов. 16 хостов из них половина содержит чётное число единиц, другая половина - нечтное. 


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

Программным путём переберём все 16 хвостов и посчитаем единицы. 



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

То же через ipaddress

Библиотека умеет перебирать адреса сети сама, а int(a) превращает адрес в одно 32-битное число — единицы считаются сразу во всех четырёх байтах.

Осторожно с размером: при маске /12 адресов миллион, перебор займёт секунды.



Что печатает программа
16
8

Проверь себя


Свободных бит 5. Сколько среди хвостов таких, где ровно две единицы?

Сколько единиц в двоичной записи числа 172?

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

  • Считали единицы в адресе узла вместо адреса сети.
  • Выбросили адрес сети и широковещательный. Здесь спрашивают все адреса.
  • Свободные биты взяли по последнему байту, а маска обнуляла и предыдущий.