Network Education
КаталогГлоссарийПрогресс
Протокол IPv4
  1. 1Основы
  2. 2Формат пакета
  3. 3Классовая адресация
  4. 4Бесклассовая адресация
  5. 5Задачи на IP-адресацию
  6. 6ARP
  7. 7DHCP
  8. 8ICMP
  9. 9NAT
Каталог/Сетевые основы/Протокол IPv4/Бесклассовая адресация

Бесклассовая адресация

4Урок 4 из 9

О чём этот урок

Бесклассовая адресация CIDR: маски подсети, сабнетинг, агрегация маршрутов и правило Longest Prefix Match.

Ключевые выводы

  • Маска подсети указывает, сколько бит адреса относится к Network ID; принадлежность к одной сети определяется побитовым AND адреса и маски
  • При бесклассовой маршрутизации один IP-адрес может подходить под несколько маршрутов — побеждает маршрут с наибольшей маской (Longest Prefix Match)
  • Маршрут по умолчанию 0.0.0.0/0 — это суперсеть, включающая все адреса мира, и она подхватывает пакеты, не попавшие под более конкретные маршруты
  • Агрегация позволяет провайдерам объявлять один маршрут вместо тысяч мелких, экономя память и ускоряя обработку на маршрутизаторах
  • Таблица маршрутизации есть на каждом IP-устройстве — от рабочей станции до принтера, даже если она содержит всего один connected-маршрут и default route

Проверьте себя

Вопрос 1 из 6

Как определяется принадлежность IP-адреса к определённой подсети при бесклассовой адресации?

Вопрос 2 из 6

Что означает правило Longest Prefix Match при маршрутизации?

Вопрос 3 из 6

Что представляет собой маршрут 0.0.0.0/0?

Вопрос 4 из 6

Какое преимущество даёт агрегация маршрутов провайдерам?

Вопрос 5 из 6

На каких устройствах присутствует таблица маршрутизации?

Вопрос 6 из 6

Есть два маршрута: 10.1.0.0/16 через шлюз A и 10.1.1.0/24 через шлюз B. Куда будет направлен пакет для адреса 10.1.1.5?

🔗Связанные уроки

⚠️Сначала посмотрите

Классовая адресацияПротокол IPv4
→

Бесклассовая адресация (CIDR) строится на основе классовой — для понимания ipv4-classless необходимо сначала изучить ipv4-classful

Задачи на IP-адресациюПротокол IPv4
→

Задачи на IP-адресацию требуют уверенного понимания бесклассовой адресации (CIDR) — нужно изучить ipv4-classless перед практическими задачами

Принципы работыПротокол IPv6
→

Адресация IPv6 строится на понимании масок и префиксов из IPv4

🔗Смотрите также

Бесклассовая маршрутизация в IPv4Cisco ICND1: основы сетей и Cisco IOS
→

Бесклассовая адресация CIDR и VLSM — та же тема в контексте Cisco-сертификации

Классовая адресацияЗадачи на IP-адресацию

Транскрипция

Итак, следующий пункт программы — это бесклассовая адресация, то есть то, чем мы пользуемся сегодня в реальном мире.

Минусы классовой адресации стали понятны достаточно быстро. Адреса расходовались исключительно неэффективно. Да, их много, да, их 4 миллиарда, но по факту вся первая половина практически не используется из-за того, что это класс A. Соответственно, используются только сети класса C и немножко класс B в качестве запасного варианта.

Классы D и E

Мы проговорили про три класса: A, B и C. Но на самом деле можно себе представить, что есть и другие классы:

  • Класс A — адреса, начинающиеся на 0 (первый бит), то есть первая половина всех адресов
  • Класс B — адреса, начинающиеся на 10, то есть четверть всех адресов
  • Класс C — адреса, начинающиеся на 110, то есть ещё одна восьмая

Оставалась ещё одна восьмая неиспользованной. Впоследствии адреса после класса C (начинающиеся с 224 и выше) были разбиты на ещё два класса:

  • Класс D — адреса, начинающиеся на 1110, используется под мультикаст (то, подо что планировался IPv5, но в итоге вошло как часть IPv4)
  • Класс E — адреса, начинающиеся на 1111, просто нельзя использовать

Одна шестнадцатая от всего числа адресов даже сегодня до сих пор использовать нельзя. Этот диапазон запрещено даже брать в расчёт. Несмотря на то, что все кричат "IPv4-адреса заканчиваются!", на самом деле ещё одна шестнадцатая от всего числа адресов лежит в загашнике, и ни одно оборудование её никогда не сможет задействовать.

Итоги проблем

  • Неэффективное использование адресов
  • Гигантский размер таблиц маршрутизации для провайдерских маршрутизаторов — у них есть необходимость хранить записи о всех сетях, которые когда-либо где-либо использовались
  • При росте количества анонсированных сетей оборудование провайдеров просто не справлялось

Появление бесклассовой адресации

В 1984 году появляется механизм, который указывает, что все эти проблемы возникают из-за необходимости определять границу между левой частью (Network ID) и правой частью (Host ID) по внешнему виду IP-адреса. Если определять эту границу как-нибудь иначе, то проблемы с неэффективным использованием адресов и большим размером таблиц маршрутизации уйдут.

Дело в том, что вы можете эту границу смещать куда угодно. Например, можно сказать: нам нужна очень маленькая сеть — два узла, два служебных адреса, итого четыре адреса. Под них достаточно двух бит Host ID, а всё остальное пусть будет Network ID. То есть границу хочется указывать не в одном из трёх фиксированных мест, а где угодно.

Для этого придётся описать, где у вашего IP-адреса проходит граница между левой и правой частью.

Хронология стандартов

  • 1981-1982 — стандартизация самого протокола IP (классовая адресация)
  • 1984, RFC 917 — первая идея бесклассовой адресации (разделение сетей на подсети, граница переносится вправо)
  • 1992 — появляется механизм, позволяющий переносить границу и влево (агрегация), что позволило сократить количество записей в таблице маршрутизации

Классовая адресация продолжала использоваться ещё долгое время, потому что оборудование под неё выпускалось, в том числе и после выхода RFC 917.

Сабнетинг (разделение на подсети)

Принцип работы

У нас есть узел с IP-адресом. При классовой адресации узел определял границу между Network ID и Host ID по классу адреса. В случае с сабнетингом узел по-прежнему считал, что находится в классовой сети, но эту сеть можно было разделить на части.

Что такое "разделить сеть на части"? У нас есть сеть — это все IP-адреса, которые начинаются на определённые биты. Допустим, есть сеть класса C: 192.168.5.0. Это все адреса от 192.168.5.0 до 192.168.5.255.

Можно разделить эту сеть на две части:

  • Левая половина: 192.168.5.0 — 192.168.5.127
  • Правая половина: 192.168.5.128 — 192.168.5.255

Как это работает на уровне бит

Вы смещаете границу между Network ID и Host ID вправо относительно оригинальной классовой границы. Если у классовой сети класса C было 24 бита Network ID и 8 бит Host ID, то вы "откусываете" один бит от Host ID:

  • В этот бит можно записать 0 или 1 — два варианта
  • Оставшиеся 7 бит позволят адресовать 128 адресов (126 хостов) в каждой подсети
  • Вместо одной сети на 256 адресов получаются две подсети по 128 адресов

Принцип: у кого откушенный бит равен 0 — тот в левой половинке, у кого 1 — в правой.

Практическое применение

Вы купили одну большую классовую сеть, порезали её на части нужного размера и назначаете эти части туда, где удобно:

  • Половина сети — для пользователей
  • Несколько мелких подсетей — для point-to-point каналов
  • Отдельная маленькая сеть — для серверной фермы

Делите пополам, оставшуюся половинку ещё делите пополам — и так далее.

Маска подсети (Subnet Mask)

Эта штука называется VLSM (Variable Length Subnet Mask) — вы можете перемещать границу между левой и правой частью. Но для того, чтобы указать, где проходит эта граница, нужно как-то сообщить узлу размер левой части. Раньше это было понятно из класса адреса, а теперь нужен отдельный механизм — маска (Mask).

Два формата записи маски

1. Десятичная запись (RFC 950)

Маска записывается как 32-битное число в форме четырёх октетов, разделённых точками (как IP-адрес). Правило:

  • Если бит в IP-адресе относится к Network ID — в маске этот бит выставлен в 1
  • Если бит относится к Host ID — в маске этот бит равен 0

Маска всегда состоит из последовательности единиц, за которыми следуют нули. Всего возможно 33 варианта маски (от 0 до 32 единиц).

Пример: 255.255.255.240

2. Префиксная запись (RFC 1860, CIDR-нотация)

Записывается как /число после IP-адреса. Число указывает количество бит, относящихся к Network ID.

Пример: 192.168.5.1/28 — означает, что 28 бит относятся к Network ID, а оставшиеся 4 бита — к Host ID.

Обе записи абсолютно равнозначны:

Десятичная маска Префиксная запись
255.255.255.240 /28
255.255.255.0 /24
255.255.0.0 /16
255.0.0.0 /8

В Cisco IOS при назначении IP-адреса на интерфейс обязательно использовать десятичную запись маски. Более новое оборудование, как правило, позволяет задавать и префиксную запись.

Пример с маской /28

Допустим, у нас IP-адрес 10.0.0.1 с маской 255.255.255.240 (она же /28).

В двоичном виде:

  • 10 = 00001010
  • Маска 255.255.255.240 = 28 единиц, затем 4 нуля

Для адреса класса A (10.x.x.x) классовая маска была бы /8 (8 бит Network ID). Сейчас мы говорим, что к Network ID относятся 28 бит — граница сместилась вправо на 20 бит. Эти 20 бит хранят Subnet ID (номер подсети), а оставшиеся 4 бита отводятся под Host ID.

Определение принадлежности к одной сети

Операция побитового И (AND)

Чтобы узнать, находятся ли два узла в одной сети:

  1. Берём свой IP-адрес и побитово умножаем (AND) на свою маску — получаем адрес своей сети
  2. Берём IP-адрес соседа и побитово умножаем на свою маску — получаем адрес сети, в которой находился бы сосед, если бы он был в сети такого же размера
  3. Если результаты совпали — узлы в одной сети. Если нет — в разных

Важно: узел не знает маску соседа. Он использует только свою собственную маску для обеих операций.

Пример:

  • Наш адрес: 10.0.0.1/28 → 10.0.0.1 AND 255.255.255.240 = 10.0.0.0
  • Адрес соседа: 10.0.0.2 → 10.0.0.2 AND 255.255.255.240 = 10.0.0.0
  • Результаты совпали — узлы в одной сети

Сабнетинг на примере

Возьмём сеть 192.168.1.0/29 (8 адресов: от .0 до .7). Левые 29 бит одинаковые, правые 3 бита пробегают все значения.

Переносим границу вправо на 1 бит (маска становится /30):

Подсеть 1: 192.168.1.0/30

  • Адреса: .0, .1, .2, .3
  • 30-й бит = 0

Подсеть 2: 192.168.1.4/30

  • Адреса: .4, .5, .6, .7
  • 30-й бит = 1

Была одна сеть на 8 адресов — стало 2 сети по 4 адреса.

Агрегация (суперсети)

Обратный процесс — агрегация. Если есть несколько подсетей, у которых левые биты совпадают, а все остальные пробегают все возможные значения, их можно объединить в одну большую сеть.

Пример: четыре сети /31, порезанные из одной /29, можно снова собрать в одну сеть /29.

Зачем нужна агрегация

Очень полезная штука для провайдеров. Провайдер получает в своё распоряжение блок адресов (например, /16), делит его на части и выдаёт клиентам (например, по /24). Всем остальным провайдерам в мире не нужно запоминать 256 отдельных клиентских сетей — достаточно знать один провайдерский блок. Тем самым:

  • Экономятся записи в таблице маршрутизации
  • Процедура маршрутизации выполняется быстрее
  • Экономится память оборудования

В корпоративных сетях агрегация встречается редко, а вот сабнетинг — часто.

VLSM и CIDR

Два термина, которые иногда встречаются в литературе:

  • VLSM (Variable Length Subnet Mask) — корпоративный механизм. Позволяет разделить классовую сеть на части (граница переносится вправо). Не позволяет использовать сети крупнее классовых — суперсети из классовых сетей сделать не получится.
  • CIDR (Classless Inter-Domain Routing) — провайдерский механизм. Разрешает объединять или агрегировать любые сети, включая классовые (граница переносится влево).

Смысл у обоих одинаковый — можно переносить границу относительно классовой сети.

Рекомендация RFC 950: нулевая и последняя подсеть

Оригинальный RFC 950, который разрешал резать сети на части, содержал рекомендацию: не использовать первую и последнюю подсеть из нарезки.

Причина: при разделении сети на части у первой подсети адрес сети совпадает с адресом родительской сети, а у последней — совпадает широковещательный адрес. Некоторое оборудование могло их путать.

Если резать всего на две части — рекомендация теряет смысл (обе нельзя использовать). Если на четыре — первую и последнюю нельзя, вторую и третью можно.

Сегодня эта рекомендация устарела. RFC 1878 уже давно сказал, что можно брать первый и последний кусок без проблем. Но если в сети есть старое классовое оборудование (из 80-х годов), лучше эту рекомендацию соблюдать — из-за совпадения адресов могут возникнуть петли маршрутизации.

В Cisco IOS есть команда ip subnet-zero (разрешает использовать первую подсеть) и no ip subnet-zero (запрещает). В современных версиях IOS ip subnet-zero включена по умолчанию.

Маршрутизация при бесклассовой адресации

Определение интерфейса для отправки пакета

Допустим, у узла два интерфейса:

  • Интерфейс 1: 10.0.1.1/24
  • Интерфейс 2: 10.0.2.1/24

Нужно отправить пакет узлу 10.0.2.2. Для каждого интерфейса:

  1. Берём IP-адрес интерфейса, применяем маску, получаем адрес сети
  2. Берём IP-адрес получателя, применяем ту же маску, сравниваем

Интерфейс 1: 10.0.1.1 AND /24 = 10.0.1.0. Адрес получателя: 10.0.2.2 AND /24 = 10.0.2.0. Не совпало — получатель не в этой сети.

Интерфейс 2: 10.0.2.1 AND /24 = 10.0.2.0. Адрес получателя: 10.0.2.2 AND /24 = 10.0.2.0. Совпало! Отправляем пакет напрямую через интерфейс 2, указав MAC-адрес получателя в кадре.

Важно: IP-адреса разных интерфейсов не должны пересекаться. Например, нельзя ставить 10.0.0.1/24 на одном интерфейсе и 10.0.0.2/25 на другом — адрес одного интерфейса попадёт в сеть другого.

Маршрут по умолчанию

Если получатель не находится в одной сети ни с одним интерфейсом, нужна таблица маршрутизации. Как и при классовой адресации, у бесклассовых узлов есть таблица маршрутизации с:

  • Connected-маршрутами — сети, в которые узел смотрит напрямую
  • Удалёнными маршрутами — сети, доступные через промежуточный маршрутизатор

Маршрут по умолчанию в бесклассовой адресации — это маршрут на суперсеть 0.0.0.0/0. Это все IP-адреса в мире: у абсолютно любого адреса первые 0 бит совпадают с адресом 0.0.0.0.

Правило наибольшей специфичности (Longest Prefix Match)

В отличие от классовой адресации, в бесклассовой один IP-адрес может принадлежать нескольким сетям. Поэтому при поиске маршрута:

  1. Перебираем все записи в таблице маршрутизации
  2. Для каждой записи проверяем, подходит ли адрес получателя
  3. Из всех подходящих выбираем маршрут с наибольшей маской (самую конкретную, самую маленькую сеть)

Пример таблицы маршрутизации:

Сеть Маска Next-hop
192.168.100.0 /24 Router A
192.168.0.0 /16 Router B
0.0.0.0 /0 Router C

Для пакета до 192.168.100.45 подходят все три маршрута. Побеждает /24 — у неё маска числом больше всех.

Маршрут 0.0.0.0/0 работает как "все остальные сети в мире" — подхватывает пакеты, которые не попали под более конкретные маршруты.

Пример таблицы маршрутизации в сети

На обычных абонентских узлах:

  • Connected-сеть (например, 10.0.0.0/24)
  • Маршрут по умолчанию через шлюз (0.0.0.0/0 via 10.0.0.254)

На центральном маршрутизаторе:

  • Несколько Connected-сетей (10.0.1.0/30, 10.0.2.0/29, 10.0.3.0/24, 192.168.0.0/24)
  • Маршрут до удалённой сети (10.0.0.0/24 via 10.0.1.1)
  • Маршрут по умолчанию в интернет (0.0.0.0/0 via провайдер)

Таблица маршрутизации есть на всех узлах: рабочих станциях, маршрутизаторах, даже на принтерах. Она может быть вырожденной (один интерфейс + маршрут по умолчанию), но она всё равно есть.

Демонстрация на разных платформах

Windows

Команда route print показывает таблицу маршрутизации:

  • Маршрут на суперсеть 0.0.0.0/0
  • Connected-маршруты (например, 192.168.0.0/24)
  • Маршруты до собственных IP-адресов
  • Маршруты до широковещательных адресов (например, 192.168.0.255)
  • Локальные броадкасты (255.255.255.255, 127.255.255.255)

Добавление статического маршрута:

route add 8.8.8.8 mask 255.255.255.255 192.168.0.1

Это создаёт запись: пакеты до 8.8.8.8/32 отправлять через 192.168.0.1. Для выполнения нужны права администратора.

Когда имеет смысл редактировать таблицу маршрутизации

Если у вас один интерфейс и один маршрутизатор — нет смысла. Но если на машине несколько интерфейсов (Wi-Fi, Ethernet, 3G-модем), можно:

  • Настроить приоритеты маршрутов по умолчанию через метрику (меньше метрика — выше приоритет)
  • Направить трафик до конкретных узлов через определённый интерфейс

Пример: Ethernet — основной канал (метрика меньше), Wi-Fi — резервный (метрика больше). Если Ethernet отключается, трафик автоматически идёт через Wi-Fi.

VPN и маршруты

В штатном VPN-клиенте Windows по умолчанию стоит галочка "Устанавливать шлюз по умолчанию через этот VPN". Из-за этого при подключении к VPN отваливается весь остальной интернет. В большинстве случаев эту галочку нужно снять (свойства подключения -> "Использовать шлюз в удалённой сети").

Ещё один нюанс: протокол PPP, который используется в Windows VPN, не умеет передавать маску. Когда VPN назначает IP-адрес (например, 192.168.0.1), Windows добавляет классовый маршрут до сети этого адреса.

Cisco IOS

Назначение IP-адреса на интерфейс:

interface GigabitEthernet 0/0
 no shutdown
 ip address 172.31.1.254 255.255.248.0

Cisco IOS требует десятичную запись маски (формат RFC 950), префиксную запись при назначении адреса не поддерживает.

Primary и Secondary адреса

Команда ip address без ключевого слова задаёт основной адрес. Повторный вызов ip address без secondary заменяет предыдущий.

Для добавления дополнительных адресов используется ключевое слово secondary:

ip address 10.0.0.1 255.255.255.0 secondary
ip address 10.0.0.2 255.255.255.0 secondary
ip address 10.0.0.3 255.255.255.0 secondary

Secondary-адреса:

  • Можно добавлять в любом количестве
  • Могут быть из разных IP-сетей
  • Друг друга не переопределяют
  • Пакеты, сгенерированные самим маршрутизатором без явного указания адреса источника, будут отправлены от основного адреса

Полезно при миграции сети на новую адресацию: вешаете на один интерфейс и старый, и новый адрес, а затем постепенно переводите клиентов.

Таблица маршрутизации в Cisco IOS

Команда show ip route показывает:

  • L (Local) — собственные IP-адреса маршрутизатора (с маской /32). Пакеты на эти адреса обрабатываются локально.
  • C (Connected) — сети, подключённые напрямую к интерфейсам. Появляются автоматически при назначении IP-адреса на интерфейс.
  • S (Static) — статические маршруты.

IOS также справочно показывает информацию о классовых суперсетях: какая классовая сеть была "подербанена" на части и какие подсети из неё получились (VLSM-режим отображения).

Добавление маршрута по умолчанию

ip route 0.0.0.0 0.0.0.0 GigabitEthernet 0/0

Звёздочка * в выводе show ip route отмечает маршрут по умолчанию.

Классовый и бесклассовый режимы

Cisco IOS исторически имеет классовые корни. Команда no ip classless переводит маршрутизатор в классовый режим, а ip classless — в бесклассовый (по умолчанию в современных версиях).

Команда no ip routing полностью отключает маршрутизацию. Маршрутизатор превращается в простое устройство: умеет отправлять и принимать IP-пакеты, но не умеет маршрутизировать. Вместо полноценной таблицы маршрутизации можно задать только ip default-gateway — единственный маршрут по умолчанию:

no ip routing
ip default-gateway 10.0.0.254

Это полезно для простых устройств (принт-серверы и подобные), которым нужен IP, но не нужна полноценная маршрутизация.

Также существует команда ip default-network — классовый механизм, который помечает одну из классовых сетей звёздочкой как маршрут по умолчанию. Работает только в классовом режиме. Следы этой команды можно встретить в документации по протоколу EIGRP.

MikroTik (RouterOS)

Команда ip route print показывает таблицу маршрутизации. Активные маршруты помечены буквой A.

Пример вывода:

  • Connected-сеть 192.168.0.0/24 через Ethernet-интерфейс
  • GRE-туннель с адресом 192.168.1.1/24
  • Два маршрута по умолчанию 0.0.0.0/0: через GRE-туннель и через 192.168.0.1

Если два маршрута по умолчанию с одинаковой метрикой — часть трафика пойдёт через один канал, часть через другой. Это приводит к проблемам, особенно при наличии NAT: пакеты одного приложения, проходя через разных провайдеров, получат разные IP-адреса источника.

Linux

Команда route (или ip route show) показывает таблицу маршрутизации:

  • Connected-сеть (например, 192.168.100.0/24) через интерфейс eth0
  • Маршрут по умолчанию (default) через шлюз (например, 192.168.100.5)

Проблема двух провайдеров

Типичный вопрос начинающих: "У меня есть маршрутизатор, хочу подключить двух провайдеров. Как это сделать?"

Ответ: легко сделать не получится. Основные проблемы:

  1. NAT — если трафик проходит через NAT, пакеты, ушедшие через разных провайдеров, получат разные IP-адреса. Получатель увидит два потока с разных адресов, хотя вы отправляли из-под одного.

  2. Привязка приложений — трафик одного приложения всегда должен идти через одного и того же провайдера. Нельзя "размазывать" его между двумя каналами.

  3. Балансировка — если направить торрент через один канал, а YouTube и голос через другой, может получиться, что один канал забит, а другой простаивает.

  4. Отказоустойчивость — при падении одного канала нужно переключение, но сервисы (например, Skype) могут нервно реагировать на смену IP-адреса.

Единственный надёжный вариант — когда с обоими провайдерами заключено соглашение, что они не перебивают ваши IP-адреса (например, вы купили свой блок адресов и анонсируете его через BGP обоим провайдерам).


На сегодня всё. В следующем уроке продолжим говорить про IP-маршрутизацию: будем решать задачки и разберём дополнительные механизмы протокола IP.

Network Education

Бесплатная онлайн-академия сетевых технологий. Видеоуроки, транскрипции и структурированные треки обучения — от основ до продвинутого уровня.

ТрекиКаталогО проекте
© 2026 Network Education