Подтема 2 из 6
Адрес сети и границы сети
Как найти адрес сети, её края и адреса компьютеров — и ответ задачи темы.
Адрес сети
Какой адрес сети у узла 172.20.77.140 с маской 255.255.252.0?
Адрес сети — поразрядное «И» адреса и маски: под единицами маски биты адреса сохраняются, под нулями становятся нулями. «Поразрядное» — отдельно в каждой позиции, «И» (конъюнкция) даёт 1, только если оба бита — единицы.
Октеты маски 255 сохраняют октеты адреса: 172 и 20. Октет 0 обнуляет: четвёртый октет сети — 0. Считать нужно только смешанный октет: 77 = 01001101, 252 = 11111100, «И» — 01001100 = 76. Адрес сети — 172.20.76.0.
Поразрядное «И» в Python — . Октет за октетом:
print(172 & 255, 20 & 255, 77 & 252, 140 & 0)Адрес сети не обязан заканчиваться на .0: у узла 192.168.10.173 с маской /26 адрес сети 192.168.10.128. Нулями заполнена вся часть узла, а сколько её битов — решает маска.
Размер блока
Быстрая ручная проверка: смешанный октет маски m делит значения этого октета адреса на блоки по 256 − m. Октет сети — начало блока, в котором лежит октет адреса.
- Найди первый слева октет маски, меньший 255: здесь 252.
- Размер блока d = 256 − 252 = 4.
- Начало блока — ближайшее кратное d, не большее октета адреса: 77 = 19 · 4 + 1, начало 76, конец 79.
- Октеты правее в адресе сети — 0, в широковещательном адресе — 255.
Обоснование · необязательноПочему размер блока равен 256 − m
Если в октете маски r нулей, то m = 256 − 2ʳ: например, 252 = 256 − 4. Значит, 256 − m = 2ʳ — ровно столько значений у свободной части этого октета.
Границы сети
Сеть — все адреса от адреса сети (часть узла — нули) до широковещательного адреса (часть узла — единицы). Эти два адреса компьютерам не назначают.
В нашей сети часть узла — десять битов. Все нули — 172.20.76.0, все единицы — 172.20.79.255. Компьютерам достаются адреса между ними: наименьший 172.20.76.1, наибольший 172.20.79.254. Ответ задачи темы — сумма октетов: 172 + 20 + 79 + 254 = 525.
Блок третьего октета — 76–79. Широковещательный адрес: конец блока 79 и 255 в последнем октете. Наибольший адрес компьютера — на единицу меньше: 172.20.79.254.
ip_network со strict=False строит сеть по адресу узла: адрес узла не обязан быть адресом сети. Свойства network_address и broadcast_address — края сети, к адресу можно прибавить или вычесть число. Сумму октетов даёт , адрес без точек — :
from ipaddress import ip_networknet = ip_network('172.20.77.140/255.255.252.0', strict=False)print(net.network_address, net.broadcast_address)last = net.broadcast_address - 1print(last, sum(int(x) for x in str(last).split('.')))print(str(last).replace('.', ''))Адреса на .0 и .255 не обязательно особые: в нашей сети 172.20.77.0 и 172.20.76.255 — обычные адреса компьютеров. Особый адрес — тот, у которого вся часть узла из нулей или из единиц, а не только последний октет.
Тонкости:strict и сети /31, /32
Без strict=False функция ip_network требует, чтобы ей дали именно адрес сети, и для 172.20.77.140 остановится с ошибкой. Но если по условию нужно проверить, что запись — адрес сети, ошибка как раз полезна: strict=False молча исправил бы запись.
Правило «два адреса не назначают» относится к обычным сетям: в сети /31 оба адреса — узлы, в /32 адрес один.
Форма ответа
Найденный адрес записывают в той форме, которую требует условие. Выбери форму, чтобы увидеть ответ для адреса 172.20.79.254:
- сумма октетов
- 525
- без точек
1722079254- буквы по таблице
- буква каждого октета слева направосначала найди числовой адрес, потом замени октеты
- один октет
- третий октет — 79
Итого
- Адрес сетиадрес И маска; считать только смешанный октет
- Блокd = 256 − m; начало — кратное d
- Края сетичасть узла из нулей и из единиц
- Компьютеры
network_address + 1…broadcast_address - 1 - Ответсумма октетов, без точек или буквами
Проверьте себя
Ответь сначала сам, потом открой ответ.
ОтветСкрыть ответ
ОтветСкрыть ответ
ОтветСкрыть ответ
ОтветСкрыть ответ
ОтветСкрыть ответ
Практика
Для проверки ответов нужен JavaScript. Условия, подсказки и решения доступны ниже.
Сумма октетов адреса сети
Узел имеет IP-адрес 157.230.96.214, маска сети равна 255.255.255.248. Определи адрес сети и в ответе запиши сумму значений его октетов.
Введите число.
Подсказка
Октеты маски 255 сохраняют адрес; считать нужно только смешанный октет.
Решение
Последний октет маски 248, блок 256 − 248 = 8. 214 = 26 · 8 + 6, начало блока 208 — адрес сети 157.230.96.208. Сумма октетов 157 + 230 + 96 + 208 = 691.
Решение программой
from ipaddress import ip_address, ip_network net = ip_network('157.230.96.214/255.255.255.248', strict=False)print(sum(net.network_address.packed))Ответ: 691
Адрес сети через размер блока
Найди адрес сети для адреса 10.8.45.200 и маски 255.255.255.224 вручную, через размер блока.
Введите IP-адрес: четыре числа через точку.
Подсказка
Размер блока — 256 минус октет маски.
Решение
Последний октет маски 224, блок 256 − 224 = 32. 200 = 6 · 32 + 8, ближайшее кратное 32, не большее 200, — 192. Адрес сети 10.8.45.192.
Решение программой
from ipaddress import ip_address, ip_network net = ip_network('10.8.45.200/255.255.255.224', strict=False)print(net.network_address)Ответ: 10.8.45.192
Граница в третьем октете
Найди адрес сети для адреса 81.200.130.9 и маски 255.255.192.0.
Введите IP-адрес: четыре числа через точку.
Подсказка
Найди первый октет маски, меньший 255, и блок в нём.
Решение
Третий октет маски 192, блок 64: 130 лежит в блоке 128–191. Последний октет маски 0, поэтому адрес сети 81.200.128.0.
Решение программой
from ipaddress import ip_address, ip_network net = ip_network('81.200.130.9/255.255.192.0', strict=False)print(net.network_address)Ответ: 81.200.128.0
Широковещательный адрес
Для адреса 46.31.250.17 и маски 255.255.240.0 найди широковещательный адрес.
Введите IP-адрес: четыре числа через точку.
Подсказка
В широковещательном адресе вся часть узла — единицы.
Решение
Третий октет маски 240, блок 16: 250 лежит в блоке 240–255. В широковещательном адресе вся часть узла — единицы: конец блока 255 и 255 в последнем октете — 46.31.255.255.
Решение программой
from ipaddress import ip_address, ip_network net = ip_network('46.31.250.17/255.255.240.0', strict=False)print(net.broadcast_address)Ответ: 46.31.255.255
Наибольший адрес компьютера
Для адреса 192.168.5.77 и маски /27 найди наибольший адрес, который можно назначить компьютеру.
Введите IP-адрес: четыре числа через точку.
Подсказка
Широковещательный адрес компьютеру не назначают.
Решение
Маска /27 — блоки по 32 в последнем октете, 77 лежит в блоке 64–95. Широковещательный адрес 192.168.5.95 компьютеру не назначают, наибольший адрес компьютера на единицу меньше — 192.168.5.94.
Решение программой
from ipaddress import ip_address, ip_network net = ip_network('192.168.5.77/27', strict=False)print(net.broadcast_address - 1)Ответ: 192.168.5.94
Наибольший адрес компьютера
Сеть задана IP-адресом одного из входящих в неё узлов 64.137.205.18 и маской 255.255.252.0. Найди наибольший IP-адрес, который может быть назначен компьютеру. В ответе запиши сумму значений октетов этого адреса.
Введите число.
Подсказка
Наибольший адрес компьютера на единицу меньше широковещательного.
Решение
Третий октет маски 252, блок 4: 205 лежит в блоке 204–207. Широковещательный адрес 64.137.207.255, наибольший адрес компьютера 64.137.207.254, сумма октетов 64 + 137 + 207 + 254 = 662.
Решение программой
from ipaddress import ip_address, ip_network net = ip_network('64.137.205.18/255.255.252.0', strict=False)print(sum((net.broadcast_address - 1).packed))Ответ: 662
Ответ буквами
По адресу узла 211.47.155.3 и маске 255.255.248.0 определи адрес сети. Запиши ответ буквами по таблице, без точек: A — 0, B — 3, C — 47, D — 152, E — 155, F — 211, G — 248, H — 255.
Введите четыре буквы без точек.
Подсказка
Сначала найди числовой адрес сети, потом замени октеты буквами.
Решение
Третий октет маски 248: 155 И 248 = 152, последний октет обнуляется. Адрес сети 211.47.152.0, по таблице: 211 — F, 47 — C, 152 — D, 0 — A.
Решение программой
from ipaddress import ip_address, ip_network net = ip_network('211.47.155.3/255.255.248.0', strict=False)table = {0: 'A', 3: 'B', 47: 'C', 152: 'D', 155: 'E', 211: 'F', 248: 'G', 255: 'H'}print(''.join(table[x] for x in net.network_address.packed))Ответ: FCDA