Подсеть
Подсеть (также подсеть сети или субсеть) — это логическое подразделение IP-сети[1]. Разделение сети на две или более подсетей называется разбиением на подсети или сабнеттингом.
Функционал
Компьютеры, принадлежащие одной подсети, имеют одинаковую группу старших битов (most-significant bits) в своих IP-адресах. Это приводит к логическому делению IP-адреса на два поля: сетевой номер или маршрутизирующий префикс и остальное поле или идентификатор хоста. Идентификатор хоста уникально определяет конкретный хост или сетевой интерфейс.
Маршрутизирующий префикс может быть выражен как первый адрес сети в нотации CIDR (Classless Inter-Domain Routing) — адрес, за которым следует косая черта (/) и длина префикса в битах. Например, запись обозначает сеть IPv4, в которой 24 бита зарезервированы под адрес сети, а остальные 8 бит используются для адресации хостов. Адреса в диапазоне от до принадлежат этой сети, а используется как широковещательный адрес подсети. Аналогично для IPv6 запись определяет большой блок из 296 адресов с 32-битным маршрутизирующим префиксом.
Для IPv4 сеть также может характеризоваться маской подсети (subnet mask, netmask), которая является битовой маской, отделяющей префикс сети. Маски подсети записывают в точечной десятичной нотации аналогично IP-адресам. Например, для префикса маска подсети будет .
Обмен трафиком между подсетями осуществляется через маршрутизаторы в случае, если маршрутизирующие префиксы исходного и целевого адреса различаются. Таким образом, маршрутизатор служит логической или физической границей между подсетями.
Польза разбиения сети на подсети может различаться в зависимости от сценария использования. В архитектуре адресации Интернета с использованием CIDR и в крупных организациях эффективное распределение адресного пространства критически важно. Кроме того, разбиение на подсети может повысить эффективность маршрутизации или упростить администрирование в случаях, когда подсетями управляют различные подразделения. Подсети могут быть логически организованы в иерархическую структуру (дерево маршрутизации) или сетевые топологии типа "меш".
Адресация и маршрутизация в сети
Компьютеры, участвующие в IP-сети, имеют как минимум один сетевой адрес. Обычно он уникален для каждого устройства и может быть назначен автоматически с помощью сетевой службы (DHCP), вручную администратором или автоматически операционной системой через механизм безусловной автоконфигурации адресов (stateless address autoconfiguration).
Сетевой адрес выполняет функции идентификации и определения местоположения хоста в сети для маршрутизации. Наиболее распространённая архитектура адресации — IPv4, однако его преемник IPv6 активно внедряется с 2006 года. Адрес IPv4 состоит из 32 бит, адрес IPv6 — из 128 бит. В обоих случаях IP-адрес логически делится на две части: маршрутизирующий префикс и идентификатор хоста. Все хосты в одной подсети имеют одинаковый префикс (он занимает старшие биты адреса), а количество бит, выделяемых под префикс, может различаться и определяется архитектурой сети. Идентификатор хоста обычно уникален в пределах локальной сети и может соответствовать номеру хоста или идентификатору интерфейса.
Такая структура адресации позволяет избирательно маршрутизировать IP-пакеты между разными сетями через шлюзовые компьютеры (маршрутизаторы), если префиксы адресов источника и назначения различаются, или доставлять пакеты напрямую в пределах одной подсети при совпадающих префиксах. Маршрутизаторы определяют границы между подсетями и управляют межподсетевым трафиком. Каждая подсеть обслуживается назначенным по умолчанию маршрутизатором, но может состоять из нескольких физических сегментов Ethernet, связанных сетевыми коммутаторами.
Маршрутизирующий префикс адреса определяется маской подсети, записываемой аналогично IP-адресу. Например, маска соответствует тому, что старшие 24 бита IPv4-адреса выделены под префикс.
Современным стандартом задания префикса сети является нотация CIDR, используемая как для IPv4, так и для IPv6. В ней число бит в префиксе добавляется к адресу после символа /. Эта запись была введена с появлением бесклассовой маршрутизации (Classless Inter-Domain Routing), описанной в RFC 4632[2]. Этот документ имеет статус «Наилучшая текущая практика» (Best Current Practice, BCP 122) и аннулировал предыдущую спецификацию RFC 1519[2]. В IPv6 это единственный стандартный способ обозначения префикса сети.
Например, сеть IPv4 с маской записывается как , а для IPv6 определяет адрес с 32-старшими битами для префикса.
В классовой (classful) адресации IPv4 до появления CIDR префикс сети определялся автоматически по старшему биту IP-адреса, что однозначно определяло класс (A, B, C) и соответствующую маску. После перехода к CIDR для интерфейса требуется явно указывать адрес и маску подсети.
Зная исходный IPv4-адрес, связанную с ним маску подсети и адрес назначения, маршрутизатор может определить, находится ли целевой адрес в локальной сети или вне её. Маска подсети назначения для этого не требуется, и обычно маршрутизатор не знает её[3]. Данный документ имеет статус «Стандарт Интернета» (Internet Standard) и, хотя был обновлён более поздними RFC, остаётся одной из основополагающих спецификаций[4]. Для IPv6 алгоритм обнаружения на одной подсети отличается и требует применения протокола NDP, который определён в RFC 4861 (статус «Проект стандарта»)[5]. Положения этого документа были уточнены в RFC 5942 (статус «Предлагаемый стандарт»)[6], который разъясняет, что в IPv6 префикс «on-link» не обязан совпадать с префиксом адреса интерфейса (за исключением локальных адресов).
Каждая физически подключённая подсеть должна иметь отдельную запись в маршрутизирующей таблице каждого связанного маршрутизатора, что увеличивает сложность маршрутизации. Однако при грамотной организации маршруты к удалённым подсетям в ветвях дерева могут быть агрегированы в supernetwork и представлены одной маршрутной записью.
Протокол IPv4
Маска подсети IPv4 состоит из 32 бит: последовательности единиц (1), за которыми следуют нули (0). Единицы указывают биты, относящиеся к префиксу, а нули — к идентификатору хоста.
Пример разбиения адреса и маски () на префикс сети и идентификатор хоста:
| Двоичная форма | Десятичная запись | |
|---|---|---|
| IP-адрес | 11000000.00000000.00000010.10000010
|
192.0.2.130 |
| Маска подсети | 11111111.11111111.11111111.00000000
|
255.255.255.0 |
| Префикс сети | 11000000.00000000.00000010.00000000
|
192.0.2.0 |
| Идентификатор хоста | 00000000.00000000.00000000.10000010
|
0.0.0.130 |
Результатом побитовой операции И между адресом и маской подсети является префикс сети . Часть адреса, соответствующая хосту, определяется побитовой операцией И между адресом и инверсией (единичным дополнением) маски подсети.
Разбиение на подсети (сабнеттинг) осуществляется путём включения части старших битов поля хоста в префикс сети и соответствующего изменения маски подсети, в результате чего исходная сеть разбивается на более мелкие подсети. Например, если добавить два бита к префиксу, то из одной сети получаем четыре подсети — каждая вчетверо меньше исходной.
| Двоичная форма | Десятичная запись | |
|---|---|---|
| IP-адрес | 11000000.00000000.00000010.10000010
|
192.0.2.130 |
| Маска подсети | 11111111.11111111.11111111.11000000
|
255.255.255.192 |
| Префикс сети | 11000000.00000000.00000010.10000000
|
192.0.2.128 |
| Идентификатор хоста | 00000000.00000000.00000000.00000010
|
0.0.0.2 |
В IPv4 выделяются специальные форматы адресов для поддержки специфических функций. Первая и последняя подсети, полученные разбиением большей сети, традиционно имели особое назначение и ранее использовались по-особому[7]. Кроме того, последний адрес внутри любой подсети (адрес «все единицы» в поле хоста) используется для широковещательной рассылки (broadcast) по всей подсети.
Первая подсеть при разбиении имеет в позиции битов подсети все нули и называется нулевой подсетью (subnet zero)[8]. Последняя подсеть состоит исключительно из единичных битов в позиции битов подсети и называется всеединичной подсетью (all-ones subnet)[8].
Ранее рабочее использование этих двух подсетей IETF рекомендовала избегать. Если длина префикса недоступна, адрес всей сети и первой подсети совпадают, что может вызывать путаницу. Аналогично возможна путаница вследствие совпадения адреса трансляции и адреса последней подсети. Поэтому на публичных сетях рекомендовалось резервировать подсети с нулём и единицами в поле подсети[9], что уменьшало количество доступных подсетей на две для каждой операции разбиения. Со временем эта неэффективность была устранена; практика запрещения использования нулевой и всеединичной подсети объявлена устаревшей в 1995 году и теперь актуальна только для устаревшего оборудования[10]. Позднее самому документу RFC 1878 был присвоен статус «Исторический»[11].
Хотя значения адресов с "все нули" и "все единицы" в поле хоста резервируются как сетевой адрес подсети и ее широковещательный адрес соответственно, при использовании CIDR все подсети становятся доступными для использования. Например, сеть с префиксом /24 можно разделить на 16 корректных подсетей размером /28 каждая. Адрес трансляции (например, *.15, *.31 и т. д.) уменьшает только число доступных хостов в конкретной подсети.
Количество доступных подсетей и хостов легко вычисляется. Например, сеть можно разбить на четыре подсети . Жирным выделены два бита, добавляемые к сетевому номеру:
| Сеть | Сеть (двоично) | Широковещательный адрес |
|---|---|---|
| 192.168.5.0/26 | 11000000.10101000.00000101.00000000
|
192.168.5.63 |
| 192.168.5.64/26 | 11000000.10101000.00000101.01000000
|
192.168.5.127 |
| 192.168.5.128/26 | 11000000.10101000.00000101.10000000
|
192.168.5.191 |
| 192.168.5.192/26 | 11000000.10101000.00000101.11000000
|
192.168.5.255 |
Оставшиеся после выделения битов подсети используются для адресации хостов. В данном примере маска состоит из 26 бит (255.255.255.192), оставляя 6 бит для идентификатора хоста, то есть 62 возможных хоста (26−2).
В общем случае число возможных хостов в подсети — 2h−2, где h — число бит поля хоста; а число подсетей — 2n, где n — битов в сетевом префиксе.
Исключение составляет маска из 31 бита[12], где идентификатор хоста состоит из одного бита, и возможны только два допустимых адреса. Этот документ имеет статус «Предлагаемый стандарт» (Proposed Standard)[12]. Обычно такие подсети применяются для точка-точка соединений, и отдельное выделение адресов сети и трансляции не требуется.
| Маска | IP-адреса | Хосты | Маска подсети |
|---|---|---|---|
| 2 | 2 | ||
| 4 | 2 | ||
| 8 | 6 | ||
| 16 | 14 | ||
| 32 | 30 | ||
| 64 | 62 | ||
| 128 | 126 | ||
| 256 | 254 | ||
| 512 | 510 | ||
| 1024 | 1022 | ||
| 2048 | 2046 | ||
| 4096 | 4094 | ||
| 8192 | 8190 | ||
| 16384 | 16382 | ||
| 32768 | 32766 | ||
| 65536 | 65534 |
Протокол IPv6
Архитектура адресного пространства IPv6 кардинально отличается от IPv4. Главная причина разбиения на подсети в IPv4 — экономно использовать сравнительно небольшой адресный диапазон, особенно в корпоративных сетях. В IPv6 этот фактор неактуален, поскольку пространство адресации настолько велико, что ограничения отсутствуют.
Как и в IPv4, разбиение на подсети в IPv6 строится на концепциях VLSM (маски переменной длины) и методологии CIDR. Оно используется для маршрутизации как между глобальными областями, так и внутри локальных сетей клиентов, а также в инфраструктуре сети Интернет в целом.
Стандартной практикой для любой конечной подсети (например, LAN) является использование префикса /64[13]. Это связано с требованием механизма автоматической конфигурации адресов (SLAAC), который использует 64 бита для формирования идентификатора интерфейса[13]. Для двухточечных соединений (point-to-point), например, между маршрутизаторами, лучшей практикой (BCP 198), согласно RFC 7608, является использование префикса /127[14]. Такой подход экономит адресное пространство и защищает от атак на исчерпание кэша соседей, в отличие от устаревшей практики использования /64 для таких каналов[15].
В IPv6 отсутствуют широковещательные адреса (broadcast) и адреса сети в том виде, как они существуют в IPv4. Однако некоторые адреса зарезервированы. Согласно RFC 4291, адрес с нулевым идентификатором интерфейса (например, 2001:db8:1:: в подсети /64) является зарезервированным anycast-адресом маршрутизатора подсети (Subnet-Router anycast address)[16]. Пакет, отправленный на этот адрес, доставляется ближайшему маршрутизатору в данной подсети. Этот адрес является обязательным для всех маршрутизаторов и не может быть присвоен отдельному хосту[16].
Рекомендации по выделению префиксов конечным пользователям (сайтам) изменились со временем. Хотя первоначально стандарт RFC 3177 предлагал выделять /48 каждому сайту, более гибкий подход, изложенный в RFC 6177 (BCP 157), стал текущей практикой[17]. Современные рекомендации[15]:
- /48 — для крупных организаций, что позволяет создать 65 536 подсетей /64.
- /56 — стандартный размер для домашних пользователей и малого бизнеса, предоставляющий 256 подсетей /64.
Выделение единственного префикса /64 конечному сайту считается ошибкой, так как это лишает пользователя возможности создавать собственные подсети (например, для гостевой сети)[18]. Также рекомендуется, чтобы выделяемые префиксы были постоянными (persistent), а не динамическими, для стабильной работы сетевых сервисов[15].
См. также
Примечания
Литература
- Blank, Andrew G. TCP/IP Foundations. — Wiley, 2006. — ISBN 9780782151138.
- Lammle, Todd. CCNA Cisco Certified Network Associate Study Guide 5th Edition. — San Francisco, London : Sybex, 2005.
- Groth, David. Network + Study Guide / David Groth, Toby Skandier. — 4-е. — San Francisco, London : Wiley, 2005.


