Для узла с IP адресом 158.116.11.146 адрес сети равен 158.116.0.0. Для скольких различных значений маски это возможно?
Задача сводится к правилу вычисления сетевого адреса: сетевой адрес = IP AND маска.
1) Пусть IP = 158.116.11.146, сетевой адрес = 158.116.0.0.
- Чтобы первые две октеты сетевого адреса совпали с IP (158 и 116), маска должна иметь единицы в первых 16 битах. Иначе первая пара октетов изменилась бы после применения маски.
- Значит, длина маски n должна быть не меньше 16: n ≥ 16.
2) Обозначим k = n - 16. Тогда последние 16 бит маски (то есть часть третьего и четвертого октетов) состоят из первых k единиц, а оставшиеся 16 - k бит — нули.
3) В последних 16 битах IP равен:
- третий октет 11 = 00001011
- четвертый октет 146 = 10010010
Итого IP_last16 = 00001011 10010010.
4) Необходимо, чтобы IP_last16 AND mask_last16 = 0. Это возможно только если первые k бит маски (слева направо по этим 16 битам) соответствуют нулям в IP_last16. По нашему IP_last16 первые биты таковы:
0, 0, 0, 0, 1, ...
- Top 0 bits (k = 0): проходит, результат 0.
- k = 1: первый бит=0 — ок.
- k = 2: первые 2 бита = 0,0 — ок.
- k = 3: первые 3 бита = 0,0,0 — ок.
- k = 4: первые 4 бита = 0,0,0,0 — ок.
- k = 5: пятый бит равен 1 — тогда IP_last16 AND mask_last16 даст ненулевой результат, что не подходит.
Следовательно, допустимо k ∈ {0,1,2,3,4}. Это даёт n = 16 + k ∈ {16, 17, 18, 19, 20}.
5) Соответствующие маски в dotted-decimal:
- /16: 255.255.0.0
- /17: 255.255.128.0
- /18: 255.255.192.0
- /19: 255.255.224.0
- /20: 255.255.240.0
Ответ: возможно 5 различных значений маски (с коротким обозначением /16, /17, /18, /19, /20).