Задание 10 · Маска подсети
Практика и итог
Вся тема на одной странице: как решилась задача темы, главное из подтем, порядок решения и частые ошибки.
Одна задача — вся тема
Задача темы — наибольший адрес компьютера в сети узла 172.20.77.140 с маской 255.255.252.0 — прошла через подтемы, и каждая добавляла к ней новый вопрос. Пролистай черновик: точками отмечены строки, которых не было после предыдущей подтемы.
- Подтема 1, «IP-адрес и маска»: маска делит сеть и узел. Точками отмечены новые строки.
- Подтема 2, «Адрес сети и границы»: края сети и ответ.
- Подтема 3, «Количество адресов»: 2ʰ адресов, номер узла.
- Подтема 5, «Двоичная запись»: единицы сети — у всех адресов. Ответ задачи темы — 525.
Сеть одна и та же — менялся вопрос: края, количество адресов, номер узла, адреса с нужным числом единиц. Подтемы 4 и 6 решают обратную задачу — ищут маску, когда её не дали.
Карта темы
Каждая подтема дала несколько правил, и любое решение собирается из них. Сверху — путь от условия к ответу, ниже — по блоку на подтему. Заголовок блока ведёт на подтему.
- Границадлина маски p: дана или её ищут
- Сетьадрес сети и широковещательный
- Вопроскрая, количество, маска или биты
1IP-адрес и маска
- 32 бита4 октета по 8 битов
- /pp единиц маски, узлу h = 32 − p битов
- октеты маски0, 128, 192, 224, 240, 248, 252, 254, 255
2Адрес сети и границы сети
- адрес И маскаадрес сети: часть узла — нули
- 256 − mразмер блока в октете
broadcast_address - 1наибольший адрес компьютера
3Количество адресов и номер узла
- 2ʰ и 2ʰ − 2все адреса и адреса компьютеров
- I − Nномер узла; у адреса сети номер 0
4Неизвестная маска
- L ≤ p ≤ Cвсе маски, дающие этот адрес сети
- два узлаp не больше длины общего начала
- краяузел не может быть адресом сети
5Адреса с условием на двоичную запись
- биты сетиодинаковы у всех адресов — посчитать раз
f'{address:b}'все 32 бита адресаnet.hosts()только адреса компьютеров
6Маска по условию и сочетаниядополнительный урок
- C(h, k − c)адресов с k единицами
- 33 длиныпроверить условие на каждой маске
Как решать
Любое задание 10 решается одним порядком из пяти шагов. Каждому шагу ты уже учился — под ним номера подтем:
Проверка — подстановка обратно: адрес сети получается из адреса узла и маски, узел лежит между краями сети, в маске нет единиц после нуля.
Частые ошибки
Восемь ошибок встречаются чаще других, и каждую ловит один вопрос к себе. Выбери ошибку — увидишь, как её исправить, и вопрос, который её ловит:
- три октета
- сеть — всегда первые три октета → число битов сети задаёт маска. Спроси себя: сколько единиц в маске?подтема 1
- /22
- в /22 свободны 22 бита → свободны 32 − 22 = 10. Спроси себя: это биты сети или биты узла?подтема 1
- .0 и .255
- любой адрес на .0 — адрес сети → нулями должна быть вся часть узла. Спроси себя: сколько битов у узла в этой сети?подтема 2
- минус два
- после любого подсчёта вычли 2 → края вычитают, только если они не подходят. Спроси себя: подходят ли края сети под условие?подтема 3
- номер узла
- номер узла — I − N + 1 → номер — расстояние I − N. Спроси себя: какой номер у самого адреса сети?подтема 3
- совпавшие нули
- бит совпал — в маске поставили 1 → два нуля маску не определяют: L ≤ p ≤ C. Спроси себя: какие длины маски ещё подходят?подтема 4
- первая маска
- ответили первой найденной маской → вопрос решает: наименьшая, наибольшая или сколько. Спроси себя: что спрашивают о масках?подтема 4
- bin
bin(x)→f'{address:b}'. Спроси себя: все ли 32 бита в записи?подтема 5
Итог
Тема пройдена: задача темы решена от битов маски до ответа 525. Вот что взять с собой.
- ПорядокБиты, граница, сеть, вопрос, проверка.
- Границаp битов сети, h = 32 − p битов узла.
- КраяЧасть узла из нулей и из единиц — не компьютерам.
- Маска по адресамL ≤ p ≤ C — вопрос решает, какую взять.
- Задача темы172.20.79.254: 172 + 20 + 79 + 254 = 525.
Проверьте себя
Ответь сначала сам, потом открой ответ.
Маска 255.255.255.224. Сколько битов у части узла и сколько адресов в сети?
ОтветСкрыть ответ
224 = 11100000: маска /27, узлу 5 битов, адресов 2⁵ = 32.
Узел 10.0.5.200, маска 255.255.255.192. Какой адрес сети?
ОтветСкрыть ответ
Блок 256 − 192 = 64: 200 лежит в блоке 192–255, адрес сети 10.0.5.192.
Почему наибольший адрес компьютера на единицу меньше широковещательного?
ОтветСкрыть ответ
Широковещательный адрес — часть узла из одних единиц — компьютерам не назначают, как и адрес сети.
Узлы 66.12.250.3 и 66.12.236.190 в одной сети. Чем ограничена длина маски?
ОтветСкрыть ответ
Длиной общего начала адресов: 250 = 11111010, 236 = 11101100 — совпадают три первых бита третьего октета, поэтому p ≤ 19.
Практика
Для проверки ответов нужен JavaScript. Условия, подсказки и решения доступны ниже.
Сумма октетов адреса сети
Узел имеет IP-адрес 93.180.214.77. Маска сети равна 255.255.255.192. Определи адрес сети и в ответе запиши сумму значений его октетов.
Введите число.
Подсказка
Считать нужно только смешанный октет маски.
Решение
Последний октет маски 192: 77 И 192 = 64, адрес сети 93.180.214.64. Сумма октетов 93 + 180 + 214 + 64 = 551.
Решение программой
from ipaddress import ip_address, ip_network net = ip_network('93.180.214.77/255.255.255.192', strict=False)print(sum(net.network_address.packed))Ответ: 551
Наименьшее число единиц маски
Для узла с IP-адресом 140.33.118.46 адрес сети равен 140.33.112.0. Каково наименьшее возможное количество единиц в разрядах маски?
Введите число.
Подсказка
Подходят все длины от L до C.
Решение
118 = 01110110, 112 = 01110000: L = 20, C = 21, подходят маски /20 и /21. Меньше всего единиц у /20.
Решение программой
from ipaddress import ip_address, ip_network ps = [p for p in range(33) if ip_network(f'140.33.118.46/{p}', strict=False) .network_address == ip_address('140.33.112.0')]print(min(ps))Ответ: 20
Третий байт маски общей сети
Узлы с IP-адресами 66.12.250.3 и 66.12.236.190 находятся в одной сети. Укажи наибольшее возможное значение третьего слева байта маски этой сети.
Введите число.
Подсказка
Совпадающие начальные биты третьего байта задают самую длинную маску.
Решение
250 = 11111010, 236 = 11101100: совпадают три бита, C = 16 + 3 = 19, оба узла при /19 обычные. Третий байт маски /19 — 11100000 = 224.
Решение программой
from ipaddress import ip_address, ip_network def net(node, p): return ip_network(f'{node}/{p}', strict=False) def ordinary(node, p): n = net(node, p) address = ip_address(node) return address not in (n.network_address, n.broadcast_address) a, b = '66.12.250.3', '66.12.236.190'same = [p for p in range(33) if net(a, p) == net(b, p)]p = max(p for p in same if ordinary(a, p) and ordinary(b, p))print(ip_network(f'0.0.0.0/{p}').netmask.packed[2])Ответ: 224
Число единиц кратно 5
Сеть задана IP-адресом 150.8.64.0 и маской сети 255.255.255.224. Сколько в этой сети IP-адресов, для которых количество единиц в двоичной записи кратно 5?
Введите число.
Подсказка
Сначала сосчитай единицы сетевой части.
Решение
В сетевой части 4 + 1 + 1 = 6 единиц, свободных битов 5. Кратно 5 — 10 единиц, то есть в пяти свободных битах четыре единицы и один ноль: пять вариантов места нуля.
Решение программой
from ipaddress import ip_address, ip_network def ones(address): return bin(int(address)).count('1') print(sum(1 for x in ip_network('150.8.64.0/27') if ones(x) % 5 == 0))Ответ: 5
Наибольший адрес компьютера без точек
Сеть задана IP-адресом одного из входящих в неё узлов 31.87.140.250 и сетевой маской 255.255.248.0. Найди наибольший IP-адрес этой сети, который может быть назначен компьютеру. В ответе укажи найденный адрес без разделителей.
Введите адрес без точек.
Подсказка
Наибольший адрес компьютера на единицу меньше широковещательного.
Решение
Третий октет маски 248, блок 8: 140 лежит в блоке 136–143. Широковещательный адрес 31.87.143.255, наибольший адрес компьютера 31.87.143.254 — без точек 3187143254.
Решение программой
from ipaddress import ip_address, ip_network net = ip_network('31.87.140.250/255.255.248.0', strict=False)print(str(net.broadcast_address - 1).replace('.', ''))Ответ: 3187143254