04 Определение маски
Готовиться с нами - ЛЕГКО!
Ошибка.
Попробуйте повторить позже
В терминологии сетей TCP/IP маской сети называют двоичное число, которое показывает, какая часть IP-адреса узла сети относится к адресу сети, а какая – к адресу узла в этой сети. Обычно маска записывается по тем же правилам, что и IP-адрес, - в виде 4 байтов, причем каждый байт записывается в виде десятичного числа. Адрес сети получается в результате применения поразрядной конъюнкции к заданному IP-адресу узла и его маске.
Например, если IP-адрес узла равен 231.32.255.131, а маска равна 255.255.240.0, то адрес сети равен 231.32.240.0.
Для узла с IP-адресом 97.122.41.0. адрес сети равен 97.122.32.0. Чему равно наибольшее значение третьего слева байта маски? Ответ запишите в виде десятичного числа.
Решение руками:
Чтобы восстановить значение третьего слева байта маски, переведем числа, располагающиеся в соответствующей позиции в IP-адресе и адресе сети, в двоичную систему счисления. Затем воспользуемся таблицей истинности для этой операции:
Для IP-адреса:
;
Для адреса сети:
;
В результате поразрядной конъюнкции имеем:
Если на месте стоит 1, то в этой позиции цифра в результате совпадет с цифрой в числе, которое
нам нужно найти. Если же на месте
стоит 0, то результат конъюнкции будет равен 0. Если на
какой-то позиции в IP-адресе стоит 0, то, вообще говоря, нельзя однозначно определить, что стоит
в этом месте в искомом числе — в результате конъюнкции все равно будет 0. Значит, на
первых трех местах слева маски стоят единицы, а на четвертом месте слева месте может
стоять 0 или 1. Так как нужно выбрать максимальное значение, запишем там 1. В маске в
двоичном коде сначала стоят все единицы, а потом все нули, поэтому искомое число имеет вид
.
Маска не может начинаться с 0, поэтому окончательный ответ:.
Решение Python:
Для определения наименьшего значения третьего байта маски необходимо понять, какая маска соответствует заданному адресу сети. Адрес сети формируется поразрядной конъюнкцией (логическим И) между IP-адресом узла и маской сети. В Python удобно использовать модуль ipaddress, который позволяет создавать объект сети с заданным IP и количеством единиц в маске. Идея перебора заключается в том, чтобы проверить все возможные количества единиц в маске от 1 до 32 и найти те, которые дают адрес сети 97.122.41.0. Среди таких вариантов выбираем маску с наименьшим количеством единиц в начале, тогда третий байт маски будет минимальным.
from ipaddress import ip_network for mask in range(1, 33): net = ip_network(f’97.122.41.0/{mask}’, 0) print(net, net.netmask) # Ищем в списке сеть 97.122.32.0 и выбираем ту, в которой количество единиц больше (число после знака /), в таком случае и значение маски будет больше
Ошибка.
Попробуйте повторить позже
В терминологии сетей TCP/IP маской сети называют двоичное число, которое показывает, какая часть IP-адреса узла сети относится к адресу сети, а какая – к адресу узла в этой сети. Обычно маска записывается по тем же правилам, что и IP-адрес, - в виде 4 байтов, причем каждый байт записывается в виде десятичного числа. Адрес сети получается в результате применения поразрядной конъюнкции к заданному IP-адресу узла и его маске.
Например, если IP-адрес узла равен 231.32.255.131, а маска равна 255.255.240.0, то адрес сети равен 231.32.240.0.
Для узла с IP-адресом 35.167.206.16 адрес сети равен 35.167.192.0 Чему равно наименьшее значение третьего слева байта маски? Ответ запишите в виде десятичного числа.
Решение руками:
Чтобы восстановить значение третьего слева байта маски, переведем числа, располагающиеся в соответствующей позиции в IP-адресе и адресе сети, в двоичную систему счисления. Затем воспользуемся таблицей истинности для этой операции:
Для IP-адреса:
;
Для адреса сети:
;
В результате поразрядной конъюнкции имеем:
Если на месте стоит 1, то в этой позиции цифра в результате совпадет с цифрой в искомом
слагаемом. Если же на месте
стоит 0, то результат конъюнкции будет равен 0. Если на какой-то
позиции в IP-адресе стоит 0, то, вообще говоря, нельзя однозначно определить, что стоит в этом месте в
искомом числе - в результате конъюнкции все равно будет 0. Значит, на третьем и четвертом местах
слева может стоять как 0, так и 1. Так как нужно выбрать минимальное значение, запишем там 0. В
маске в двоичном коде сначала стоят все единицы, а потом все нули, поэтому искомое число имеет вид
.
Маска не может начинаться с 0, поэтому окончательный ответ: .
Решение Python:
Для определения наименьшего значения третьего байта маски необходимо понять, какая маска соответствует заданному адресу сети. Адрес сети формируется поразрядной конъюнкцией (логическим И) между IP-адресом узла и маской сети. В Python удобно использовать модуль ipaddress, который позволяет создавать объект сети с заданным IP и количеством единиц в маске. Идея перебора заключается в том, чтобы проверить все возможные количества единиц в маске от 1 до 32 и найти те, которые дают адрес сети 35.167.192.0. Среди таких вариантов выбираем маску с наименьшим количеством единиц в начале, тогда третий байт маски будет минимальным.
from ipaddress import ip_network for mask in range(1, 33): net = ip_network(f’35.167.206.16/{mask}’, 0) print(net, net.netmask) # Ищем в списке сеть 35.167.192.0 и выбираем ту, в которой количество единиц меньше (число после знака /), тогда и байт маски будет меньше
Ошибка.
Попробуйте повторить позже
В терминологии сетей TCP/IP маской сети называют двоичное число, которое показывает, какая часть IP-адреса узла сети относится к адресу сети, а какая – к адресу узла в этой сети. Обычно маска записывается по тем же правилам, что и IP-адрес, - в виде 4 байтов, причем каждый байт записывается в виде десятичного числа. Адрес сети получается в результате применения поразрядной конъюнкции к заданному IP-адресу узла и его маске.
Например, если IP-адрес узла равен 231.32.255.131, а маска равна 255.255.240.0, то адрес сети равен 231.32.240.0.
Для узла с IP-адресом 203.90.129.237 адрес сети равен 203.90.129.236. Чему равно наименьшее значение четвертого слева байта маски? Ответ запишите в виде десятичного числа.
Решение руками:
Чтобы восстановить значение четвертого слева байта маски, переведем числа, располагающиеся в соответствующей позиции в IP-адресе и адресе сети, в двоичную систему счисления. Затем воспользуемся таблицей истинности для этой операции:
Для IP-адреса:
;
Для адреса сети:
;
В результате поразрядной конъюнкции имеем:
Если на месте стоит 1, то в этой позиции цифра в результате совпадет с цифрой в искомом
слагаемом. Если же на месте
стоит 0, то результат конъюнкции будет равен 0. Если на какой-то
позиции в IP-адресе стоит 0, то, вообще говоря, нельзя однозначно определить, что стоит в этом месте в
искомом числе - в результате конъюнкции все равно будет 0. Значит, на cедьмом месте слева месте
может стоять как 0, так и 1. Так как нужно выбрать минимальное значение, запишем там 0. В маске в
двоичном коде сначала стоят все единицы, а потом все нули, поэтому искомое число имеет вид
.
Маска не может начинаться с 0, поэтому окончательный ответ:
.
Решение Python:
Для определения наименьшего значения четвертого байта маски необходимо понять, какая маска соответствует заданному адресу сети. Адрес сети формируется поразрядной конъюнкцией (логическим И) между IP-адресом узла и маской сети. В Python удобно использовать модуль ipaddress, который позволяет создавать объект сети с заданным IP и количеством единиц в маске. Идея перебора заключается в том, чтобы проверить все возможные значения количества единиц в маске от 1 до 32 и найти те, которые дают адрес сети 203.90.129.236. Среди таких вариантов выбираем маску с наименьшим количеством единиц, тогда четвертый байт маски будет минимальным. В конце вычисляется четвертый байт выбранной маски, что и является ответом.
from ipaddress import ip_network for mask in range(1, 33): net = ip_network(f’203.90.129.237/{mask}’, 0) print(net, net.netmask) # Ищем в списке сеть 203.90.129.236 и выбираем ту, в которой количество единиц меньше (число после знака /), тогда и байт маски будет меньше # В ответ записываем четвертый байт маски
Ошибка.
Попробуйте повторить позже
В терминологии сетей TCP/IP маской сети называют двоичное число, которое показывает, какая часть IP-адреса узла сети относится к адресу сети, а какая – к адресу узла в этой сети. Обычно маска записывается по тем же правилам, что и IP-адрес, - в виде 4 байтов, причем каждый байт записывается в виде десятичного числа. Адрес сети получается в результате применения поразрядной конъюнкции к заданному IP-адресу узла и его маске.
Например, если IP-адрес узла равен 231.32.255.131, а маска равна 255.255.240.0, то адрес сети равен 231.32.240.0.
По IP-адресу узла 125.170.90.148 и адресу сети 125.170.88.0 определите чему равно наименьшее количество единиц в двоичной записи третьего байта маски.
Решение руками:
Чтобы восстановить значение третьего слева байта маски, переведем числа, располагающиеся в соответствующей позиции в IP-адресе и маске сети, в двоичную систему счисления. Затем воспользуемся таблицей истинности для этой операции:
Для IP-адреса:
;
Для адреса сети:
;
Запишем уравнение поразрядной конъюнкции IP-адреса и маски, в результате которой получается адрес сети:
Если на месте стоит 1, то в этой позиции цифра в результате совпадет с цифрой в числе,
которое нам нужно найти. Если же на месте
стоит 0, то результат конъюнкции будет
равен 0. Если на какой-то позиции в IP-адресе стоит 0, то, вообще говоря, нельзя однозначно
определить, что стоит в этом месте в искомом числе — в результате конъюнкции все равно будет 0.
Значит, на первых пяти местах слева маски стоят единицы, а на шестом месте слева может
стоять 0 или 1. Так как нужно выбрать минимальное значение, запишем там 0. В маске в
двоичном коде сначала стоят все единицы, а потом все нули, поэтому искомое число имеет вид
.
Наименьшее возможное количество единиц в маске равно 5.
Решение Python:
Для определения наименьшего количества единиц в третьем байте маски необходимо понять, какая маска соответствует заданному адресу сети. Адрес сети формируется поразрядной конъюнкцией (логическим И) между IP-адресом узла и маской сети. В Python удобно использовать модуль ipaddress, который позволяет создавать объект сети с заданным IP и количеством единиц в маске. Идея перебора заключается в том, чтобы проверить все возможные значения количества единиц в маске от 1 до 32 и определить для каждого IP-адрес сети. Затем для третьего байта маски преобразуем его в двоичное число и считаем количество единиц. Среди найденных вариантов выбираем тот, где адрес сети совпадает с 125.170.88.0 и количество единиц в третьем байте минимальное.
from ipaddress import ip_network # Импортируем модуль для работы с IP-адресами и сетями # Перебираем все возможные значения количества единиц в маске от 1 до 32 for mask in range(1, 33): net = ip_network(f’125.170.90.148/{mask}’, strict=False) # Создаем сеть с текущим количеством единиц в маске # Извлекаем третий байт маски, преобразуем в двоичное число и дополняем нулями до 8 бит third_byte_mask = bin(int(net.netmask))[2:].zfill(32)[16:24] print(net, third_byte_mask) # Выводим адрес сети и третий байт маски # Далее ищем сеть 125.170.88.0 и выбираем вариант с минимальным количеством единиц в третьем байте маски # Количество единиц в этом байте и будет ответом
Ошибка.
Попробуйте повторить позже
В терминологии сетей TCP/IP маской сети называют двоичное число, которое показывает, какая часть IP-адреса узла сети относится к адресу сети, а какая – к адресу узла в этой сети. Обычно маска записывается по тем же правилам, что и IP-адрес, - в виде 4 байтов, причем каждый байт записывается в виде десятичного числа. Адрес сети получается в результате применения поразрядной конъюнкции к заданному IP-адресу узла и его маске.
Например, если IP-адрес узла равен 231.32.255.131, а маска равна 255.255.240.0, то адрес сети равен 231.32.240.0.
По IP-адресу узла 216.234.148.136 и адресу сети 216.234.144.0 определите чему равно наименьшее количество единиц в двоичной записи третьего байта маски.
Решение руками:
Чтобы восстановить значение третьего слева байта маски, переведем числа, располагающиеся в соответствующей позиции в IP-адресе и маске сети, в двоичную систему счисления. Затем воспользуемся таблицей истинности для этой операции:
Для IP-адреса:
;
Для адреса сети:
;
В результате поразрядной конъюнкции имеем:
Если на месте стоит 1, то в этой позиции цифра в результате совпадет с цифрой в числе, которое
нам нужно найти. Если же на месте
стоит 0, то результат конъюнкции будет равен 0. Если на
какой-то позиции в IP-адресе стоит 0, то, вообще говоря, нельзя однозначно определить, что
стоит в этом месте в искомом числе — в результате конъюнкции все равно будет 0. Значит,
на первых четрех местах слева маски стоят единицы, а на пятом месте слева месте может
стоять 0 или 1. Так как нужно выбрать минимальное значение, запишем там 0. В маске в
двоичном коде сначала стоят все единицы, а потом все нули, поэтому искомое число имеет вид
.
Наименьшее возможное количество единиц в маске равно 4.
Решение Python:
По условию дан IP-адрес узла и адрес сети
. Необходимо
определить минимальное количество единиц в двоичной записи третьего байта маски, при
котором при поразрядной конъюнкции IP-адреса с маской получается именно данный адрес
сети.
Для этого удобно перебрать все возможные длины маски от до
. Для каждой маски создаём
объект сети с помощью функции ip_network(), указывая IP-адрес и текущую длину маски.
Параметр strict=False позволяет работать даже в случае, если IP-адрес не совпадает с адресом
сети.
Затем получаем двоичное представление маски, выделяем её третий байт (с 16-го по 23-й биты) и
подсчитываем количество единиц. Среди всех вариантов выбираем тот, где адрес сети совпадает
с данным , и определяем минимальное количество единиц в третьем байте
маски.
Таким образом, после перебора всех масок мы получаем ответ.
from ipaddress import ip_network # Перебираем все возможные длины маски от 1 до 32 for mask in range(1, 33): # Создаем сеть на основе IP-адреса и текущей длины маски # strict=False позволяет игнорировать несоответствие хоста и маски net = ip_network(f’216.234.148.136/{mask}’, strict=False) # Переводим маску в двоичный вид и выделяем третий байт (16–23 биты) third_byte_mask = bin(int(net.netmask))[2:].zfill(32)[16:24] # Выводим адрес сети и двоичное значение третьего байта маски print(net, third_byte_mask) # Далее по выводу определяем нужную сеть 216.234.144.0 # и среди таких вариантов выбираем маску с минимальным количеством единиц в третьем байте
Ошибка.
Попробуйте повторить позже
В терминологии сетей TCP/IP маской сети называют двоичное число, которое показывает, какая часть IP-адреса узла сети относится к адресу сети, а какая – к адресу узла в этой сети. Обычно маска записывается по тем же правилам, что и IP-адрес, - в виде 4 байтов, причем каждый байт записывается в виде десятичного числа. Адрес сети получается в результате применения поразрядной конъюнкции к заданному IP-адресу узла и его маске.
Например, если IP-адрес узла равен 231.32.255.131, а маска равна 255.255.240.0, то адрес сети равен 231.32.240.0.
Для узла с IP-адресом 113.184.190.40 маска равна 255.255.224.0. Чему равно количество нулей третьего слева байта адреса сети? Ответ запишите в виде десятичного числа.
Решение руками:
Чтобы восстановить значение третьего слева байта адреса сети, переведем числа, располагающиеся в соответствующей позиции в IP-адресе и адресе сети, в двоичную систему счисления. Затем воспользуемся таблицей истинности для этой операции:
Для IP-адреса:
;
Для маски:
;
В результате поразрядной конъюнкции имеем:
Если же 0 есть на позиции в одном из чисел, значит результат конъюнкции цифр, стоящих на этих
позициях будет равен 0. Значит, на первом и третьем местах слева месте не должен стоять 0. Так как
конъюнкция только двух цифр равных 1 равна 1, поэтому искомое число имеет вид , которое
имеет 2 единицы.
В каждом байте адреса содержится 8 цифр, поэтому окончательный ответ: .
Решение Python:
Нужно найти количество нулей в третьем слева байте адреса сети. Адрес сети получается в
результате применения поразрядной конъюнкции IP-адреса и маски. У нас задан IP-адрес
и маска
. Чтобы решить задачу, создаём объект сети с помощью функции
ip_network(), где указываем IP-адрес узла и маску. Параметр strict=False (или 0) позволяет работать
даже в случае, если IP-адрес не совпадает с адресом сети.
После этого через network_address получаем сетевой адрес. Преобразуем его в двоичный вид и дополняем до 32 бит. Затем берём третий байт (с 16-го по 23-й биты включительно) и подсчитываем количество нулей в нём. Это и будет искомый ответ.
from ipaddress import ip_network # Создаём объект сети, указывая IP-адрес и маску. # Параметр strict=False (0) позволяет использовать произвольный IP-адрес внутри сети. net = ip_network(f’113.184.190.40/255.255.224.0’, 0) # Преобразуем сетевой адрес в двоичный вид длиной 32 бита. net1 = bin(int(net.network_address))[2:].zfill(32) # Извлекаем третий байт (16–23 биты) и подсчитываем количество нулей в нём. print(net1[16:24].count(’0’))
Ошибка.
Попробуйте повторить позже
В терминологии сетей TCP/IP маской сети называют двоичное число, которое показывает, какая часть IP-адреса узла сети относится к адресу сети, а какая – к адресу узла в этой сети. Обычно маска записывается по тем же правилам, что и IP-адрес, - в виде 4 байтов, причем каждый байт записывается в виде десятичного числа. Адрес сети получается в результате применения поразрядной конъюнкции к заданному IP-адресу узла и его маске.
Например, если IP-адрес узла равен 231.32.255.131, а маска равна 255.255.240.0, то адрес сети равен 231.32.240.0.
Для узла с IP-адресом 179.189.172.104 адрес сети равен 179.189.172.96. Чему равно наименьшее значение четвертого слева байта маски? Ответ запишите в виде десятичного числа.
Решение руками:
Чтобы восстановить значение четвертого слева байта маски, переведем числа, располагающиеся в соответствующей позиции в IP-адресе и адресе сети, в двоичную систему счисления. Затем воспользуемся таблицей истинности для этой операции:
Для IP-адреса:
;
Для адреса сети:
;
В результате поразрядной конъюнкции имеем:
Если на месте стоит 1, то в этой позиции цифра в результате совпадет с цифрой в искомом
слагаемом. Если же на месте
стоит 0, то результат конъюнкции будет равен 0. Если на какой-то
позиции в IP-адресе стоит 0, то, вообще говоря, нельзя однозначно определить, что стоит в этом месте в
искомом числе - в результате конъюнкции все равно будет 0. Значит, на четвертом месте слева месте
может стоять как 0, так и 1. Так как нужно выбрать минимальное значение, запишем там 0. В маске в
двоичном коде сначала стоят все единицы, а потом все нули, поэтому искомое число имеет вид
.
Маска не может начинаться с 0, поэтому окончательный ответ: .
Решение Python:
Нужно определить минимальное значение четвёртого байта маски, при котором IP-адрес узла
имеет адрес сети
. Адрес сети вычисляется по правилу:
Операция & - поразрядная конъюнкция.
Так как в условии требуется найти именно наименьшее значение четвёртого байта маски, удобно
организовать перебор всех возможных длин маски от до
и для каждой длины вычислять адрес
сети. Если полученный адрес совпадает с
, то проверяем маску и выбираем ту, у которой
последний байт (четвёртый слева) имеет наименьшее значение.
В Python для таких операций используем модуль ipaddress. Создаём объект сети с помощью
ip_network(), указываем IP-адрес узла и длину маски. Параметр strict=0 позволяет работать
даже в случае, если IP-адрес не совпадает с сетевым адресом. После этого выводим сам
сетевой адрес и соответствующую маску. В полученном списке находим строку с адресом сети
и фиксируем её маску. Наименьшее значение её четвёртого байта и будет
ответом.
from ipaddress import ip_network # Перебираем все возможные длины маски от 1 до 32 for mask in range(1, 33): # Создаём объект сети, указывая IP-адрес узла и длину маски. # strict=0 позволяет не проверять соответствие адреса и маски. net = ip_network(f’179.189.172.104/{mask}’, 0) # Выводим полученный адрес сети и маску для анализа. print(net, net.netmask) # В списке ищем сеть 179.189.172.96 и выбираем её маску. # Минимальное значение четвёртого байта этой маски и есть ответ.
Ошибка.
Попробуйте повторить позже
В терминологии сетей TCP/IP маской сети называют двоичное число, которое показывает, какая часть IP-адреса узла сети относится к адресу сети, а какая – к адресу узла в этой сети. Обычно маска записывается по тем же правилам, что и IP-адрес, - в виде 4 байтов, причем каждый байт записывается в виде десятичного числа. Адрес сети получается в результате применения поразрядной конъюнкции к заданному IP-адресу узла и его маске.
Например, если IP-адрес узла равен 231.32.255.131, а маска равна 255.255.240.0, то адрес сети равен 231.32.240.0.
Для узла с IP-адресом 165.225.161.164 адрес сети равен 165.225.161.160. Чему равно наибольшее значение четвертого слева байта маски? Ответ запишите в виде десятичного числа.
Решение руками:
Чтобы восстановить значение четвертого слева байта маски, переведем числа, располагающиеся в соответствующей позиции в IP-адресе и адресе сети, в двоичную систему счисления. Затем воспользуемся таблицей истинности для этой операции:
Для IP-адреса:
;
Для адреса сети:
;
В результате поразрядной конъюнкции имеем:
Если на месте стоит 1, то в этой позиции цифра в результате совпадет с цифрой в искомом
слагаемом. Если же на месте
стоит 0, то результат конъюнкции будет равен 0. Если на какой-то
позиции в IP-адресе стоит 0, то, вообще говоря, нельзя однозначно определить, что стоит в этом месте в
искомом числе - в результате конъюнкции все равно будет 0. Значит, на четвертом и пятом местах слева
месте может стоять как 0, так и 1. Так как нужно выбрать максимальное значение, запишем там 1. В
маске в двоичном коде сначала стоят все единицы, а потом все нули, поэтому искомое число имеет вид
.
Маска не может начинаться с 0, поэтому окончательный ответ: .
Решение Python:
Нам дан IP-адрес узла и известно, что адрес сети равен
. Чтобы это
условие выполнялось, необходимо правильно подобрать маску сети. Напомним, что адрес сети
вычисляется по правилу:
где операция «&» обозначает поразрядную конъюнкцию.
Так как нужно найти **наибольшее значение четвёртого байта маски**, используем метод перебора:
перебираем все длины маски от до
, для каждой вычисляем адрес сети и проверяем, совпадает ли
он с требуемым
. Если совпадает, то фиксируем соответствующую маску и обращаем
внимание на её четвёртый байт. Среди всех подходящих вариантов выбираем максимальное значение
этого байта.
В Python удобно использовать модуль ipaddress, который позволяет автоматически вычислять
сетевой адрес по IP и маске. Для перебора создаём объект ip_network(), указываем IP и длину маски.
Параметр strict=0 разрешает проверку даже если IP не является сетевым. После этого выводим
найденный адрес сети и соответствующую маску. В списке выбираем тот вариант, где сеть равна
, и среди таких масок определяем максимальный четвёртый байт. Это и будет
ответ.
from ipaddress import ip_network # Перебираем все возможные длины маски от 1 до 32 for mask in range(1, 33): # Создаём объект сети на основе IP-адреса и текущей маски # Параметр strict=0 позволяет использовать адрес хоста net = ip_network(f’165.225.161.164/{mask}’, 0) # Выводим адрес сети и маску для анализа print(net, net.netmask) # В полученном списке ищем сеть 165.225.161.160 # Среди найденных вариантов выбираем маску с наибольшим значением четвёртого байта
Ошибка.
Попробуйте повторить позже
В терминологии сетей TCP/IP маской сети называют двоичное число, которое показывает, какая часть IP-адреса узла сети относится к адресу сети, а какая – к адресу узла в этой сети. Обычно маска записывается по тем же правилам, что и IP-адрес, - в виде 4 байтов, причем каждый байт записывается в виде десятичного числа. Адрес сети получается в результате применения поразрядной конъюнкции к заданному IP-адресу узла и его маске.
Например, если IP-адрес узла равен 231.32.255.131, а маска равна 255.255.240.0, то адрес сети равен 231.32.240.0.
Для узла с IP-адресом 117.35.122.92 адрес сети равен 117.35.120.0. Чему равно наименьшее значение третьего слева байта маски? Ответ запишите в виде десятичного числа.
Решение руками:
Чтобы восстановить значение третьего слева байта маски, переведем числа, располагающиеся в соответствующей позиции в IP-адресе и адресе сети, в двоичную систему счисления. Затем воспользуемся таблицей истинности для этой операции:
Для IP-адреса:
;
Для адреса сети:
;
В результате поразрядной конъюнкции имеем:
Если на месте стоит 1, то в этой позиции цифра в результате совпадет с цифрой в искомом слагаемом. Если же
на месте
стоит 0, то результат конъюнкции будет равен 0. Если на какой-то позиции в IP-адресе стоит 0, то, вообще
говоря, нельзя однозначно определить, что стоит в этом месте в искомом числе - в результате конъюнкции все равно
будет 0.
Значит, на шестом месте слева месте может стоять как 0, так и 1. Так как нужно выбрать минимальное значение,
запишем там 0. В маске в двоичном коде сначала стоят все единицы, а потом все нули, поэтому искомое число имеет
вид .
Маска не может начинаться с 0, поэтому окончательный ответ: .
Решение Python:
Нам дан IP-адрес узла и известно, что адрес сети равен
. Чтобы выполнялось это
условие, нужно подобрать такую маску сети, при которой
где символ «&» означает поразрядную конъюнкцию.
Так как неизвестно, какая именно маска подходит, будем использовать метод перебора: перебираем все
длины маски от до
, для каждой вычисляем адрес сети и проверяем, совпадает ли он с требуемым
.
Для работы удобно использовать модуль ipaddress. Он позволяет создать объект сети с помощью ip_network(), где указываем IP-адрес и длину маски. Параметр strict=0 разрешает выполнять проверку даже если IP не является сетевым адресом. После этого можно получить сетевой адрес (network_address) и маску (netmask).
Дальше из всех найденных масок, которые дают сеть , выбираем ту, у которой **третьий слева байт
минимален**. Это и будет ответ задачи.
from ipaddress import ip_network # Импортируем модуль для работы с IP-адресами и масками # Перебираем все возможные длины маски от 1 до 32 for mask in range(1, 33): # Создаём объект сети на основе IP-адреса и текущей маски # Параметр strict=0 позволяет использовать адрес хоста, а не только сетевой адрес net = ip_network(f’117.35.122.92/{mask}’, 0) # Выводим адрес сети и маску для проверки print(net, net.netmask) # В списке ищем сеть 117.35.120.0 # Среди всех найденных вариантов выбираем маску с наименьшим значением третьего байта
Ошибка.
Попробуйте повторить позже
В терминологии сетей TCP/IP маской сети называют двоичное число, которое показывает, какая часть IP-адреса узла сети относится к адресу сети, а какая – к адресу узла в этой сети. Обычно маска записывается по тем же правилам, что и IP-адрес, - в виде 4 байтов, причем каждый байт записывается в виде десятичного числа. Адрес сети получается в результате применения поразрядной конъюнкции к заданному IP-адресу узла и его маске.
Например, если IP-адрес узла равен 231.32.255.131, а маска равна 255.255.240.0, то адрес сети равен 231.32.240.0.
Для узла с IP-адресом 91.144.83.48 адрес сети равен 91.144.64.0. Чему равно наибольшее значение третьего слева байта маски? Ответ запишите в виде десятичного числа.
Решение руками:
Чтобы восстановить значение третьего слева байта маски, переведем числа, располагающиеся в соответствующей позиции в IP-адресе и адресе сети, в двоичную систему счисления. Затем воспользуемся таблицей истинности для этой операции:
Для IP-адреса:
;
Для адреса сети:
;
В результате поразрядной конъюнкции имеем:
Если на месте стоит 1, то в этой позиции цифра в результате совпадет с цифрой в искомом слагаемом. Если же
на месте
стоит 0, то результат конъюнкции будет равен 0. Если на какой-то позиции в IP-адресе стоит 0, то, вообще
говоря, нельзя однозначно определить, что стоит в этом месте в искомом числе - в результате конъюнкции все равно
будет 0.
Значит, на третьем месте слева месте может стоять как 0, так и 1. Так как нужно выбрать максимальное значение,
запишем там 1. В маске в двоичном коде сначала стоят все единицы, а потом все нули, поэтому искомое число имеет
вид .
Маска не может начинаться с 0, поэтому окончательный ответ: .
Решение Python:
Нам дан IP-адрес узла и известно, что адрес сети равен
. По определению, адрес
сети получается применением поразрядной конъюнкции (логического И) между IP-адресом и маской.
Неизвестно, какая именно маска подходит, поэтому будем перебирать все возможные длины маски от
до
.
Для каждой маски создаём объект сети с помощью функции ip_network(). Задаём IP-адрес и длину маски, при этом
параметр strict=0 позволяет использовать адрес хоста, а не только сетевой адрес. После этого у полученного
объекта можно вывести сам сетевой адрес и маску, чтобы проверить, совпадает ли результат с требуемым
.
Таким образом, просматривая все варианты, мы находим маски, дающие сеть . Из них
выбираем ту, у которой третий слева байт маски принимает наибольшее значение. Это и будет искомый ответ
задачи.
from ipaddress import ip_network # Импортируем модуль для работы с IP-адресами и масками # Перебираем все возможные длины маски от 1 до 32 for mask in range(1, 33): # Создаём объект сети с данным IP-адресом и текущей маской # Параметр strict=0 позволяет использовать IP, даже если он не сетевой net = ip_network(f’91.144.83.48/{mask}’, 0) # Выводим для проверки адрес сети и соответствующую маску print(net, net.netmask) # Среди полученных результатов находим сеть 91.144.64.0 # И выбираем ту маску, у которой третий слева байт наибольший
Ошибка.
Попробуйте повторить позже
В терминологии сетей TCP/IP маской сети называют двоичное число, которое показывает, какая часть IP-адреса узла сети относится к адресу сети, а какая – к адресу узла в этой сети. Обычно маска записывается по тем же правилам, что и IP-адрес, - в виде 4 байтов, причем каждый байт записывается в виде десятичного числа. Адрес сети получается в результате применения поразрядной конъюнкции к заданному IP-адресу узла и его маске.
Например, если IP-адрес узла равен 231.32.255.131, а маска равна 255.255.240.0, то адрес сети равен 231.32.240.0.
Для узла с IP-адресом 178.32.27.129 адрес сети равен 178.32.24.0. Чему равно наибольшее значение третьего слева байта маски? Ответ запишите в виде десятичного числа.
Решение руками:
Чтобы восстановить значение третьего слева байта маски, переведем числа, располагающиеся в соответствующей позиции в IP-адресе и адресе сети, в двоичную систему счисления. Затем воспользуемся таблицей истинности для этой операции:
Для IP-адреса:
;
Для адреса сети:
;
В результате поразрядной конъюнкции имеем:
Если на месте стоит 1, то в этой позиции цифра в результате совпадет с цифрой в искомом слагаемом. Если же
на месте
стоит 0, то результат конъюнкции будет равен 0. Если на какой-то позиции в IP-адресе стоит 0, то, вообще
говоря, нельзя однозначно определить, что стоит в этом месте в искомом числе - в результате конъюнкции все равно
будет 0.
Значит, на шестом месте слева месте может стоять как 0, так и 1. Так как нужно выбрать максимальное значение,
запишем там 1. В маске в двоичном коде сначала стоят все единицы, а потом все нули, поэтому искомое число имеет
вид .
Маска не может начинаться с 0, поэтому окончательный ответ: .
Решение Python:
Чтобы определить маску подсети, при которой IP-адрес даёт сетевой адрес
,
нужно вспомнить, что адрес сети получается в результате поразрядной конъюнкции между IP-адресом
и маской. Так как точная маска неизвестна, будем перебирать все возможные длины маски от
до
.
Для каждой маски создаём объект сети с помощью функции ip_network(), передавая в неё данный IP-адрес и длину
маски. Параметр strict=0 разрешает использовать произвольный IP-адрес хоста, а не только сетевой. После этого у
объекта можно вывести сетевой адрес и маску. Просматривая результаты, находим ту маску, которая даёт сеть
.
Далее среди всех найденных вариантов выбираем ту маску, у которой третий слева байт (то есть третий октет) имеет наибольшее возможное значение. Именно этот байт и требуется записать в ответ.
from ipaddress import ip_network # Импортируем модуль для работы с IP-адресами и масками # Перебираем все возможные длины маски от 1 до 32 for mask in range(1, 33): # Создаём объект сети для IP-адреса 178.32.27.129 с текущей маской # Параметр strict=0 позволяет работать с адресом хоста net = ip_network(f’178.32.27.129/{mask}’, 0) # Выводим адрес сети и маску, чтобы проверить совпадение с 178.32.24.0 print(net, net.netmask) # В результате ищем строку с сетью 178.32.24.0 # Из подходящих вариантов выбираем маску, где третий байт максимален
Ошибка.
Попробуйте повторить позже
В терминологии сетей TCP/IP маска сети — это двоичное число, меньшее ; в маске сначала (в старших разрядах)
стоят единицы, а затем с некоторого места нули. Маска определяет, какая часть IP-адреса узла сети относится к адресу
сети, а какая -– к адресу самого узла в этой сети.
Обычно маска записывается по тем же правилам, что и IP-адрес — в виде четырёх байт, причём каждый байт записывается в виде десятичного числа. Адрес сети получается в результате применения поразрядной конъюнкции к заданному IP-адресу узла и маске.
Например, если IP-адрес узла равен 121.32.255.121, а маска равна 255.255.255.0, то адрес сети равен 121.32.255.0.
Для узла с IP-адресом 204.185.106.48 адрес сети равен 204.185.96.0. Найдите наименьшее возможное количество единиц в двоичной записи маски подсети.
Решение руками:
Перепишем IP-адрес узла и адрес сети в двоичной системе счисления:
IP | 11001100.10111001.01101010.00110000 |
Net | 11001100.10111001.01100000.00000000 |
Зная тот факт, что адрес подсети получается путём перемножения цифр двоичной записи маски и IP-адреса, можно точно определить некоторые цифры в маске подсети:
Mask | 11111111.11111111.111*0000.00000000 |
IP | 11001100.10111001.01101010.00110000 |
Net | 11001100.10111001.01100000.00000000 |
Так как по условию задачи нам необходимо найти наименьшее количество единиц, то на пустое место поставим ноль.
Получим маску подсети – 11111111.11111111.11100000.00000000. Количество единиц в ней равно 19.
Решение Python:
Чтобы найти наименьшее возможное количество единиц в двоичной записи маски подсети, необходимо перебрать
все возможные варианты длины маски от до
. Напомним, что адрес сети получается в результате поразрядной
конъюнкции (логического И) между IP-адресом и маской.
В Python это удобно реализовать с помощью функции ip_network() из модуля ipaddress. Она позволяет задать IP-адрес узла и длину маски. Параметр strict=0 используется для того, чтобы можно было передавать не сетевой адрес, а обычный адрес узла.
Далее для каждой маски вычисляем адрес сети и сравниваем его с заданным в условии (). Среди всех
подходящих вариантов выбираем тот, у которого количество единиц в маске минимально. Это значение и будет
ответом.
from ipaddress import ip_network # Импортируем модуль для работы с IP-адресами и масками # Перебираем все возможные длины маски от 0 до 32 for mask in range(33): # Создаём объект сети для IP-адреса 204.185.106.48 с текущей маской # Параметр strict=0 позволяет использовать произвольный адрес узла, а не только сетевой net = ip_network(f’204.185.106.48/{mask}’, 0) # Выводим адрес сети и маску, чтобы проверить совпадение с 204.185.96.0 print(net, net.netmask) # В результате находим строку с сетью 204.185.96.0 # Из всех таких масок выбираем ту, у которой количество единиц в двоичной записи минимально
Ошибка.
Попробуйте повторить позже
В терминологии сетей TCP/IP маской сети называется 32-разрядная двоичная последовательность, определяющая, какая часть IP-адреса узла сети относится к адресу сети, а какая — к адресу самого узла в этой сети. При этом в маске сначала (в старших разрядах) стоят единицы, а затем с некоторого места нули.
Адрес сети получается в результате применения поразрядной конъюнкции к заданному IP-адресу узла и маске. Обычно маска записывается по тем же правилам, что и IP-адрес — в виде четырёх байтов, причём каждый байт записывается в виде десятичного числа.
Пример. Пусть IP-адрес узла равен 231.32.255.131, а маска равна 255.255.240.0. Тогда адрес сети равен 231.32.240.0.
Для узла с IP-адресом 199.88.184.57 адрес сети равен 199.88.176.0. Чему равен третий слева байт маски? Ответ запишите в виде десятичного числа.
Решение руками:
Рассмотрим третий слева байт в IP-адресе узла и адресе сети, представим их в двоичном виде:
Заметим, что в 1, 3 и 4 слева битах маски должна стоять единица, чтобы в первом, третьем и четвертом битах
адреса сети была единица, а в 5 слева бите – ноль, так как в ip-адресе там стоит единица, а в адресе сети ноль. И так
как в маске сначала идут единицы, а потом одни нули, третий байт будет равен .
Решение Python:
Чтобы найти третий байт маски, нужно понять, какая часть IP-адреса относится к сети. Адрес сети получается, если каждую цифру IP-адреса сравнивать с маской и оставлять только те цифры, где в маске стоит 1 (логическое И).
Идея решения очень простая: мы перебираем все возможные маски от 0 до 32 единиц. Для каждой маски создаём «сетевой объект» с помощью ip_network() из Python. Параметр strict=0 нужен, чтобы можно было использовать обычный IP-адрес узла, а не только адрес сети.
Дальше для каждой маски мы выводим адрес сети и саму маску. Когда находим строку, где адрес сети совпадает с 199.88.176.0, смотрим на третий байт маски — это и есть ответ.
from ipaddress import ip_network # Импортируем модуль для работы с IP-адресами и сетями # Перебираем все возможные маски длиной от 0 до 32 бит for mask in range(33): # Создаём сеть для IP 199.88.184.57 с текущей маской # strict=0 позволяет использовать любой IP-адрес, не только сетевой net = ip_network(f’199.88.184.57/{mask}’, 0) # Выводим адрес сети и маску, чтобы увидеть, какая маска даёт нужный адрес сети print(net, net.netmask) # После просмотра выводов находим сеть 199.88.176.0 # Третий байт маски в этой строке — это и будет ответ
Ошибка.
Попробуйте повторить позже
В терминологии сетей TCP/IP маской сети называется 32-разрядная двоичная последовательность, определяющая, какая часть IP-адреса узла сети относится к адресу сети, а какая – к адресу самого узла в этой сети. При этом в маске сначала (в старших разрядах) стоят единицы, а затем с некоторого места нули.
Адрес сети получается в результате применения поразрядной конъюнкции к заданному IP-адресу узла и маске. Обычно маска записывается по тем же правилам, что и IP-адрес — в виде четырёх байтов, причём каждый байт записывается в виде десятичного числа.
Пример. Пусть IP-адрес узла равен 231.32.255.131, а маска равна 255.255.240.0. Тогда адрес сети равен 231.32.240.0.
Для узла с IP-адресом 222.135.184.200 адрес сети равен 222.135.160.0. Чему равен третий слева байт маски? Ответ запишите в виде десятичного числа.
Решение руками:
Рассмотрим третий слева байт в IP-адресе узла и адресе сети, представим их в двоичном виде:
Заметим, что в 3 слева бите маски должна стоять единица, чтобы в третьем бите адреса сети была единица, а в 4
слева бите – ноль, так как в ip-адресе там стоит единица, а в адресе сети ноль. И так как в маске сначала идут
единицы, а потом одни нули, третий байт будет равен .
Решение Python:
Чтобы найти третий байт маски, нужно понять, какая часть IP-адреса относится к сети, а какая к самому компьютеру. Адрес сети получается, если каждую цифру IP-адреса сравнивать с маской и оставлять только те, где в маске стоит 1 (логическое И).
Мы перебираем все возможные длины маски от 0 до 32 единиц. Для каждой маски создаём сетевой объект с помощью ip_network() из Python. Параметр strict=0 позволяет использовать любой IP-адрес узла, а не только сетевой адрес.
Дальше для каждой маски выводим адрес сети и саму маску. Когда находим адрес сети 222.135.160.0, смотрим на третий байт маски — это и будет ответ.
from ipaddress import ip_network # Импортируем модуль для работы с IP-адресами и сетями # Перебираем все возможные маски длиной от 0 до 32 бит for mask in range(33): # Создаём сеть для IP 222.135.184.200 с текущей маской # strict=0 позволяет использовать любой IP-адрес, а не только адрес сети net = ip_network(f’222.135.184.200/{mask}’, 0) # Выводим адрес сети и маску, чтобы увидеть, какая маска даёт нужный адрес сети print(net, net.netmask) # После просмотра выводов находим сеть 222.135.160.0 # Третий байт маски в этой строке — это и будет ответ
Ошибка.
Попробуйте повторить позже
В терминологии сетей TCP/IP маской сети называется 32-разрядная двоичная последовательность, определяющая, какая часть IP-адреса узла сети относится к адресу сети, а какая — к адресу самого узла в этой сети. При этом в маске сначала (в старших разрядах) стоят единицы, а затем с некоторого места нули.
Адрес сети получается в результате применения поразрядной конъюнкции к заданному IP-адресу узла и маске. Обычно маска записывается по тем же правилам, что и IP-адрес — в виде четырёх байтов, причём каждый байт записывается в виде десятичного числа.
Пример. Пусть IP-адрес узла равен 231.32.255.131, а маска равна 255.255.240.0. Тогда адрес сети равен 231.32.240.0.
Для узла с IP-адресом 114.217.199.111 адрес сети равен 114.217.128.0. Чему равен третий слева байт маски? Ответ запишите в виде десятичного числа.
Решение руками:
Рассмотрим третий слева байт в IP-адресе узла и адресе сети, представим их в двоичном виде:
Заметим, что в 1 слева бите маски должна стоять единица, чтобы в первом бите адреса сети была единица, а в 2
слева бите – ноль, так как в ip-адресе там стоит единица, а в адресе сети ноль. И так как в маске сначала идут
единицы, а потом одни нули, третий байт будет равен .
Решение Python:
Чтобы узнать третий байт маски, нужно понять, какая часть IP-адреса принадлежит сети, а какая — компьютеру. Адрес сети получается, если каждую цифру IP-адреса сравнивать с маской и оставлять только те, где в маске стоит 1 (логическое И).
Мы проверяем все возможные длины маски от 0 до 32 единиц. Для каждой маски создаём сетевой объект с помощью ip_network() из Python. Параметр strict=0 позволяет использовать любой IP-адрес, а не только сетевой.
Дальше для каждой маски выводим адрес сети и саму маску. Когда находим адрес сети 114.217.128.0, смотрим на третий байт маски — это и будет ответ.
from ipaddress import ip_network # Импортируем модуль для работы с IP-адресами и сетями # Перебираем все возможные маски длиной от 0 до 32 бит for mask in range(33): # Создаём сеть для IP 114.217.199.111 с текущей маской # strict=0 позволяет использовать любой IP-адрес, а не только адрес сети net = ip_network(f’114.217.199.111/{mask}’, 0) # Выводим адрес сети и маску, чтобы увидеть, какая маска даёт нужный адрес сети print(net, net.netmask) # После просмотра выводов находим сеть 114.217.128.0 # Третий байт маски в этой строке — это и будет ответ
Ошибка.
Попробуйте повторить позже
В терминологии сетей TCP/IP маска сети – это двоичное число, меньшее ; в маске сначала (в старших разрядах)
стоят единицы, а затем с некоторого места нули. Маска определяет, какая часть IP-адреса узла сети относится к
адресу сети, а какая -– к адресу самого узла в этой сети. Обычно маска записывается по тем же правилам,
что и IP-адрес — в виде четырех байт, причем каждый байт записывается в виде десятичного числа.
Адрес сети получается в результате применения поразрядной конъюнкции к заданному IP-адресу узла и
маске.
Например, если IP-адрес узла равен 131.32.255.131, а маска равна 255.255.240.0, то адрес сети равен 131.32.240.0.
Для узла с IP-адресом 147.36.148.86 адрес сети равен 147.36.128.0. Для скольких значений третьего слева байта маски допустим такой адрес сети?
Решение руками:
Запишем третий слева байт IP-адреса в двоичной системе счисления: .
Аналогично запишем третий слева байт адреса сети, также в двоичной системе счисления: .
Учитывая, что адрес сети получается в результате применения поразрядной конъюнкции к заданному IP-адресу
узла и маске, запишем возможный вариант маски, обозначив символом «x» те места, где маска может иметь
неоднозначное значение: .
Мы знаем, что в маске сначала идут единицы, затем нули. Значит, возможно вставить всего три различных варианта вместо «хх»: 00, 10, 11.
Решение Python:
Нам нужно узнать, сколько разных масок дают одинаковый адрес сети 147.36.128.0 при изменении третьего байта. Адрес сети формируется, когда каждый байт IP-адреса сравнивается с маской: там, где маска имеет 1, цифра остаётся, где 0 — обнуляется.
Мы перебираем все возможные варианты маски с количеством единиц от 0 до 32. Для каждой маски создаём сетевой объект с помощью функции ip_network() из библиотеки ipaddress. Параметр strict=0 позволяет использовать любой IP-адрес, а не только сетевой.
Дальше для каждой маски выводим адрес сети и саму маску. После просмотра выводов считаем, сколько разных масок дают сеть 147.36.128.0.
from ipaddress import ip_network # Импортируем модуль для работы с IP-адресами и сетями # Перебираем все возможные маски с количеством единиц от 0 до 32 for mask in range(33): # Создаём сетевой объект для IP 147.36.148.86 с текущей маской # strict=0 позволяет использовать любой IP-адрес, а не только адрес сети net = ip_network(f’147.36.148.86/{mask}’, 0) # Выводим адрес сети и маску, чтобы увидеть, какие маски дают нужный адрес сети print(net, net.netmask) # После просмотра выводов считаем, сколько различных масок дают сеть 147.36.128.0 # Это и будет ответ
Ошибка.
Попробуйте повторить позже
В терминологии сетей TCP/IP маска сети – это двоичное число, меньшее ; в маске сначала (в старших разрядах)
стоят единицы, а затем с некоторого места нули. Маска определяет, какая часть IP-адреса узла сети
относится к адресу сети, а какая – к адресу самого узла в этой сети. Обычно маска записывается по тем же
правилам, что и IP-адрес – в виде четырех байт, причем каждый байт записывается в виде десятичного числа.
Адрес сети получается в результате применения поразрядной конъюнкции к заданному IP-адресу узла и
маске.
Например, если IP-адрес узла равен 131.32.255.131, а маска равна 255.255.240.0, то адрес сети равен 131.32.240.0.
Для узла с IP-адресом 130.110.203.197 адрес сети равен 130.110.203.196. Какое минимальное количество единиц может быть в маске сети?
Решение руками:
Запишем четвертый слева байт IP-адреса в двоичной системе счисления: .
Аналогично запишем четыертый слева байт адреса сети, также в двоичной системе счисления: .
Учитывая, что адрес сети получается в результате применения поразрядной конъюнкции к заданному IP-адресу
узла и маске, запишем возможный вариант маски, обозначив символом «x» те места, где маска может иметь
неоднозначное значение: .
Так как по условию задачи нам необходимо найти минимальное количество единиц, то на место символа «x» ставим
цифру 0. Получаем искомое количество единиц: .
Решение Python:
Нам нужно найти минимальное количество единиц в маске, которое даёт нужный адрес сети 130.110.203.196. Адрес сети получается, когда IP-адрес сравнивается с маской: там, где маска равна 1, цифра остаётся, а там, где 0 — обнуляется.
Мы будем проверять все возможные маски с количеством единиц от 0 до 32. Для каждой маски создаём сетевой объект с помощью функции ip_network() из библиотеки ipaddress. Параметр strict=0 позволяет использовать любой IP-адрес, а не только адрес сети.
Для каждой маски выводим адрес сети и саму маску. После этого смотрим, при какой маске адрес сети совпадает с 130.110.203.196. Среди всех таких масок выбираем ту, где количество единиц минимальное.
from ipaddress import ip_network # Импортируем модуль для работы с IP-адресами и сетями # Перебираем все маски с количеством единиц от 0 до 32 for mask in range(33): # Создаём сетевой объект для IP 130.110.203.197 с текущей маской # strict=0 позволяет использовать любой IP-адрес, а не только адрес сети net = ip_network(f’130.110.203.197/{mask}’, 0) # Выводим адрес сети и маску, чтобы увидеть, при какой маске получается нужный адрес сети print(net, net.netmask) # После просмотра выводов выбираем минимальное количество единиц в маске, при котором сеть равна 130.110.203.196 # Это и будет ответ
Ошибка.
Попробуйте повторить позже
В терминологии сетей TCP/IP маска сети – это двоичное число, меньшее ; в маске сначала (в старших разрядах)
стоят единицы, а затем с некоторого места нули.
Маска определяет, какая часть IP-адреса узла сети относится к адресу сети, а какая – к адресу самого узла в этой сети. Обычно маска записывается по тем же правилам, что и IP-адрес – в виде четырех байт, причем каждый байт записывается в виде десятичного числа.
Адрес сети получается в результате применения поразрядной конъюнкции к заданному IP-адресу узла и маске. Например, если IP-адрес узла равен 131.32.255.131, а маска равна 255.255.240.0, то адрес сети равен 131.32.240.0.
Для узла с IP-адресом 25.74.172.28 адрес сети равен 25.74.160.0. Найдите наименьшее возможное количество нулей в двоичной записи маски подсети.
Решение руками:
Запишем третий слева байт IP-адреса в двоичной системе счисления: .
Аналогично запишем третий слева байт адреса сети, также в двоичной системе счисления: .
Учитывая, что адрес сети получается в результате применения поразрядной конъюнкции к заданному IP-адресу
узла и маске, запишем возможный вариант маски, обозначив символом «x» те места, где маска может иметь
неоднозначное значение: .
Так как по условию задачи нам необходимо найти минимальное количество нулей, то на место символа «x» ставим
цифру 1. Получаем искомое количество нулей: .
Решение Python:
Нам нужно найти наименьшее количество нулей в маске, которое даёт адрес сети 25.74.160.0. Маска показывает, какие части IP-адреса остаются без изменений (единицы), а какие обнуляются (нули). Количество нулей — это просто 32 минус количество единиц в маске.
Мы будем проверять все возможные маски с количеством единиц от 0 до 32. Для каждой маски создаём сетевой объект с помощью функции ip_network() из библиотеки ipaddress. Параметр strict=0 позволяет использовать любой IP-адрес, даже если он не совпадает с адресом сети.
Для каждой маски выводим адрес сети и количество нулей в маске, чтобы видеть, при какой маске получается нужный адрес сети. После этого выбираем минимальное количество нулей среди всех подходящих масок.
from ipaddress import ip_network # Импортируем модуль для работы с IP-адресами и сетями # Перебираем все маски с количеством единиц от 0 до 32 for mask in range(33): # Создаём сетевой объект для IP 25.74.172.28 с текущей маской # strict=0 позволяет использовать любой IP-адрес, а не только адрес сети net = ip_network(f’25.74.172.28/{mask}’, 0) # Выводим адрес сети и количество нулей в маске # bin(int(net.netmask))[2:].zfill(32) превращает маску в 32-битную двоичную строку # .count(’0’) считает количество нулей print(net, bin(int(net.netmask))[2:].zfill(32).count(’0’)) # После просмотра выводов выбираем минимальное количество нулей в маске, при котором сеть равна 25.74.160.0 # Это и будет ответ
Ошибка.
Попробуйте повторить позже
В терминологии сетей TCP/IP маска сети — это двоичное число, меньшее ; в маске сначала (в старших разрядах)
стоят единицы, а затем с некоторого места нули. Маска определяет, какая часть IP-адреса узла сети относится к
адресу сети, а какая – к адресу самого узла в этой сети. Обычно маска записывается по тем же правилам,
что и IP-адрес — в виде четырех байт, причем каждый байт записывается в виде десятичного числа.
Адрес сети получается в результате применения поразрядной конъюнкции к заданному IP-адресу узла и
маске.
Для узла с IP-адресом 210.210.230.65 адрес сети равен 210.210.224.0.
Найдите наименьшее возможное количество нулей в двоичной записи маски подсети.
Решение руками:
Запишем третий и четвертый слева байты IP-адреса в двоичной системе счисления: ,
Аналогично запишем третий и четвертый слева байты адреса сети, также в двоичной системе счисления:
,
.
Учитывая, что адрес сети получается в результате применения поразрядной конъюнкции к заданному IP-адресу
узла и маске, запишем возможный вариант двух последних байт маски, обозначив символом «x» те места, где маска
может иметь неоднозначное значение: .
Так как по условию задачи нам необходимо найти наименьшее количество нулей, то на место символа «x» ставим
цифру 1. Получаем искомое количество нулей: .
Решение Python:
Нам нужно найти наименьшее количество нулей в маске, которое даёт адрес сети 210.210.224.0. Маска показывает, какие части IP-адреса остаются неизменными (единицы), а какие обнуляются (нули). Количество нулей можно посчитать как 32 минус количество единиц в маске.
Мы проверяем все возможные маски с количеством единиц от 0 до 32. Для каждой маски создаём сетевой объект с помощью функции ip_network() из библиотеки ipaddress. Параметр strict=0 позволяет использовать любой IP-адрес, даже если он не совпадает с адресом сети.
Для каждой маски выводим адрес сети и количество нулей в маске, чтобы увидеть, при какой маске получается нужный адрес сети. После просмотра выводов выбираем минимальное количество нулей среди всех подходящих масок.
from ipaddress import ip_network # Импортируем модуль для работы с IP-адресами и сетями # Перебираем все маски с количеством единиц от 0 до 32 for mask in range(33): # Создаём сетевой объект для IP 210.210.230.65 с текущей маской # strict=0 позволяет использовать любой IP-адрес, а не только адрес сети net = ip_network(f’210.210.230.65/{mask}’, 0) # Выводим адрес сети и количество нулей в маске # bin(int(net.netmask))[2:].zfill(32) превращает маску в 32-битную двоичную строку # .count(’0’) считает количество нулей print(net, bin(int(net.netmask))[2:].zfill(32).count(’0’)) # После просмотра выводов выбираем минимальное количество нулей в маске, при котором сеть равна 210.210.224.0 # Это и будет ответ
Ошибка.
Попробуйте повторить позже
В терминологии сетей TCP/IP маска сети — это двоичное число, меньшее ; в маске сначала (в старших разрядах)
стоят единицы, а затем с некоторого места нули. Маска определяет, какая часть IP-адреса узла сети относится к
адресу сети, а какая – к адресу самого узла в этой сети. Обычно маска записывается по тем же правилам,
что и IP-адрес — в виде четырех байт, причем каждый байт записывается в виде десятичного числа.
Адрес сети получается в результате применения поразрядной конъюнкции к заданному IP-адресу узла и
маске.
Для узла с IP-адресом 135.121.69.38 адрес сети равен 135.121.64.0.
Найдите наибольшее возможное значение третьего слева байта маски.
Ответ запишите в виде десятичного числа.
Решение Python:
Нам нужно найти наибольшее возможное значение третьего байта маски, которое даёт адрес сети 135.121.64.0. Маска показывает, какие части IP-адреса остаются неизменными (единицы), а какие обнуляются (нули). Третий байт маски особенно важен, так как именно он влияет на формирование нужной сети в третьем октете.
Мы проверяем все возможные маски с количеством единиц от 0 до 32. Для каждой маски создаём сетевой объект с помощью функции ip_network() из библиотеки ipaddress. Параметр strict=0 позволяет использовать любой IP-адрес, даже если он не совпадает с адресом сети.
Для каждой маски выводим адрес сети и маску. Затем ищем среди всех подходящих вариантов сеть 135.121.64.0 и смотрим, какое максимальное значение третьего байта маски встречается. Это значение и будет ответом.
from ipaddress import ip_network # Импортируем модуль для работы с IP-адресами и сетями # Перебираем все маски с количеством единиц от 0 до 32 for mask in range(33): # Создаём сетевой объект для IP 135.121.69.38 с текущей маской # strict=0 позволяет использовать любой IP-адрес, а не только адрес сети net = ip_network(f’135.121.69.38/{mask}’, 0) # Выводим адрес сети и маску # Позже нужно будет проверить третий байт маски для сети 135.121.64.0 print(net, net.netmask) # После просмотра выводов выбираем наибольшее значение третьего байта маски для сети 135.121.64.0 # Это и будет ответ
Решение руками:
Запишем третий слева байт IP-адреса в двоичной системе счисления: .
Аналогично запишем третий слева байт адреса сети, также в двоичной системе счисления: .
Учитывая, что адрес сети получается в результате применения поразрядной конъюнкции к заданному IP-адресу
узла и маске, запишем возможный вариант третьего слева байта маски, обозначив символом «x» те места, где маска
может иметь неоднозначное значение: .
Так как по условию задачи нам необходимо найти наибольшее возможное значение третьего слева байта маски, то
на место символа «x» ставим цифру 1. Получаем значение третьего байта:.