Подсеть

Подсеть (также подсеть сети или субсеть) — это логическое подразделение 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.