Задание 13 КЕГЭ: маски подсети — как считать на пальцах и кодом?
Тринадцатое про сети: дают IP-адрес и маску, спрашивают адрес сети, или наоборот по диапазону хостов подобрать маску. С битами путаюсь. Есть понятный способ и можно ли проверить на Python?
3 ответа
Адрес сети = IP AND маска (побитовое И по каждому октету). Маска — это N единиц подряд, потом нули; число единиц = длина префикса.
ip = [192, 168, 14, 200]
mask = [255, 255, 255, 192]
net = [a & b for a, b in zip(ip, mask)]
print(net) # [192, 168, 14, 192]
Для задач «сколько адресов в подсети» считай нули в маске: k нулей → 2**k адресов (минус 2 на адрес сети и широковещательный, если спрашивают именно хосты). Маску 255 запоминай как 11111111, а «странные» октеты раскладывай: 192 = 11000000 (две единицы), 224 = 11100000 (три), 248 = 11111000 (пять). Удобно держать в голове таблицу 128/192/224/240/248/252/254/255.
Адрес сети = IP and маска побитово. На Python — a & b по каждому октету через zip.
192 = 11000000. Запомни раскладку октетов маски, и половина задания решается устно.