Теория: IP-адресация и субнетинг
CIDR, маски подсети, деление сети на подсети и приватные диапазоны адресов. Прочитайте материал, а затем пройдите тест — следующий пункт курса откроется после верных ответов.
Структура IPv4-адреса
IPv4-адрес — 32 бита, традиционно записывается как 4 числа от 0 до 255 (каждое — это один байт, октет), разделённых точками — например
192.168.1.10. Адрес логически делится на две части: номер сети и номер узла (хоста) внутри этой сети — примерно как почтовый индекс и номер квартиры в одном адресе. Где именно проходит граница между сетевой и узловой частью, определяет маска подсети — без неё одни и те же 32 бита можно было бы трактовать совершенно по-разному.Классовая адресация — историческая отправная точка
До CIDR (см. следующий раздел) граница между сетью и узлом определялась жёстко по первым битам адреса — это и называлось классовой адресацией. Класс A (первый бит 0, диапазон 1–126 в первом октете) отдавал под сеть только первый октет — 16 миллионов узлов на одну сеть, для огромных организаций вроде военных ведомств. Класс B (первые два бита 10, 128–191) отдавал под сеть первые два октета — 65 тысяч узлов, для крупных компаний. Класс C (первые три бита 110, 192–223) отдавал три октета под сеть — всего 254 узла, для небольших организаций. Был и класс D (224–239, для multicast) и класс E (240–255, зарезервирован для экспериментов).
Проблема классовой системы в том, что реальные потребности почти никогда не совпадали с этими тремя фиксированными размерами: организации с 300 сотрудниками приходилось выдавать целую сеть класса B на 65 тысяч адресов (99.5% которых пропадали впустую), либо две сети класса C — а адресов IPv4 на всех желающих и так не хватало. Именно эта расточительность и привела к появлению CIDR.
Проблема классовой системы в том, что реальные потребности почти никогда не совпадали с этими тремя фиксированными размерами: организации с 300 сотрудниками приходилось выдавать целую сеть класса B на 65 тысяч адресов (99.5% которых пропадали впустую), либо две сети класса C — а адресов IPv4 на всех желающих и так не хватало. Именно эта расточительность и привела к появлению CIDR.
CIDR-нотация
CIDR (Classless Inter-Domain Routing), описанный в RFC 1519 (1993 год), отменил жёсткую привязку границы сети к первым битам адреса и позволил указывать границу где угодно: после адреса через слэш указывается количество бит, отведённых под сеть, например
192.168.1.0/24 означает, что первые 24 бита (первые 3 октета) — это сеть, а оставшиеся 8 бит — узлы. В десятичной форме /24 — это маска 255.255.255.0 (три октета сплошных единиц, один октет сплошных нулей). Слово classless в названии буквально означает «без привязки к классам» — теперь можно выделить сеть произвольного размера, хоть /27 на 30 узлов, хоть /22 на тысячу с лишним, ровно под реальную потребность.Как это работает в битах — операция AND
Чтобы понять, в одной ли подсети два адреса, компьютер не сравнивает их визуально как числа — он выполняет побитовую операцию AND между адресом и маской подсети, и сравнивает результат (это и есть номер сети). Например, у адреса
192.168.1.10 с маской /26 (255.255.255.192) последний октет адреса в двоичном виде — 00001010, а маски — 11000000. Операция AND построчно: там, где в маске 1, бит адреса сохраняется, где в маске 0 — бит адреса принудительно становится 0. Результат: 00000000 — значит, этот адрес принадлежит подсети 192.168.1.0/26. Именно эта операция, тысячи раз в секунду, лежит в основе того, как роутер решает, в локальной сети адрес назначения или нужно отправлять пакет через шлюз.Сколько адресов и узлов в подсети
Если под узлы отведено
Отдельный случай — /31 (всего 2 адреса, 0 пригодных по этой формуле) и /32 (1 адрес, сам по себе): /31 специально разрешён отдельным стандартом (RFC 3021) именно для линков «точка-точка» между двумя роутерами, где адрес сети и broadcast в классическом смысле не нужны — оба единственных адреса используются как обычные узловые, что экономит ещё больше места по сравнению с /30.
h бит, в подсети всего 2^h адресов, но реально используемых под хосты — 2^h − 2: первый адрес подсети зарезервирован как адрес сети (все нули в части узла, используется только для идентификации самой подсети, никогда не назначается устройству), а последний — как широковещательный адрес (все единицы в части узла, адресует все устройства подсети одновременно). Например, /26 (маска 255.255.255.192) оставляет 6 бит под узлы: 2^6 = 64 адреса всего, 62 из них реально можно раздать устройствам.Отдельный случай — /31 (всего 2 адреса, 0 пригодных по этой формуле) и /32 (1 адрес, сам по себе): /31 специально разрешён отдельным стандартом (RFC 3021) именно для линков «точка-точка» между двумя роутерами, где адрес сети и broadcast в классическом смысле не нужны — оба единственных адреса используются как обычные узловые, что экономит ещё больше места по сравнению с /30.
бирюзовым — сеть ·
серым — хост · адрес
192.168.1.10 из текста темы
Маска не хранится в пакете и никуда не передаётся — она есть только
у хоста и роутера. Одни и те же 32 бита с разной маской означают разные сети: именно
поэтому адрес без маски ничего не значит.
Как определить подсеть по маске — без калькулятора
Побитовая операция — это то, что делает машина. Человеку в поле считать двоичные числа некогда, и есть приём, который сводит задачу к одному вычитанию.
Всё держится на размере блока:
Дальше остаётся найти, в какой блок попал адрес — в том октете, где маска перестала быть 255.
Пример 1.
Пример 2.
Здесь хорошо видно, что блок в третьем октете — это блок из целых сотен адресов, а не из отдельных: под узлы осталось 13 бит, то есть
1. Найдите первый октет маски, который не равен 255.
2. Возьмите число IP из этого же октета.
3. Посчитайте блок:
4. Спуститесь по ряду 0, блок, 2×блок, 3×блок… до ближайшего числа, которое не больше вашего. Это и есть октет сети.
5. Все октеты правее замените нулями.
Границы считаются оттуда же: broadcast — это
Выучите наизусть последние семь строк таблицы — и определение подсети станет механическим: нашли границы блока, посмотрели, куда попал адрес.
Всё держится на размере блока:
256 − значение маски = размер блокаБлок — это сколько адресов в каждой подсети и через сколько начинается следующая. Октет вмещает 256 значений, маска отрезает часть под сеть, остаток достаётся узлам — отсюда и вычитание.
Маска Префикс Блок 0 /24 256 128 /25 128 192 /26 64 224 /27 32 240 /28 16 248 /29 8 252 /30 4 254 /31 2 255 /32 1Префикс в таблице указан для случая, когда маска ломается в последнем октете. Если она ломается в третьем — вычтите восемь: маска
224 в последнем октете даёт /27, а в третьем — /19.Дальше остаётся найти, в какой блок попал адрес — в том октете, где маска перестала быть 255.
Пример 1.
192.168.1.77, маска 255.255.255.192. Смотрим последний октет: 256 − 192 = 64. Сети начинаются через 64:192.168.1.0–63 → 192.168.1.0/26 192.168.1.64–127 → 192.168.1.64/26 192.168.1.128–191 → 192.168.1.128/26 192.168.1.192–255 → 192.168.1.192/26Число 77 попадает в 64–127, значит подсеть — 192.168.1.64/26.
Пример 2.
10.0.5.142, маска 255.255.255.224. Блок 256 − 224 = 32, начала подсетей: 0, 32, 64, 96, 128, 160, 192, 224. Число 142 попадает в блок 128–159:Адрес сети: 10.0.5.128 Хосты: 10.0.5.129 – 10.0.5.158 Broadcast: 10.0.5.159Пример 3 — маска в третьем октете.
172.16.75.30, маска 255.255.224.0. Первый октет, где маска не 255, — третий. Число там 75, маска 224, блок 32. Границы: 0, 32, 64, 96, 128… Число 75 попадает в 64–95, октеты правее обнуляем. Подсеть — 172.16.64.0/19.Здесь хорошо видно, что блок в третьем октете — это блок из целых сотен адресов, а не из отдельных: под узлы осталось 13 бит, то есть
2^13 = 8192 адреса, из них раздать можно 8190:Адрес сети: 172.16.64.0 Хосты: 172.16.64.1 – 172.16.95.254 (8190 штук) Broadcast: 172.16.95.255Алгоритм целиком:
1. Найдите первый октет маски, который не равен 255.
2. Возьмите число IP из этого же октета.
3. Посчитайте блок:
256 − маска.4. Спуститесь по ряду 0, блок, 2×блок, 3×блок… до ближайшего числа, которое не больше вашего. Это и есть октет сети.
5. Все октеты правее замените нулями.
Границы считаются оттуда же: broadcast — это
начало + блок − 1, всё между ним и адресом сети раздаётся узлам. Для 192.168.14.192/28 это 192 + 16 − 1 = .207, а узлам достаётся .193–.206.Выучите наизусть последние семь строк таблицы — и определение подсети станет механическим: нашли границы блока, посмотрели, куда попал адрес.
VLSM — подсети разного размера в одной сети
VLSM (Variable Length Subnet Mask) — использование разных масок для разных подсетей внутри одной общей сети, вместо одного фиксированного размера для всех. Представим организацию с адресным блоком
10.0.0.0/22 (1024 адреса) и тремя потребностями: офис на 200 человек, филиал на 50 человек и линк между двумя роутерами на 2 адреса. Без VLSM пришлось бы делить блок на равные части — например, четыре /24 по 256 адресов каждая, и линк между роутерами съел бы целых 256 адресов впустую. С VLSM решение выглядит рациональнее: офису — 10.0.0.0/24 (254 узла, с запасом под рост), филиалу — 10.0.1.0/25 (126 узлов, достаточно для 50 с запасом), линку — 10.0.1.192/30 (2 узла, ровно сколько нужно). Именно так на практике размечены и транзитные линки в лабораторных работах OSPF и BGP на этой платформе — /30 между роутерами, а не целая /24 на два устройства.Суммаризация маршрутов (supernetting) — VLSM в обратную сторону
Если VLSM — это разбиение крупной сети на мелкие подсети под конкретные нужды, то суммаризация (route summarization, supernetting) — обратная операция: объединение нескольких смежных мелких подсетей в одну более широкую запись для таблицы маршрутизации. Например, если у филиала четыре подсети —
192.168.0.0/24, 192.168.1.0/24, 192.168.2.0/24, 192.168.3.0/24 — все они укладываются в общий блок 192.168.0.0/22. Вместо того, чтобы анонсировать соседним роутерам все 4 отдельные записи, граничный роутер может анонсировать одну суммарную 192.168.0.0/22 — соседям не нужно знать о внутренней структуре филиала, и таблица маршрутизации в остальной сети остаётся короче и стабильнее (изменение одной из четырёх внутренних подсетей не требует пересчёта маршрутов снаружи, пока оно укладывается в общий суммарный блок).Приватные адреса (RFC 1918) и особые диапазоны
Три диапазона зарезервированы исключительно для внутреннего использования и принципиально не маршрутизируются в открытом интернете (любой провайдер обязан отбрасывать такие маршруты на границе своей сети):
Кроме приватных диапазонов есть и другие зарезервированные блоки:
10.0.0.0/8 (огромный диапазон для больших сетей), 172.16.0.0/12 (средний), 192.168.0.0/16 (чаще встречается в небольших офисных и домашних сетях). Почти любая локальная сеть использует один из этих диапазонов внутри, а наружу выходит через NAT (отдельная тема дальше в этом курсе), который подменяет приватный адрес на публичный на границе сети.Кроме приватных диапазонов есть и другие зарезервированные блоки:
127.0.0.0/8 — loopback (адрес самого себя, 127.0.0.1 — это всегда «эта же машина»), 169.254.0.0/16 — APIPA/link-local (адрес, который устройство назначает себе самостоятельно, если DHCP-сервер не отвечает — увидеть такой адрес на интерфейсе значит «DHCP не сработал», а не «всё в порядке»), и 0.0.0.0, который в контексте маршрутов означает «любая сеть».Практический пример
Разобьём
Заметьте закономерность: каждая следующая подсеть начинается с адреса, кратного размеру подсети (64) — это не совпадение, а прямое следствие того, как работает побитовое AND из раздела выше. Зная размер подсети, границы следующих можно посчитать в голове, даже не выписывая всё в двоичном виде.
192.168.1.0/24 на 4 равные подсети по 64 адреса: забираем у 24-битной маски ещё 2 бита под номер подсети (24+2=/26). Получаем:192.168.1.0/26 (узлы .1–.62, broadcast .63)192.168.1.64/26 (узлы .65–.126, broadcast .127)192.168.1.128/26 (узлы .129–.190, broadcast .191)192.168.1.192/26 (узлы .193–.254, broadcast .255)Заметьте закономерность: каждая следующая подсеть начинается с адреса, кратного размеру подсети (64) — это не совпадение, а прямое следствие того, как работает побитовое AND из раздела выше. Зная размер подсети, границы следующих можно посчитать в голове, даже не выписывая всё в двоичном виде.
Как проверять / частые ошибки
Самая частая ошибка новичков — перепутать адрес сети или broadcast с реальным узлом (например, по ошибке назначить устройству
192.168.1.0 в подсети /24 — это адрес сети, а не узла, и большинство систем такое назначение либо отклонят, либо оно будет работать непредсказуемо). Вторая частая ошибка — пересекающиеся подсети при ручном планировании VLSM (выделили 10.0.1.0/24 филиалу, а потом по забывчивости выделили 10.0.1.128/25 другому отделу, не заметив пересечения) — из-за этого маршрутизация начинает вести себя непредсказуемо, и часть трафика может уходить не туда, куда ожидалось.Команды настройки — шпаргалка
Команды для назначения и проверки адресов с нужной маской — что в стиле Cisco IOS, что в стиле Linux (в лабах встречаются оба, поэтому полезно знать каждый):
# Cisco: маска отдельным аргументом, в десятичном виде
interface GigabitEthernet0/1
ip address 192.168.1.65 255.255.255.192
# сначала сам адрес, затем маска.
# 255.255.255.192 — это /26
# Linux: маска слитно с адресом, в CIDR-нотации
ip addr add 192.168.1.65/26 dev eth1
# dev — на какой интерфейс вешать адрес.
# add меняется на del, чтобы снять
# посчитать до того, как применять
ipcalc 192.168.1.0/26 # получает адрес с маской и печатает адрес сети,
# broadcast, диапазон узлов и саму маску во всех видах
# проверка
show ip interface brief # brief сжимает вывод до строки на интерфейс:
# имя, адрес, состояние. Без него — экран подробностейТеория прочитана. Дальше — руками.
Личный стенд из настоящих роутеров разворачивается за секунды. Платформа проверяет не ответы на тесты, а состояние вашей сети: поднялись ли соседства, сошлись ли маршруты, ходит ли ping. Рядом — AI-наставник, который видит ваши конфиги и ведёт к решению, не выдавая готовое.
Начать бесплатно →
бета открыта, доступ бесплатный