Вопрос:

Для узла с IP-адресом 117.83.85.27 адрес сети равен 117.83.80.0. Каково наибольшее возможное количество единиц в разрядах маски?

Ответ:

Решение:

IP-адрес узла: 117.83.85.27. Адрес сети: 117.83.80.0.

IP-адрес узла в двоичной системе:

117 = 01110101

83 = 01010011

85 = 01010101

27 = 00011011

Адрес сети в двоичной системе:

117 = 01110101

83 = 01010011

80 = 01010000

0 = 00000000

Маска сети получается путем поразрядной конъюнкции IP-адреса узла и адреса сети. Если бит в IP-адресе узла и адресе сети совпадает, то в маске ставится 1. Если не совпадает - 0. Однако, по условию, маска состоит из единиц, за которыми следуют нули.

Сравнивая IP-адрес узла (117.83.85.27) и адрес сети (117.83.80.0), мы видим, что различаются они в третьем байте.

IP-адрес узла (третий байт): 01010101 (85)

Адрес сети (третий байт): 01010000 (80)

Для получения адреса сети 117.83.80.0 из IP-адреса 117.83.85.27 с помощью маски, нужно найти такую маску, чтобы поразрядная конъюнкция давала 117.83.80.0.

Рассмотрим третий байт:

IP-адрес узла: 01010101

Адрес сети: 01010000

Чтобы получить 01010000 из 01010101, нужно, чтобы единицы в маске были в позициях, где биты совпадают. Нули в маске должны быть в позициях, где биты отличаются.

Маска (двоичная): 11111100

Теперь проверим это с IP-адресом узла:

01010101 (85)

11111100 (маска)

AND

01010000 (80) - совпадает с адресом сети.

В этом байте 6 единиц и 2 нуля.

Первый байт маски: 255 (11111111) - 8 единиц.

Второй байт маски: 255 (11111111) - 8 единиц.

Третий байт маски: 252 (11111100) - 6 единиц.

Четвертый байт маски: 0 (00000000) - 0 единиц.

Общее количество единиц в маске = 8 + 8 + 6 + 0 = 22.

Однако, вопрос звучит: "Каково наибольшее возможное количество единиц в разрядах маски?". Это значит, что мы можем выбрать такую маску, которая даст указанный адрес сети, и при этом будет иметь как можно больше единиц.

Чтобы получить адрес сети 117.83.80.0 из IP-адреса 117.83.85.27, маска должна быть такой, чтобы поразрядная конъюнкция давала 80 в третьем байте.

IP-адрес узла: 01010101 (85)

Адрес сети: 01010000 (80)

Чтобы получить 0 в 6-й и 7-й позициях (считая справа) третьего байта адреса сети, а биты в этих позициях IP-адреса узла равны 0 и 1 соответственно, маска должна иметь 0 в этих позициях. Для остальных бит, где IP-адрес узла имеет 1, а адрес сети 0, маска также должна иметь 0.

Рассмотрим третий байт:

IP-адрес узла: 01010101

Адрес сети: 01010000

Чтобы получить 00000000 в последних двух битах третьего байта, а также в битах, где IP-адрес узла = 1, а адрес сети = 0, маска должна иметь нули в этих позициях.

Пример:

IP-адрес узла: 01010101

Адрес сети: 01010000

Маска (для получения 80): 11111100

В этой маске 6 единиц в третьем байте.

Для получения максимального числа единиц, мы должны определить, где именно в третьем байте возможны единицы. Единицы в маске означают, что соответствующий бит IP-адреса узла и сети совпадают.

IP-адрес узла: 01010101

Адрес сети: 01010000

Сравниваем биты:

Бит 7: 0 = 0 (совпадают)

Бит 6: 1 ≠ 0 (не совпадают)

Бит 5: 0 = 0 (совпадают)

Бит 4: 1 = 1 (совпадают)

Бит 3: 0 = 0 (совпадают)

Бит 2: 1 ≠ 0 (не совпадают)

Бит 1: 0 = 0 (совпадают)

Бит 0: 1 ≠ 0 (не совпадают)

Для получения адреса сети 117.83.80.0, маска должна иметь 0 в тех позициях, где IP-адрес узла и адрес сети различаются. Также, маска должна иметь 0 в тех позициях, где IP-адрес узла имеет 1, а адрес сети 0.

В третьем байте:

IP-адрес узла: 01010101

Адрес сети: 01010000

Маска должна обнулить биты, где IP-адрес узла имеет 1, а адрес сети 0. Здесь таких нет.

Маска должна быть такой, чтобы при AND с IP-адресом узла получался адрес сети.

01010101 (85) AND Маска = 01010000 (80)

Разберем по битам:

Бит 7: 0 AND M7 = 0 (M7=0 или M7=1)

Бит 6: 1 AND M6 = 0 (M6=0)

Бит 5: 0 AND M5 = 1 (невозможно, если M5=0, то 0; если M5=1, то 0)

В третьем байте IP-адрес узла 85 (01010101), адрес сети 80 (01010000).

Чтобы получить 80 из 85, маска должна иметь:

01010101

AND

????? ? 0 ? 1 ? 0 ? 0

Если в IP-адресе узла и адресе сети биты совпадают, то в маске может быть 1. Если биты не совпадают, то в маске должен быть 0.

Бит 7: 0 = 0. В маске может быть 1.

Бит 6: 1 ≠ 0. В маске должен быть 0.

Бит 5: 0 = 0. В маске может быть 1.

Бит 4: 1 = 1. В маске может быть 1.

Бит 3: 0 = 0. В маске может быть 1.

Бит 2: 1 ≠ 0. В маске должен быть 0.

Бит 1: 0 = 0. В маске может быть 1.

Бит 0: 1 ≠ 0. В маске должен быть 0.

Таким образом, для третьего байта маски, чтобы получить 01010000 из 01010101, получаем: 10111010. Но это не стандартная маска (единицы должны идти перед нулями).

Условие гласит: "При этом в маске сначала (в старших разрядах) стоят единицы, а затем с некоторого разряда нули."

IP-адрес узла: 117.83.85.27

Адрес сети: 117.83.80.0

Разница в третьем байте: 85 vs 80.

85 = 01010101

80 = 01010000

Чтобы получить 80, нужно обнулить 2-й и 0-й биты (справа) третьего байта. Для этого маска должна иметь 0 в этих позициях. А также, если бы были различия в старших битах, где IP-адрес узла = 1, а адрес сети = 0, маска тоже должна быть 0.

Чтобы получить адрес сети 117.83.80.0, маска должна иметь 0 в тех разрядах, где IP-адрес узла и адрес сети различаются, и там, где IP-адрес узла имеет 1, а адрес сети 0.

Рассмотрим, где должны быть нули в маске, чтобы получить 80 из 85.

85: 01010101

80: 01010000

Различия: 6-й бит (1 vs 0) и 2-й бит (1 vs 0).

Это означает, что маска должна иметь 0 в 6-м и 2-м битах третьего байта.

Чтобы получить наибольшее число единиц, маска должна быть как можно ближе к 255.255.255.255, но при этом удовлетворять условию, что поразрядная конъюнкция с 117.83.85.27 дает 117.83.80.0.

Первые два байта маски точно 255 (11111111).

Рассмотрим третий байт (85): 01010101. Мы хотим получить 80 (01010000).

Чтобы получить 0 в 6-м и 2-м битах, маска должна иметь 0 в этих позициях.

Следовательно, маска в третьем байте будет иметь вид: 11111010. Это 250.

Последний байт маски будет 0 (00000000).

Маска: 255.255.250.0

IP-адрес узла: 117.83.85.27 (01110101.01010011.01010101.00011011)

Маска: 255.255.250.0 (11111111.11111111.11111010.00000000)

Результат AND:

117.83.80.0 (01110101.01010011.01010000.00000000)

Это соответствует адресу сети.

Количество единиц в этой маске: 8 (1-й байт) + 8 (2-й байт) + 6 (3-й байт) + 0 (4-й байт) = 22.

Однако, условие "сначала единицы, потом нули" должно быть соблюдено. Маска 255.255.250.0 (11111111.11111111.11111010.00000000) не удовлетворяет этому условию, так как в третьем байте есть 0, а затем 1.

Вернемся к тому, что нужно получить 117.83.80.0.

IP-адрес узла: 117.83.85.27

Адрес сети: 117.83.80.0

Разница в третьем байте: 85 (01010101) и 80 (01010000).

Для получения адреса сети, маска должна обнулить биты IP-адреса, которые отличаются от битов адреса сети, ИЛИ где IP-адрес имеет 1, а адрес сети 0.

Третий байт IP-адреса узла: 01010101

Третий байт адреса сети: 01010000

Чтобы получить 01010000, мы должны гарантировать, что последние два бита (справа) станут 0. Для этого маска должна иметь 0 в этих позициях.

Маска (третий байт): ???????00

А также, маска должна иметь 0 в тех позициях, где IP-адрес узла имеет 1, а адрес сети 0.

В данном случае, биты, где IP-адрес узла = 1, а адрес сети = 0, это 6-й и 2-й биты (считая справа).

Значит, маска должна иметь 0 в 6-м и 2-м битах.

Маска (третий байт): 11111010 - Это 250.

Однако, эта маска не удовлетворяет условию "сначала единицы, затем нули".

Чтобы удовлетворить условию, маска должна иметь вид: 1111....111000....000.

Пусть маска имеет X единиц в третьем байте.

IP-адрес узла: 01010101

Требуемый результат: 01010000

Чтобы гарантированно получить 80, последние два бита (6-й и 2-й, считая справа) в маске должны быть 0.

Маска (третий байт): 11111010

Это 250. Но это не удовлетворяет условию.

Давайте переосмыслим "Каково наибольшее возможное количество единиц в разрядах маски?"

Мы знаем, что адрес сети = IP-адрес узла AND Маска.

117.83.80.0 = 117.83.85.27 AND Маска.

Это значит, что там, где в адресе сети стоит 0, в IP-адресе узла может быть и 0, и 1. Маска в этой позиции должна быть 0, чтобы получилось 0.

Там, где в адресе сети стоит 1, в IP-адресе узла тоже должна быть 1, и маска тоже должна быть 1.

Рассмотрим третий байт:

IP-адрес узла: 01010101 (85)

Адрес сети: 01010000 (80)

Бит 7: IP=0, Сеть=0. Маска может быть 0 или 1.

Бит 6: IP=1, Сеть=0. Маска ОБЯЗАТЕЛЬНО должна быть 0.

Бит 5: IP=0, Сеть=0. Маска может быть 0 или 1.

Бит 4: IP=1, Сеть=1. Маска ОБЯЗАТЕЛЬНО должна быть 1.

Бит 3: IP=0, Сеть=0. Маска может быть 0 или 1.

Бит 2: IP=1, Сеть=0. Маска ОБЯЗАТЕЛЬНО должна быть 0.

Бит 1: IP=0, Сеть=0. Маска может быть 0 или 1.

Бит 0: IP=1, Сеть=0. Маска ОБЯЗАТЕЛЬНО должна быть 0.

Итак, в третьем байте маски, биты 6, 4, 2, 0 (считая справа) ОБЯЗАТЕЛЬНО должны быть такими, чтобы получился адрес сети 80.

Для битов 6, 2, 0 (где IP=1, Сеть=0): маска ОБЯЗАТЕЛЬНО 0.

Для бита 4 (где IP=1, Сеть=1): маска ОБЯЗАТЕЛЬНО 1.

Для битов 7, 5, 3, 1 (где IP=0, Сеть=0): маска МОЖЕТ быть 0 или 1. Чтобы максимизировать количество единиц, мы должны выбрать 1.

Собираем маску для третьего байта:

Бит 7: 1 (максимум)

Бит 6: 0 (обязательно)

Бит 5: 1 (максимум)

Бит 4: 1 (обязательно)

Бит 3: 1 (максимум)

Бит 2: 0 (обязательно)

Бит 1: 1 (максимум)

Бит 0: 0 (обязательно)

Третий байт маски: 10111010. Это 186.

Но эта маска не удовлетворяет условию "сначала единицы, затем нули".

Чтобы удовлетворить условию, маска должна быть в виде 111...11000...0.

Третий байт IP-адреса узла: 01010101

Третий байт адреса сети: 01010000

Чтобы получить 80, мы можем установить единицы в маске только там, где соответствующие биты IP-адреса узла и адреса сети совпадают, ИЛИ где IP-адрес узла = 0, а адрес сети = 0.

Ищем самую длинную префиксную строку единиц в маске, которая будет корректной.

117.83.85.27

117.83.80.0

Первые 11 бит совпадают: 117.83.01010xxx.xxx

Разница начинается с 3-го байта.

IP-адрес узла: 01010101

Адрес сети: 01010000

Маска должна начинаться с единиц. Максимальная префиксная часть единиц.

Если маска 255.255.240.0 (11111111.11111111.11110000.00000000):

85 (01010101) AND 240 (11110000) = 80 (01010000). Это верно.

В этом случае маска 255.255.240.0.

Количество единиц: 8 + 8 + 4 + 0 = 20.

Что если маска 255.255.255.0?

85 AND 255 = 85. Не подходит.

Что если маска 255.255.255.128?

85 (01010101) AND 255 (11111111) = 85

85 (01010101) AND 128 (10000000) = 0 (00000000). Не подходит.

Чтобы получить 80 из 85, маска в третьем байте должна обнулить 6-й и 2-й биты (справа).

01010101 (85)

???????00

Где ? может быть 0 или 1.

Условие: "сначала единицы, а затем с некоторого разряда нули".

Наибольшее количество единиц в маске.

Посмотрим на третий байт: 01010101. Адрес сети: 01010000.

Чтобы получить 01010000, маска должна обнулить 6-й и 2-й биты (справа) IP-адреса, если они равны 1.

В 85 (01010101) биты 6 и 2 равны 1. Значит, в маске в этих позициях должны быть 0.

Маска (3-й байт): 11111010 (250) - не подходит по условию.

Рассмотрим случай, когда маска 255.255.240.0.

Единиц: 8 + 8 + 4 = 20.

85 AND 240 = 01010101 AND 11110000 = 01010000 = 80. Это верно.

Можем ли мы увеличить количество единиц?

Это значит, что нам нужно расширить префикс единиц.

Следующая маска, которая начинается с большего числа единиц и удовлетворяет условию: 255.255.252.0

252 = 11111100

85 (01010101) AND 252 (11111100) = 01010100 = 84. Не подходит.

Следующая маска: 255.255.248.0

248 = 11111000

85 (01010101) AND 248 (11111000) = 01010000 = 80. Подходит!

Маска: 255.255.248.0

Количество единиц: 8 + 8 + 5 + 0 = 21.

Следующая маска: 255.255.254.0

254 = 11111110

85 (01010101) AND 254 (11111110) = 01010100 = 84. Не подходит.

Таким образом, максимальное количество единиц при условии "сначала единицы, затем нули" достигается с маской 255.255.248.0.

Третий байт маски: 248 (11111000).

Количество единиц в третьем байте: 5.

Общее количество единиц: 8 + 8 + 5 = 21.

Ответ: 21

Подать жалобу Правообладателю

Похожие