Веду на сто
Учебная статья

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.

Двоичный октет маскиДесятичное значениеЧисло единиц
0000000000
100000001281
110000001922
111000002243
111100002404
111110002485
111111002526
111111102547
111111112558

В корректной маске все октеты 255 идут до единственного возможного неполного октета. После него идут только нули. Например, 255.255.240.0 допустима, а 255.240.255.0 недопустима.

Адрес сети

Адрес сети получают побитовой операцией AND между IP-адресом и маской. Бит результата равен 1, только если оба исходных бита равны 1.

Бит IPБит маскиБит адреса сети
000
010
100
111

Сетевые биты одинаковы у всех адресов одной сети. Узловые биты могут меняться. В адресе сети все узловые биты равны 0, а в широковещательном адресе: 1.

Размер сети

Если длина префикса равна p, число узловых бит равно h = 32 - p. Общее количество различных адресов:

N = 2^h = 2^{32-p}

Не вычитай автоматически адрес сети и широковещательный адрес. Вопрос может требовать количество всех адресов, количество адресов узлов или число адресов с дополнительным свойством. Используй правило, указанное в условии.

В неполном октете удобно работать с размером блока. Если значение октета маски равно m, размер блока равен 256 - m. Начала сетей в этом октете идут с таким шагом: 0, размер блока, удвоенный размер блока и далее.

Как решать

Найти адрес сети

  1. Запиши IP-адрес и маску по октетам.
  2. Октеты под маской 255 перепиши без изменения, а под маской 0 замени на 0.
  3. Неполный октет переведи в двоичный вид и выполни AND.
  4. Верни результат в десятичную запись.
  5. Проверь, что исходный IP входит в блок от адреса сети до широковещательного адреса.

Найти маску или префикс

  1. Сравни двоичные записи IP-адреса и известного адреса сети слева направо.
  2. Общие сетевые биты должны находиться под единицами маски.
  3. Бит IP, который равен 1 при нуле в адресе сети, обязательно относится к узловой части.
  4. Перебери только маски вида "единицы, затем нули".
  5. Для каждого кандидата снова вычисли IP AND mask и проверь все условия задачи.

Посчитать адреса с условием

  1. Найди число свободных узловых бит.
  2. Отдели фиксированные единицы и нули сетевой части от изменяемых битов.
  3. Переведи дополнительное условие в ограничение на узловые биты: число единиц, четность или конкретный диапазон.
  4. Посчитай допустимые комбинации. При небольшом числе бит можно сделать таблицу или короткий перебор.
  5. Исключай специальные адреса только тогда, когда этого требует формулировка.

Частые ошибки

  • Ошибка: переводить октет без ведущих нулей. Как избежать: всегда записывай ровно 8 бит.
  • Ошибка: считать маской любое число от 0 до 255. Как избежать: используй только значения 0, 128, 192, 224, 240, 248, 252, 254 и 255 в неполном октете.
  • Ошибка: применять AND к десятичным числам как обычное умножение. Как избежать: работай побитово или используй границы блоков.
  • Ошибка: путать адрес узла с адресом сети. Как избежать: у адреса сети все узловые биты равны 0.
  • Ошибка: считать 2^p адресов для префикса /p. Как избежать: степень равна числу узловых бит: 32 - p.
  • Ошибка: всегда вычитать два адреса. Как избежать: сначала уточни, просит условие все адреса или только допустимые адреса узлов.

Проверь себя

  1. Сколько единиц содержит маска 255.255.240.0?
  2. Сколько адресов содержит сеть с префиксом /29?
  3. Какой октет маски соответствует четырем единицам и четырем нулям?
  4. Чему равен результат AND для битов IP = 1 и маски = 0?

Ответы: 1) 20; 2) 8; 3) 240; 4) 0.

Связь с заданиями

Задание 10 проверяет связь между IP-адресом, маской и адресом сети. В зависимости от условия требуется найти префикс, размер сети, возможную маску или количество адресов с заданным свойством. Надежный способ: привести спорный октет к восьмибитной записи и проверить результат побитово.