Решение задач по IP-адресам требует четкого понимания структуры IPv4-адресов и принципов работы масок подсети. IPv4-адрес представляет собой 32-битное число, обычно записываемое в десятичном виде с точками, например, 192.168.1.1. Каждая часть между точками (октет) может принимать значения от 0 до 255. Маска подсети определяет, какая часть адреса относится к идентификатору сети, а какая — к идентификатору узла. Она может записываться в двух форматах: в виде четырех октетов (255.255.255.0) или через слеш с указанием количества бит сети (/24).
Для перевода маски из одного формата в другой нужно понимать битовую структуру. Например, маска /24 означает, что первые 24 бита отведены под сеть, а оставшиеся 8 — под узлы. В двоичном виде это выглядит как 11111111.11111111.11111111.00000000, что соответствует 255.255.255.0 в десятичной записи. Подобные преобразования лежат в основе большинства задач по IP-адресации.
Задача 1: Определение класса сети
Условие: К какому классу относится сеть с IP-адресом 172.16.35.128?

Решение: Классы сетей определяются по первому октету IP-адреса. Диапазоны следующие: A (1-126), B (128-191), C (192-223), D (224-239 для multicast), E (240-255 экспериментальные). Адрес 172.16.35.128 начинается с 172, что попадает в диапазон 128-191, следовательно, это сеть класса B. Важно помнить, что адреса 127.x.x.x зарезервированы для loopback-интерфейсов и не относятся к классу A.
Особенность: В современных сетях концепция классов практически не используется, уступив место бесклассовой адресации (CIDR), но понимание классов помогает в изучении исторических аспектов и некоторых унаследованных систем.
Задача 2: Расчет количества узлов в подсети
Условие: Сколько узлов может быть в сети 192.168.3.0 с маской 255.255.255.224?

Решение: Сначала определяем количество бит, отведенных под узлы. Маска 255.255.255.224 в двоичном виде: 11111111.11111111.11111111.11100000. Здесь 27 бит отведено под сеть (три первых октета по 8 бит плюс первые три бита последнего октета), значит, под узлы остается 5 бит (32-27=5). Количество возможных узлов вычисляется как 2^n — 2, где n — количество бит узлов. Минус 2 учитывает адрес сети (все нули в части узла) и широковещательный адрес (все единицы). Получаем: 2^5 — 2 = 32 — 2 = 30 узлов.
Практическое применение: Такие расчеты необходимы при проектировании сети, чтобы обеспечить достаточное количество IP-адресов для всех устройств без избыточного выделения адресного пространства.
Задача 3: Определение адреса сети
Условие: Какой адрес сети у узла 10.200.45.59/18?

Решение: Маска /18 означает, что первые 18 бит относятся к сети. Для определения адреса сети выполняем операцию логического И между IP-адресом и маской. Переводим IP в двоичный вид: 10.200.45.59 = 00001010.11001000.00101101.00111011. Маска /18: 11111111.11111111.11000000.00000000 (255.255.192.0). Применяем побитовое И: 00001010.11001000.00000000.00000000, что соответствует 10.200.0.0. Таким образом, адрес сети — 10.200.0.0/18.
Важный нюанс: Для проверки можно использовать другой метод — обнуление бит узла. В адресе 10.200.45.59 при маске /18 третий октет (45) в двоичном виде 00101101. Первые два бита этого октета относятся к сети, остальные — к узлу. Обнуляем биты узла: 00100000 = 32. Получаем 10.200.32.0, что не совпадает с предыдущим результатом. Ошибка в том, что мы не учли, что первые 18 бит включают полностью первые два октета (16 бит) плюс 2 бита третьего октета.
Задача 4: Разбиение на подсети
Условие: Имеется сеть 192.168.1.0/24. Необходимо разбить ее на 6 подсетей с максимально возможным количеством узлов в каждой.
Решение: Для создания 6 подсетей нужно заимствовать достаточное количество бит из части узла. Находим минимальное n, при котором 2^n >= 6: 2^3=8 (это ближайшая степень двойки, удовлетворяющая условию). Таким образом, заимствуем 3 бита, новая маска будет /27 (24+3). Количество узлов в каждой подсети: 2^(32-27) — 2 = 30. Подсети будут иметь адреса: 192.168.1.0/27, 192.168.1.32/27, 192.168.1.64/27, 192.168.1.96/27, 192.168.1.128/27, 192.168.1.160/27, 192.168.1.192/27, 192.168.1.224/27. Хотя получилось 8 подсетей, мы можем использовать любые 6 из них.
Практический совет: Всегда лучше иметь некоторый запас подсетей на случай расширения сети. В данном случае разумно использовать 6 подсетей из 8 возможных, оставив 2 для будущих нужд.
Задача 5: Определение диапазона адресов
Условие: Укажите диапазон доступных IP-адресов для сети 172.16.128.0/20.
Решение: Маска /20 означает, что первые 20 бит относятся к сети, остальные 12 — к узлам. Адрес сети: 172.16.128.0 (в двоичном виде 10101100.00010000.10000000.00000000). Первый доступный адрес: 172.16.128.1 (адрес сети +1). Широковещательный адрес: 172.16.143.255 (все биты узла установлены в 1: 10101100.00010000.10001111.11111111). Последний доступный адрес: 172.16.143.254 (широковещательный -1). Таким образом, диапазон доступных адресов: от 172.16.128.1 до 172.16.143.254.
Проверка: Можно вычислить количество адресов: 2^12 — 2 = 4094, что соответствует диапазону 172.16.128.1-172.16.143.254 (143-128=15; 15*256 + 254 — 1 = 4094).
Задача 6: Совместимость адресов
Условие: Могут ли узлы с адресами 192.168.3.45/28 и 192.168.3.62/28 обмениваться данными без маршрутизатора?
Решение: Для ответа нужно определить, находятся ли оба адреса в одной подсети. Находим адрес сети для первого узла: 192.168.3.45 & 255.255.255.240 = 192.168.3.32. Для второго узла: 192.168.3.62 & 255.255.255.240 = 192.168.3.48. Адреса сетей разные (32 и 48), значит, узлы находятся в разных подсетях и для обмена данными им потребуется маршрутизатор.
Альтернативный метод: Можно определить диапазоны каждой подсети. Для /28 (маска 255.255.255.240) размер блока 16 (256-240). Первая подсеть: 192.168.3.32-47, вторая: 192.168.3.48-63. Адреса 45 и 62 попадают в разные диапазоны, что подтверждает наш вывод.
Заключение и практические рекомендации
Решение задач по IP-адресации требует системного подхода и понимания двоичной логики. Начинающим рекомендуется сначала переводить IP-адреса и маски в двоичный вид для наглядности, хотя с опытом можно научиться выполнять вычисления непосредственно в десятичном формате. Особое внимание следует уделять пограничным случаям — например, когда адрес узла состоит из всех нулей или единиц (это адрес сети и широковещательный адрес соответственно, которые не могут быть назначены устройствам).
Практика показывает, что наиболее часто допускаемые ошибки связаны с неправильным определением границ подсетей и неучетом служебных адресов (сети и широковещательного). Для проверки своих решений полезно использовать несколько методов расчета — если результаты совпадают, вероятность ошибки минимальна. Современные сети чаще всего используют бесклассовую адресацию (CIDR), поэтому особое внимание стоит уделять задачам с масками переменной длины.