Урок 11. Технологии адресации CIDR и VLSM

Для разбиения адресного пространства используются такие технологии как CIDR (Classless Inter-Domain Routing)  и VLSM (Variable Length Subnet Mask). Они позволяют рационально распределять адреса между сетевыми элементами и помогают существенно уменьшить таблицы маршрутизации.

CIDR

Сегодня мы подробнее рассмотрим IP адресацию. Как вы уже знаете существуют 3 класса сетей: А, В и С. Они отличаются друг от друга только количеством выделенного адресного пространства для хостов.

Например, класс А может предоставить 16 777 214 адресов. Класс В - 65 534, а класс С - 254. Теперь рассмотрим небольшую сеть:

Упрощенная схема сети
Рис. 1. Упрощенная схема сети

Между маршрутизаторами используется адресация класса А. Но задействовано всего лишь 2 адреса. Остальные адреса остались не задействованы и в принципе уже не могут быть использованы. 

Почему? Разве мы не можем назначить эти адреса другим маршрутизаторам? 

Нет, нельзя. Представьте себе, что данная сеть находится в Европе. А вы назначите оставшиеся адреса маршрутизаторам или другим сетевым устройствам где-то в Австралии.  В таблице маршрутизации хранится запись только адреса самой сети, но не адреса отдельных хостов. То есть в данном случае возникает неувязка - а куда же направить пакет, предназначенный для сети 10.0.0.0? В Европу или Австралию? Вот в чем проблема. 

И какое же решение? 

Решение было очень простым. Было решено отказаться от использования классовой модели адресов и перейти к бесклассовой адресации (Classless Inter-Domain Routing, CIDR). Данная модель позволяет гибко управлять адресным пространством. 

И в чем ее суть? Как она работает? 

Она позволяет разбивать сеть на более мелкие подсети. Если раньше адрес состоял из 2-х частей (сетевая и хостовая), то сейчас он состоит из 3-х частей (сетевая, подсетевая, хостовая),

Структура IP адреса по классовой модели
Рис. 2. Структура IP адреса по классовой модели
Структура IP адреса по бесклассовой модели
Рис. 3. Структура IP адреса по бесклассовой модели

Теперь мы можем произвольно менять размер подсети и соответственно количество хостов. 

А как сетевые устройства будут знать номер подсети и количество в нем хостов? 

Для этого и  используются маски. Вернемся к нашему примеру. Так как нам нужно всего лишь 2 адреса, то в хостовой части адреса 4-го октета мы займем только 2 младших бита. Остальные будут использоваться для обозначения номера подсети. Маска в данном случае будет выглядеть так 11111111.11111111.11111111.11111100 или 255.255.255.252. То есть вся остальная часть, кроме хостовой,  записывается единицами. 

Но почему 2 бита?  Ведь это будет 4 адреса, не лучше ли взять один бит? Он как раз принимает 2 состояния. 

Вспомните, что у нас всегда есть 2 адреса: адрес самой сети и широковещательный адрес.  

Теперь мы можем записать адреса так:

10.0.0.0 - адрес подсети

10.0.0.1 - адрес маршрутизатора A_Router

10.0.0.2 - адрес маршрутизатора B_Router

10.0.0.3 - широковещательный адрес.

 

Следующая подсеть будет выглядеть так:

10.0.0.4 - адрес подсети

10.0.0.5 - адрес сетевого устройства

10.0.0.6 - адрес сетевого устройства

10.0.0.7 - широковещательный адрес.

 

Каждая последующая подсеть начинается через каждые 4 адреса. CIDR позволяет разбивать сеть исходя из требуемого количества хостов, экономя адресное пространство.

Применив маску 255.255.255.252, мы сможем назначить оставшиеся адреса другим устройствам, даже если они находятся на другом континенте. 

 

VLSM 

Однако прогресс не стоит на месте. Даже используя бесклассовую модель адресации, может возникнуть ситуация, когда адреса используются не экономно.

Например, мы разбили сеть 192.168.1.0/24 на 4 подсети с маской 255.255.255.192, то есть заняли 2 старших бита 4-го октета на подсеть:

192.168.1.0/26

192.168.1.64/26

192.168.1.128/26

192.168.1.192/26

Каждая подсеть предоставляет 62 хостовых адресов, так как под хосты выделено 6 бит. Однако в подести 192.168.1.128 используются только 10 адресов. Остальные бездействуют и расширение компьютеров явно не предвидится. Подобная ситуация и  в 4-й подсети. Там используются только 13 адресов.

Чтобы избежать подобных ситуаций и грамотно распределить разделить адресное пространство была реализована технология масок переменной длины (Variable Length Subnet Mask, VLSM).

Если быть короче, то она позволяет дробить подсети на еще более мелкие подсети. Например, подсеть 192.168.1.128/26 разобьем на 4 “подподсети” с маской 255.255.255.240. Выглядит это так: 

192.168.1.128/28

192.168.1.144/28

192.168.1.160/28

192.168.1.176/28

Каждая “подподсеть” имеет в распоряжении 14 адресов. Теперь мы можем выделить только одну подсеть 192.168.1.128/28. При этом у нас останутся в резерве еще 2 “подподсети”  и  4-я подсеть.

С помощью технологии VLSM можно создавать иерархию сетей и подсетей, дробя адреса в случае необходимости:

Пример разбиения сети на различные подсети
Рис. 4. Пример разбиения сети на различные подсети

На этом возможности технологии VLSM не исчерпываются.Она позволяет не только дробить сети, но и объединять их. Рассмотрим рисунок:

Фрагмент сети с маршрутизаторами
Рис. 5. Фрагмент сети с маршрутизаторами

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

Пример таблицы маршрутизации маршрутизатора А
Рис. 6. Пример таблицы маршрутизации маршрутизатора А

Маршрутизатор А хранит в своей таблицы запись обо всех подсетях. Причем все они доступны через один тот же интерфейс. Чтобы сократить количество записей в таблице, а также уменьшить время обработки маршрутов можно объединить подсети в одну. Для этого выделите те октеты и биты, которые совпадают у всех адресов. Поставьте в данных позициях 1 и получишь новую маску, которая объединит все записи в таблице в одну:

Объединение  адресов подсетей в один адрес с помощью двоичного представления
Рис. 7. Объединение адресов подсетей в один адрес с помощью двоичного представления

Теперь таблица маршрутизации содержит такую запись:

Таблица маршрутизации с объединенным маршрутом
Рис. 8. Таблица маршрутизации с объединенным маршрутом
Как считать маски и подсети 

Существует несколько способов для расчета маски и подсетей.

Я предложу тот, которым пользуюсь. Решать вам каким способом будете пользоваться вы.

Для начала советую запомнить числа и их последовательность -  128, 64, 32, 16, 8, 4, 2, 1. Эти числа также соответствуют позициям бит в каждом октете (слева направо). 

Пример 1. Нужно задействовать 25 адресов. Расчитать маску.

Решение: 

  1. Исходя из выше приведенной последовательности определить ближайшее максимальное число к 25. В данном случае это 32, что соответствует 25 = 32. То есть под хостовую часть отведено 5 бит.
  2. Теперь 256 - 32 = 224. 
  3. Так как нам нужно было всего лишь 25 адресов, то первые 3 октета будут равны 255, а 4-й 224. Наша маска будет 255.255.255.224.

 

Пример 2. Нужно задействовать 300 адресов. Расчитать маску.

Решение:

  1. Так как 300 > 256, то 4-й октет занят полностью. 300 -256 = 44 хоста приходятся на 3-й октет.
  2. Определяем ближайшее максимальное число. Это будет 26 = 64, то есть 6 бит для хостов.
  3. 256 - 64 = 192. Либо можно просто сложить 128 и 64 (2 старших бита).
  4. Наша маска - 255.255.192.0

 

Пример 3. Дана сеть 192.168.1.0/28. Определить все подсети, входящие в нее.

Решение:

  1. На хостовую часть выделено 32- 28 = 4 бита. 
  2. Возведем 2 в 4-ю степень - 24 = 16. Это количество адресов в подсети, включая и адрес самой подсети и широковещательный адрес.
  3. Каждая последующая подсеть будет располагаться через каждые 16 бит, то есть 192.168.1.0, 192.168.1.16, 192.168.1.32, 192.168.1.48 и т.д.
  4. Количество подсетей 256/16 = 18

 

Пример 4. Дана сеть 192.168.0.0/22. Определить все подсети, входящие в нее.

Решение:

  1. На хостовую часть отведено 32 - 22 = 10 бит. Весь 4-й октет занят. В 3-м октете занято 2 младших бита.
  2. Возведем 2 во 2-ю степень - 22 = 4. Это количество адресов в  подсети в 3-м октете. Всего количество адресов в каждой подсети равно 210 = 1024.
  3. Каждая последующая подсеть будет располагаться через каждые 4 бита в 3-м октете, то есть 192.168.0.0, 192.168.4.0, 192.168.8.0, 192.168.8.0 и т.д.
  4. Количество подсетей равно 256/4 = 64.

 

Пример 5. Определить к какой подсети относится адрес 189.24.18.134/29.

Решение:

  1. Определяем количество хостов в подсети. 32 - 29 = 3 бита на хостовую часть. Количество хостов 23 = 8.
  2. Найти ближайшие подсети к данному адресу.8 х 16 = 128 (189.24.18.128) и 8 х 17 = 136 (189.24.18.136).
  3. Выбираем подходящую подсеть, в данном случае это 189.24.18.128.

 

Вот и все. Надеюсь все было понятно.