IP-адресация и маски подсети
Ты научишься находить адрес сети, длину префикса и количество адресов по IPv4-адресу и маске.
Зачем на экзамене
IP-адрес и маска вместе определяют сеть, к которой относится узел. В задании 10 нужно переводить октеты в двоичный вид, применять маску и считать адреса с заданными свойствами. Ошибки чаще всего возникают на границе сетевой и узловой частей.
Что нужно уметь
- переводить октет из десятичной записи в восьмибитную двоичную;
- распознавать допустимые октеты маски;
- находить адрес сети операцией побитового AND;
- определять длину префикса и число узловых бит;
- вычислять общее количество адресов в сети;
- находить диапазон адресов и широковещательный адрес;
- перебирать варианты маски без пропуска допустимых префиксов.
База
IPv4-адрес
IPv4-адрес состоит из 32 бит. Для записи его делят на четыре октета по 8 бит и переводят каждый октет в десятичное число от 0 до 255. Например, двоичный октет 11000000 равен 192.
Значения битов одного октета слева направо равны 128, 64, 32, 16, 8, 4, 2 и 1. Чтобы получить десятичное число, сложи веса позиций, в которых стоит 1.
Маска и префикс
Маска подсети тоже содержит 32 бита. Сначала в ней идут единицы сетевой части, затем нули узловой части. После первого нуля единица появиться уже не может. Запись /p означает, что первые p бит маски равны 1.
| Двоичный октет маски | Десятичное значение | Число единиц |
|---|---|---|
00000000 | 0 | 0 |
10000000 | 128 | 1 |
11000000 | 192 | 2 |
11100000 | 224 | 3 |
11110000 | 240 | 4 |
11111000 | 248 | 5 |
11111100 | 252 | 6 |
11111110 | 254 | 7 |
11111111 | 255 | 8 |
В корректной маске все октеты 255 идут до единственного возможного неполного октета. После него идут только нули. Например, 255.255.240.0 допустима, а 255.240.255.0 недопустима.
Адрес сети
Адрес сети получают побитовой операцией AND между IP-адресом и маской. Бит результата равен 1, только если оба исходных бита равны 1.
| Бит IP | Бит маски | Бит адреса сети |
|---|---|---|
| 0 | 0 | 0 |
| 0 | 1 | 0 |
| 1 | 0 | 0 |
| 1 | 1 | 1 |
Сетевые биты одинаковы у всех адресов одной сети. Узловые биты могут меняться. В адресе сети все узловые биты равны 0, а в широковещательном адресе: 1.
Размер сети
Если длина префикса равна p, число узловых бит равно h = 32 - p. Общее количество различных адресов:
Не вычитай автоматически адрес сети и широковещательный адрес. Вопрос может требовать количество всех адресов, количество адресов узлов или число адресов с дополнительным свойством. Используй правило, указанное в условии.
В неполном октете удобно работать с размером блока. Если значение октета маски равно m, размер блока равен 256 - m. Начала сетей в этом октете идут с таким шагом: 0, размер блока, удвоенный размер блока и далее.
Как решать
Найти адрес сети
- Запиши IP-адрес и маску по октетам.
- Октеты под маской 255 перепиши без изменения, а под маской 0 замени на 0.
- Неполный октет переведи в двоичный вид и выполни AND.
- Верни результат в десятичную запись.
- Проверь, что исходный IP входит в блок от адреса сети до широковещательного адреса.
Найти маску или префикс
- Сравни двоичные записи IP-адреса и известного адреса сети слева направо.
- Общие сетевые биты должны находиться под единицами маски.
- Бит IP, который равен 1 при нуле в адресе сети, обязательно относится к узловой части.
- Перебери только маски вида "единицы, затем нули".
- Для каждого кандидата снова вычисли
IP AND maskи проверь все условия задачи.
Посчитать адреса с условием
- Найди число свободных узловых бит.
- Отдели фиксированные единицы и нули сетевой части от изменяемых битов.
- Переведи дополнительное условие в ограничение на узловые биты: число единиц, четность или конкретный диапазон.
- Посчитай допустимые комбинации. При небольшом числе бит можно сделать таблицу или короткий перебор.
- Исключай специальные адреса только тогда, когда этого требует формулировка.
Частые ошибки
- Ошибка: переводить октет без ведущих нулей. Как избежать: всегда записывай ровно 8 бит.
- Ошибка: считать маской любое число от 0 до 255. Как избежать: используй только значения 0, 128, 192, 224, 240, 248, 252, 254 и 255 в неполном октете.
- Ошибка: применять AND к десятичным числам как обычное умножение. Как избежать: работай побитово или используй границы блоков.
- Ошибка: путать адрес узла с адресом сети. Как избежать: у адреса сети все узловые биты равны 0.
- Ошибка: считать
2^pадресов для префикса/p. Как избежать: степень равна числу узловых бит:32 - p. - Ошибка: всегда вычитать два адреса. Как избежать: сначала уточни, просит условие все адреса или только допустимые адреса узлов.
Проверь себя
- Сколько единиц содержит маска
255.255.240.0? - Сколько адресов содержит сеть с префиксом
/29? - Какой октет маски соответствует четырем единицам и четырем нулям?
- Чему равен результат AND для битов IP = 1 и маски = 0?
Ответы: 1) 20; 2) 8; 3) 240; 4) 0.
Связь с заданиями
Задание 10 проверяет связь между IP-адресом, маской и адресом сети. В зависимости от условия требуется найти префикс, размер сети, возможную маску или количество адресов с заданным свойством. Надежный способ: привести спорный октет к восьмибитной записи и проверить результат побитово.