Маски подсети в ЕГЭ: как найти адрес сети и посчитать IP-адреса
Маска показывает, какая часть IP-адреса относится к сети, а какая может меняться внутри неё. Разберём один адрес вручную и проверим результат в Python — без заучивания отдельных решений.
Сразу к самопроверкеСначала уточним номер задания
В материалах ЕГЭ-2026 маски подсети встречаются в задании 13. В проекте изменений ФИПИ на 2027 год эта тема перенесена в задание 10. Метод решения остаётся полезен для обеих подборок. На сайте есть подборка по нумерации 2027 года и прежнее задание 13.
Дальше используем IPv4: адрес состоит из 32 бит, записанных четырьмя числами от 0 до 255. Например, 192.168.14.173. Каждое из четырёх чисел — октет, то есть восемь бит.
Где заканчивается адрес сети?
IP-адрес: 192.168.14.173. Измените длину маски и посмотрите, как меняется сеть.
IP: 10101101 Маска: 11000000 И → 10000000
173 И 192 = 128. В сети 64 адреса, включая адрес сети и широковещательный.
Что означает маска /26
В маске сначала идут единицы, затем нули. Запись /26 означает: 26 бит заняты общей частью сети, а 32 − 26 = 6 бит остаются для адресов внутри неё.
| Первые три октета | Последний октет | Полная маска |
|---|---|---|
| 24 единицы | 11000000₂ = 192 | 255.255.255.192 |
Чтобы получить адрес сети, применяем побитовое И к адресу и маске: единица получается только из пары 1 и 1. Там, где в маске единица, бит адреса сохраняется; там, где ноль, он обнуляется.
Пример: 192.168.14.173 с маской 255.255.255.192
Первые три октета маски равны 255, поэтому 192, 168 и 14 сохраняются. Считаем только последний октет:
| Что записываем | Восемь бит | Десятичное значение |
|---|---|---|
| Октет адреса | 10101101 | 173 |
| Октет маски | 11000000 | 192 |
| Результат И | 10000000 | 128 |
Получили адрес сети 192.168.14.128. Свободны шесть бит: число всех адресов равно 2⁶ = 64. Диапазон заканчивается на 192.168.14.191: 128 + 64 − 1 = 191.
Если в условии просят сумму октетов адреса сети, ответ будет 192 + 168 + 14 + 128 = 502. Выписывайте именно то, что спрашивают: сам адрес, сумму октетов или количество подходящих адресов.
Когда нужно посчитать единицы в адресах
Допустим, в этой сети нужно найти число IP-адресов с чётным количеством единиц в полной двоичной записи. В постоянной части адреса 9 единиц. В шести свободных битах должно быть нечётное число единиц.
У 64 шестибитных наборов ровно половина имеет нечётную сумму битов: изменение последнего бита разбивает наборы на пары с противоположной чётностью. Значит, подходят 32 адреса.
Не вычитайте два адреса автоматически. В этом примере считаются все IP-адреса сети. Если задача отдельно требует адреса обычных узлов и исключает адрес сети и широковещательный адрес, условия подсчёта будут другими.
Проверка через Python
Модуль ipaddress входит в стандартную библиотеку Python. Параметр strict=False позволяет передать адрес узла: Python сам определит адрес его сети.
from ipaddress import ip_network
net = ip_network("192.168.14.173/26", strict=False)
print(net.network_address) # 192.168.14.128
print(net.broadcast_address) # 192.168.14.191
print(net.num_addresses) # 64
count = 0
for address in net:
bits = format(int(address), "032b")
if bits.count("1") % 2 == 0:
count += 1
print(count) # 32Цикл for address in net перебирает все адреса сети. Метод hosts() имеет другие правила исключения адресов — не подменяйте им этот перебор без проверки условия. Описание объектов сети есть в документации Python.
Что проверить перед ответом
- Каждый октет переведён в восемь бит, включая нули слева.
- Маска применяется через И, а не сложение чисел.
- Количество свободных битов вычислено как 32 минус длина префикса.
- Чётность считается по всему IP-адресу, если так сказано в условии.
- Не перепутаны адрес сети, число адресов и число разрешённых узлов.
Проверьте себя
Сначала решите самостоятельно. Затем проверьте ответ или откройте объяснение.
Ответ и объяснение
64. Маска последнего октета — 224 (11100000₂). 70 = 01000110₂. После И получаем 01000000₂ = 64, то есть сеть 10.0.0.64.
Ответ и объяснение
32. Свободны 32 − 27 = 5 бит. Число наборов — 2⁵ = 32.
Ответ и объяснение
224. После первых 24 единиц остаются ещё три: 11100000₂ = 128 + 64 + 32 = 224.