Сетевые технологии: IP-адреса, подсети и бесклассовая адресация CIDR
Понимание сетевых технологий крайне необходимо для настройки сложных сред, эффективного обмена информацией между серверами, управления нодами, а также при разработке безопасных сетевых политик.
Данная статья ознакомит вас с методами проектирования сетей и взаимодействия с компьютерами, которые подключены к сети. В частности здесь рассматриваются сетевые классы, подсети и CIDR-нотация для группирования IP-адресов.
Что такое IP-адрес?
Каждое устройство или место в сети должно иметь свой адрес – некоторое обозначение в рамках предопределенной системы адресов, по которому к этому устройству/месту можно получить доступ. В стандартной модели TCP/IP адресация обрабатывается на нескольких сетевых уровнях. Обычно в контексте сетевых технологий под сетевым адресом подразумевают IP-адрес.
IP-адреса позволяют получать сетевые ресурсы через сетевой интерфейс. Если один компьютер хочет установить связь с другим компьютером, он может передать информацию на IP-адрес удаленного компьютера. Если два компьютера находятся в одной сети и если компьютеры и устройства между ними могут преобразовывать сетевые запросы, компьютеры должны иметь возможность установить соединение и отправлять информацию.
Каждый IP-адрес должен быть уникальным в рамках своей сети. Сети можно изолировать, а можно соединить их между собой и преобразовать, чтобы обеспечить доступ к различным сетям. Преобразование сетевых адресов – это система, которая позволяет переписывать адреса пакетов, достигнувших границы сети, и передать их в указанное место назначения. Таким образом, один IP-адрес можно использовать в нескольких изолированных средах.
Разница между IPv4 и IPv6
Сегодня существует две версии протокола IP, которые широко применяются в системах. IPv4, четвёртая версия протокола, поддерживается большинством систем. Более новая версия, IPv6, набирает популярность благодаря улучшениям возможностей протокола и из-за нехватки доступных адресов IPv4 (проще говоря, сегодня в мире столько подключенных к сети устройств, что адресов IPv4 не хватает на всех).
Адреса IPv4 – 32-битные. Каждый байт, или 8-битовый сегмент адреса отделяется точкой и выражается числом в диапазоне 0-255. Несмотря на то, что эти числа обычно выражаются десятичным числом (чтобы упростить их восприятие), каждый сегмент называют октетом, чтобы выразить тот факт, что он представляет собой 8 бит.
Типичный адрес IPv4 выглядит примерно так:
Самым низким значением в октете является 0, а самым высоким – 255.
Также можно выразить этот адрес в двоичном коде, чтобы лучше понять строение адреса (в примере каждые 4 бита для удобочитаемости заменены пробелом, а точки пунктиром):
1100 0000 — 1010 1000 — 0000 0000 — 0000 0101
Оба приведённые выше формата выражают один и тот же адрес.
Несмотря на некоторые отличия в функциональности IPv4 и IPv6, наиболее заметным их отличием является адресное пространство. IPv6 выражает адреса как 128-битное число. Это означает, что IPv6 имеет в 7,9×1028 раз больше адресов, чем IPv4.
Чтобы выразить этот расширенный диапазон адресов, IPv6 обычно записывается как восемь сегментов из четырех шестнадцатеричных чисел. Шестнадцатеричные числа выражаются числами от 0 до 15, а также числами a-f (для более высоких значений). Типичный адрес IPv6 может выглядеть примерно так:
Этот адрес можно записать в компактном формате. Правила IPv6 позволяют удалять любые ведущие нули из каждого октета и заменять диапазоны обнуленных групп двойным двоеточием (: :).
К примеру, если в IPv6 есть такая группа:
Диапазон IPv6 с несколькими группами нулей:
Сокращение можно применять только один раз для каждого адреса, иначе полный адрес будет невозможно восстановить.
Сегодня всё чаще используется IPv6, но в остальных примерах статьи будут использоваться адреса IPv4, потому что с меньшим адресным пространством проще работать.
Классы и зарезервированные диапазоны IPv4
Обычно IP-адреса состоят из двух компонентов. Первая часть адреса определяет сеть, частью которой является адрес. Вторая часть используется для указания хоста в этой сети.
Граница между первым и вторым компонентом адреса определяется настройками сети.
Адреса IPv4 делятся на пять классов, предназначенных для дифференциации сегментов доступного адресного пространства IPv4. Они определяются первыми четырьмя битами каждого адреса. Вы можете определить, к какому классу принадлежит IP-адрес, просмотрев эти биты.
- Класс А: 0—. Если первый бит в адресе – 0, значит, адрес относится к диапазону А (это адреса от 0.0.0.0 до 127.255.255.255).
- Класс B: 10–. К этому классу относятся все адреса от 128.0.0.0 до 191.255.255.255. Это адреса, первый бит которых представлен единицей, а второй – нет.
- Класс C: 110-. Это адреса от 192.0.0.0 до 223.255.255.255. Их первые два бита представлены единицей, а третий – нет.
- Класс D: 1110. Первые три бита этого класса представлены единицей. Это адреса в диапазоне от 224.0.0.0 до 239.255.255.255.
- Класс Е: 1111. Это адреса в диапазоне от 224.0.0.0 до 239.255.255.255. Этот класс включает в себя все адреса, которые начинаются с 1111.
Адреса класса D зарезервированы для многоадресных протоколов, которые позволяют отправлять пакет группе нод в одной транзакции. Адреса класса E зарезервированы для будущих или экспериментальных целей и в основном не используются.
Классы А-С по-разному разделяют компонент сети и компонент хоста.
Адреса класса A использовали оставшуюся часть первого октета для представления сети, а остальная часть адреса использовалась для определения хостов. Такой адрес было удобно использовать для определения нескольких сетей с большим количеством хостов.
Адреса класса B использовали первые два октета (остаток от первого и весь второй) для определения сети, а остальные – для определения хостов в каждой сети. Адреса класса C использовали первые три октета для определения сети, а последний октет – для определения хостов в этой сети.
Изначально разделение IP-пространства на классы применялось как решение проблемы быстрого исчерпания адресов IPv4 (вы можете иметь несколько компьютеров с одним и тем же хостом, если они находятся в разных сетях). Сегодня существуют более современные решения.
Зарезервированные частные диапазоны
Некоторые части пространства IPv4 зарезервированы для конкретных целей.
Один из самых полезных зарезервированных диапазонов – это диапазон кольцевой проверки, определяемый адресами от 127.0.0.0 до 127.255.255.255. Этот диапазон используется каждым хостом для тестирования сети. Обычно он выражается первым адресом в этом диапазоне: 127.0.0.1.
Каждый обычный класс также имеет диапазон, который используется для обозначения адресов частной сети. Например, для класса A это адреса от 10.0.0.0 до 10.255.255.255. Для класса B этот диапазон составляет 172.16.0.0 – 172.31.255.255. Для класса C это диапазон от 192.168.0.0 до 192.168.255.255.
Любой компьютер, не подключенный к Интернету напрямую (т. е. компьютер, который проходит через маршрутизатор или другую систему NAT), может использовать эти адреса по своему усмотрению.
Больше о зарезервированных адресах можно узнать в Википедии.
Сетевые маски и подсети
Подсети – это сети, которые получаются в результате процесса деления сети на более мелкие сетевые разделы. Подсети используются для различных целей и помогают изолировать группы хостов и управлять ними.
Как говорилось выше, каждое адресное пространство делится на сетевую часть и часть хоста. Часть адреса, которую каждый из них занимает, зависит от класса, которому принадлежит адрес.
Например, для адресов класса C первые 3 октета используются для описания сети: в адресе 192.168.0.15 часть 192.168.0 описывает сеть, а 15 – хост.
По умолчанию каждая сеть имеет только одну подсеть, которая содержит все адреса нод.
Сетевая маска – это спецификация количества адресных битов, которые используются для части сети. Маска подсети – это еще одна сетевая маска, используемая для дальнейшего разделения сети.
Каждый бит адреса, который считается значимым для описания сети, должен быть представлен в сетевой маске как 1.
Например, адрес 192.168.0.15 можно выразить в бинарном коде:
1100 0000 — 1010 1000 — 0000 0000 — 0000 1111
Идентификатор сети в адресах класса C – это первые 3 октета, или первые 24 бита. Поскольку эти биты важны и их нужно сохранить, сетевая маска будет выглядеть следующим образом:
1111 1111 — 1111 1111 — 1111 1111 — 0000 0000
В обычном формате IPv4 это будет выглядеть так:
Каждый бит, отмеченный в бинарном представлении сетевой маски нулём, считается идентификатором хоста и может изменяться. Биты, отмеченные единицей, постоянны (хотя в сети или подсети это не всегда так).
Определить сетевую часть адреса можно с помощью поразрядной операции AND между адресом и сетевой маской. Поразрядная операция AND сохраняет сетевую часть адреса и отбрасывает часть хоста. В результате рассматриваемый нами адрес будет выглядеть так:
1100 0000 — 1010 1000 — 0000 0000 — 0000 0000
Его можно выразить как 192.168.0.0. Спецификация хоста является отличием между этим исходным значением и частью хоста. В данном случае это «0000 1111» или 15.
Подсети берут часть пространства хоста адреса и использует его как дополнительную сетевую спецификацию для дальнейшего разделения адресного пространства.
Например, сетевая маска 255.255.255.0 оставляет 254 хоста в сети (0 и 255 использовать нельзя – они зарезервированы). Чтобы разделить это пространство на две подсети, можно использовать один бит части хоста адреса в качестве маски подсети.
Продолжим работать с предыдущим примером. Часть сети:
1100 0000 — 1010 1000 — 0000 0000
Первый бит хоста можно использовать для обозначения подсети. Для этого нужно настроить маску подсети, вместо:
1111 1111 — 1111 1111 — 1111 1111 — 0000 0000
1111 1111 — 1111 1111 — 1111 1111 — 1000 0000
В традиционной нотации IPv4 это будет выглядеть так:
Теперь первый бит последнего октета отмечен как важный для адресации в сети. Это создает две подсети. Первая подсеть будет в диапазоне от 192.168.0.1 до 192.168.0.127. Вторая подсеть содержит хосты 192.168.0.129 до 192.168.0.255. Традиционно сама подсеть не должна использоваться в качестве адреса.
Бесклассовая адресация CIDR
Система CIDR (Classless Inter-Domain Routing) была разработана в качестве альтернативы традиционным подсетям. С помощью CIDR вы можете добавить спецификацию самого IP-адреса в число значимых битов, составляющих часть маршрутизации или сети.
Например, выразить связь IP-адреса 192.168.0.15 с сетевой маской 255.255.255.0 можно с помощью CIDR-нотации 192.168.0.15/24. Это означает, что первые 24 бита указанного IP-адреса считаются значимыми для сетевой маршрутизации.
CIDR можно использовать для обозначения «суперсетей». В этом случае имеется в виду более широкий диапазон адресов, что невозможно при использовании традиционной маски подсети. Например, в сети класса C (в предыдущем примере) объединять адреса из сетей 192.168.0.0 и 192.168.1.0 нельзя, потому что сетевая маска для адресов класса C – 255.255.255.0.
CIDR-нотация позволяет объединить эти блоки, определив этот блок как 192.168.0.0/23. Это значит, что 23 бита используются для части сети.
Таким образом, первая сеть (192.168.0.0) может быть представлена в двоичном коде так:
1100 0000 — 1010 1000 — 0000 0000 — 0000 0000
А вторая сеть (192.168.1.0) – так:
1100 0000 — 1010 1000 — 0000 0001 — 0000 0000
CIDR-адрес значит, что 23 бита используются в адресной части сети. Это эквивалентно сетевой маске 255.255.254.0, или:
1111 1111 — 1111 1111 — 1111 1110 — 0000 0000
Как видите, в этом блоке 24-й бит может быть 0 или 1, и такой адрес все равно подойдёт, так как ля сетевой части важны только первые 23 бита.
В целом, CIDR позволяет контролировать адресацию непрерывных блоков IP-адресов. Это намного удобнее, чем подсеть.
Заключение
Теперь вы знакомы с некоторыми механизмами адресации и основами протокола IP. Понимание сетевых технологий поможет правильно настроить программное обеспечение и его компоненты.
Существует много полезных онлайн-инструментов, которыми вы можете пользоваться при работе с сетями: