CIDR

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

Например, класс А может предоставить 16 777 214 адресов. Класс В — 65 534, а класс С — 254.

Теперь рассмотрим небольшую сеть:

CIDR

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

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

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

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

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

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

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

Структура IP адреса согласно классовой модели

Структура 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 можно создавать иерархию сетей и подсетей, дробя адреса в случае необходимости.

 

VLSM

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

Рассмотрим рисунок:

объединение сетей VLSM

 

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

Запись в таблице маршрутизаторов объединения сетей VLSM

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

VLSM

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

таблица маршрутизации

Данная операция проводится вручную или автоматически?

Она проводится как вручную, так и автоматически. Мы изучим ее в уроках по маршрутизации.

 

Как считать маски и подсети?

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

Для начала советую запомнить числа и их последовательность — 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-й октет занят полностью, поэтому позаимствуем несколько бит из 3-го октета.

2) Определяем ближайшее максимальное число. Это будет 29 = 512, то есть 9 бит для хостов, один из которых приходится на 3-й октет.

3) 256 — 21 = 254 и наша маска — 255.255.254.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 = 16

Пример 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 (количество хостов) необходимо умножить на некоторое число, чтобы произведение дало число близкое к 134 (последний октет в нашем адресе). Имеем 8 х 16 = 128 (189.24.18.128) и 8 х 17 = 136 (189.24.18.136).

3) У нас есть 2 числа: 128 и 136. Выберем подходящую подсеть. В данном случае это 189.24.18.128, потому что от 189.24.18.136 начинается другая подсеть и адрес 189.24.18.134 в нее не входит.

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