Организация IP-подсетей

Robert Hart

Перевод: Александр Ермолаев, ASPLinux

Аннотация

В этом документе содержится информация о том, как и почему организуются IP-подсети, которые используют отдельную область IP-адресов класса A, B или C, для правильного функционирования нескольких связанных подсетей.


Содержание
Авторское право
Введение
Анатомия IP адресов
Что такое подсети?
Почему организуются подсети?
Как организуются подсети
Маршрутизация

Авторское право

Этот документ распространяется в соответствии с GNU Public License (GPL).

Этот документ непосредственно поддерживается InterWeft IT Consultants (Мельбурн, Австралия).

Последняя версия этого документа доступна на сайте InterWeft InterWeft IT Consultants и The Linux Documentation Project.


Авторские права

Авторские права на русский перевод этого текста принадлежат ╘ 2000 ASPLinux Все права зарезервированы.

Этот документ является частью проекта Linux HOWTO.

Авторские права на документы Linux HOWTO принадлежат их авторам, если явно не указано иное. Документы Linux HOWTO, а также их переводы, могут быть воспроизведены и распространены полностью или частично на любом носителе, физическом или электронном, при условии сохранения этой заметки об авторских правах на всех копиях. Коммерческое распространение разрешается и поощряется; но, так или иначе, автор текста и автор перевода желали бы знать о таких дистрибутивах.

Все переводы и производные работы, выполненные по документам Linux HOWTO, должны сопровождаться этой заметкой об авторских правах. Это делается в целях предотвращения случаев наложения дополнительных ограничений на распространение документов HOWTO. Исключения могут составить случаи получения специального разрешения у координатора Linux HOWTO, с которым можно связаться по адресу приведенному ниже.

Мы бы хотели распространить эту информацию по всем возможным каналам. Но при этом сохранить авторские права и быть уведомленными о всех планах распространения HOWTO. Если у вас возникли вопросы, пожалуйста, обратитесь к координатору проекта Linux HOWTO по электронной почте: или к координатору русского перевода Linux HOWTO компании ASPLinux по адресу


Введение

В этом документе описывается разбивка единственного IP сетевого адреса так, чтобы он мог использоваться на нескольких различных сетях.

В этом документе, в основном, содержится материал по сетевым адресам класса C, но принципы применимы и к сетям класса A и B.


Другие источники информации

Имеется ряд других источников информации, которые уместны для более детального изучения. Рекомендуемые автором:


Анатомия IP адресов

Перед погружением в изучение организации подсетей, мы должны усвоить основы IP-адресов.


IP адреса характеризуют сетевые соединения, а НЕ компьютеры!

Прежде всего, выясним основную причину недоразумения - IP адреса не назначаются на компьютеры. IP адреса назначены на сетевые интерфейсы на компьютерах.

А что стоит за этим?

На настоящий момент, много (если не большинство) компьютеров в IP-сети обладают единственным сетевым интерфейсом (и имеют, как следствие, единственный IP адрес). Компьютеры (и другие устройства) могут иметь несколько (если не много) сетевых интерфейсов - и каждый интерфейс будет иметь свой IP адрес.

Так, устройство с 6 работающими интерфейсами (например, маршрутизатор) будет иметь 6 IP адресов - по одному на каждую сеть, с которой он соединен.

Несмотря на это, большинство людей ссылаются на адреса машин, когда это касается IP адреса. Только помните, что это упрощенная форма для IP-адреса конкретного устройства на этом компьютере. Много (если не большая часть) устройств в Internet имеет только один интерфейс и, таким образом, единственный IP адрес.


IP-адреса как "четверка чисел разделенные точками"

В текущей (IPv4) реализации IP адресов, IP адрес состоит из 4-х (8-битовых) байтов - он представляет из себя 32 бита доступной информации. Это приводит к числам, которые являются довольно большими (даже когда написано в представлении десятичных чисел). Поэтому для удобства (и по организационным причинам) IP адреса обычно записываются в виде четырех чисел, разделенных точками. IP адрес

	192.168.1.24

- пример этого - 4 (десятичных) числа разделенные (.) точками.

Поскольку каждое из этих чисел - десятичное представление байта (8 бит), каждое из них может принимать значения из диапазона от 0 до 255 (всего 256 уникальных значений, включая ноль).

Кроме того, часть IP-адреса компьютера определяет сеть, в которой находится данный компьютер, оставшиеся 'биты' IP адреса определяют непосредственно компьютер (опс - сетевой интерфейс). Биты IP адреса определяют, к какому 'классу' относится сеть.


Классы сетей

Имеются три класса IP адресов

  • IP адрес сети класса A использует крайние левые 8 битов (первый байт) для идентификации сети, оставшиеся 24 бита (три байта) идентифицируют сетевые интерфейсы компьютера в сети. Адреса класса A всегда имеют крайний левый бит, равный нулю - поэтому первый байт адреса принимает значения от 0 до 127. Так доступно максимум 128 номеров для сетей класса A, с каждым, содержащим до 33,554,430 возможных интерфейсов. Однако, сети 0.0.0.0 (известный как заданный по умолчанию маршрут) и 127.0.0.0 (зарезервированы для организации обратной связи (loopback)) имеют специальные предназначения и не доступны для использования, чтобы идентифицировать сети. Соответственно, могут существовать только 126 номеров для сети класса A.

  • IP адрес сети класса B использует крайние левые 16 битов (первые 2 байта) для идентификации сети, оставшиеся 16 бит идентифицируют сетевые интерфейсы компьютера в сети. Адреса класса B всегда имеют крайние левые два бита, установленные в 1 0. Сети класса B имеют диапазон от 128 до 191 для первого байта, каждая сеть может содержать до 32,766 возможных интерфейсов.

  • IP адрес сети класса C использует крайние левые 24 бита для идентификации сети, оставшиеся 8 бит идентифицируют сетевые интерфейсы компьютера в сети. Адрес сети класса C всегда имеет крайние левые 3 бита, установленные в 1 1 0 или диапазон от 192 до 255 для крайнего левого байта. Имеется, таким образом, 4,194,303 номеров, доступных для идентификации сети класса C, каждая может содержать до 254 сетевых интерфейса. (однако, сети класса C с первым байтом, большим, чем 223, зарезервированы и недоступны для использования).

Резюме:

Класс сети   Пригодный для использования диапазон
                A                 1 - 126
                B               128 - 191
                C               192 - 254

Имеются также специальные адреса, которые зарезервированы для 'несвязанных' сетей - которые является сетями, использующими IP, но не связаны с Internet, Эти адреса:

  • Одна сеть класса A 10.0.0.0

  • 16 сетей класса B 172.16.0.0 - 172.31.0.0

  • 256 сетей класса C 192.168.0.0 - 192.168.255.0

Вы заметите, что в данном документе используются именно эти сочетания для того, чтобы не пересечься с "настоящими" сетями и машинами.


Сетевые адреса, адреса интерфейсов и широковещательные адреса

IP адреса могут иметь три возможных значения:

  • адрес IP сети (группа IP устройств, совместно использующих доступ к среде передачи - все находятся на том же самом сегменте Ethernet). Если в поле номера сети биты установлены в 0, то по умолчанию считается, что этот узел принадлежит той же самой сети, что и узел, с которого отправлен пакет;

  • широковещательный адрес IP сети (сообщение с таким адресом назначения должно рассылаться всем узлам, находящимся в той же сети, что и источник этого пакета). Все разряды IP адреса установлены в 1.

  • адрес интерфейса (типа платы Ethernet или PPP интерфейс на компьютере, маршрутизаторе, сервере печати и т.д.).Эти адреса могут иметь любое значение в битах поля узла, исключая все нули или все единицы, т.к. если будут все нули - адрес сети, все единицы - широковещательный адрес.

Резюме:

Для сети класса A...
(один байт - поле сети, следующие за ним - номер хоста)

        10.0.0.0 адрес сети класса A, потому что все биты адреса узла равны 0
        10.0.1.0 адрес узла этой сети
        10.255.255.255 широковещательный адрес этой сети, потому что все биты адреса
                       узла равны 1

Для сети класса B...
(два байта - поле сети, следующие за ним - номер хоста)

        172.17.0.0 адрес сети класса B
        172.17.0.1 адрес узла этой сети
        172.17.255.255 широковещательный адрес этой сети

Для сети класса C...
(три байта - поле сети, следующие за ним - номер хоста)

        192.168.3.0 адрес сети класса C
        192.168.3.42 адрес узла этой сети
        192.168.3.255 широковещательный адрес этой сети

Почти все сетевые адреса, остающиеся доступными для распределения в настоящее время - адреса класса C.


Сетевая маска

Сетевая маска более правильно называется маской подсети. Однако, это, вообще, упоминается как сетевая маска.

Сетевая маска и ее значения показывают, как IP адреса интерпретируются локально на сегменте сети, поскольку это определяет то, как происходит организация подсетей.

Стандартная маска (под-) сети - содержит единицы в разрядах поля сети и нули в остальных разрядах. Это означает, что стандартные сетевые маски для трех классов сетей выглядят так:

  • маска для сети класса А: 255.0.0.0

  • маска для сети класса B: 255.255.0.0

  • маска для сети класса C: 255.255.255.0

Есть две важные вещи относительно сетевой маски, которые нужно помнить:

  • Сетевая маска воздействует только локально (где локальный означает - на этом специфическом сетевом сегменте);

  • Сетевая маска - это не IP адрес - она используется для того, чтобы изменить интерпретацию локальных IP адресов.


Что такое подсети?

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

Важное слово здесь - локальное: люди обеспокоены, чтобы деление на локальные сети оставляло все в том виде, как было - сеть оставалась отдельной. Важно, что организация подсетей имеет локальную конфигурацию, она невидима для остального мира.


Почему организуются подсети?

Причины запоздалой организации подсетей относятся к ранним техническим требованиям IP, где лишь несколько сайтов находились в сетях класса A, которые предоставляли доступ миллионам компьютеров.

Это вызвало очевидные проблемы с огромным трафиком и администрированием, если все компьютеры на большом сайте должны быть связаны с той же самой сетью: попытка управлять таким огромным чудовищем была бы кошмаром и сеть бы терпела крах (конечно почти) от загрузки собственным трафиком.

Введите организацию подсетей: адрес сети класса A может быть разбит на несколько (если не много) отдельных сетей. Управлять каждой отдельной сетью значительно проще.

Это позволяет устанавливать и управлять небольшими сетями - весьма возможно использовать различные технологии организации сетей. Помните, вы не можете смешивать Ethernet, Token Ring, FDDI, ATM и т.п. на одной физической сети - однако они могут быть связаны!

Другие причины для организации подсетей:


Как организуются подсети

После того, как вы определите, что нуждаетесь в сетевом адресе, вам надо узнать, как это сделать? Далее идет краткий обзор шагов, которые будут объясняться ниже в деталях:

В качестве примера предположим, что мы - организуем подсеть класса C с номером: 192.168.1.0

Это предусматривает максимум 254 связанных интерфейсов (хостов), плюс обязательный сетевой номер (192.168.1.0) и широковещательный адрес (192.168.1.255).


Установка физической связанности

Чтобы выполнить физическое размещение, вы должны будете установить правильную инфраструктуру для всех устройств, которые хотите связать.

Вам будет также нужен механизм, чтобы связать различные сегменты вместе (маршрутизаторы, конверторы, хабы и т.д.).

Детальное обсуждение этого здесь невозможно. Если вам нужна справка, имеются сетевые консультанты по проектированию/установке сетей, которые обеспечивают это обслуживание. Бесплатный совет доступен также в ряде конференций (например, comp.os.linux.networking).


Установление размеров подсети

Каждая сеть имеет два адреса, не используемых для сетевых интерфейсов (компьютеров) - сетевой номер сети и широковещательный адрес. Когда вы организуете подсеть, каждая из них требует собственный, уникальный IP адрес и широковещательный адрес, и они должны быть правильными внутри диапазона адресов сети, которую вы организуете.

Таким образом, разделение сети на две подсети приводит к тому, что образуются два адреса сети и два широковещательных адреса - увеличивается число "неиспользуемых" адресов интерфейсов; создание 4-х подсетей приведет к образованию 8-и неиспользуемых адресов интерфейсов и т.д.

Фактически, самая маленькая пригодная для использования подсеть состоит из 4 IP адресов:

  • Два используются для интерфейсов - один для маршрутизатора в этой сети, другой для единственной машины в этой сети.

  • Один адрес сети.

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

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

В принципе, вы можете разделить ваш сетевой номер на 2^n (где n на единицу меньше, чем число битов поля машины в вашем сетевом адресе), получаем одинаковые размеры подсетей (однако, вы можете делить подсети на подсети, и/или объединять их).

Так будьте реалистом, относительно разработки вашей сети - вам необходимо минимальное число отдельных локальных сетей, которые является совместимыми по управлению, физически, по оборудованию и безопасности!


Вычисление сетевой маски и сетевых адресов

Сетевая маска позволяет разделить сеть на несколько подсетей.

Сетевая маска для сети, не разделенной на подсети - это просто четверка чисел, которая имеет все биты в полях сети, установленные в '1' и все биты машины, установленные в '0'.

Таким образом, для трех классов сетей стандартные сетевые маски выглядят следующим образом:

  • Класс A (8 сетевых битов) : 255.0.0.0

  • Класс B (16 сетевых бита): 255.255.0.0

  • Класс C (24 сетевых бита): 255.255.255.0

Способ организации подсетей заимствует один или более из доступных битов номера хоста и заставляет интерпретировать эти заимствованные биты, как часть сетевых битов. Таким образом, чтобы получить возможность использовать, вместо одного номера подсети, два, мы должны заимствовать один бит машины, установив его (крайний левый) в сетевой маске в '1'.

Для адресов сети класса C это привело бы к маске вида 11111111.11111111.11111111.10000000 или 255.255.255.128

Для нашей сети класса C с сетевым номером 192.168.1.0, есть несколько случаев:

            Число
Число       машин
подсетей    на сеть   Сетевая маска
2            126        255.255.255.128 (11111111.11111111.11111111.10000000)
4             62        255.255.255.192 (11111111.11111111.11111111.11000000)
8             30        255.255.255.224 (11111111.11111111.11111111.11100000)
16            14        255.255.255.240 (11111111.11111111.11111111.11110000)
32             6        255.255.255.248 (11111111.11111111.11111111.11111000)
64             2        255.255.255.252 (11111111.11111111.11111111.11111100)

В принципе, нет абсолютно никакой причины следовать вышеупомянутым способам организации подсетей, где сетевые биты добавлены от старшего до младшего бита хоста. Однако, если вы не выбираете этот способ, то в результате IP адреса будут идти в очень странной последовательности! Но в результате, решение, к какой подсети принадлежит IP адрес, получается чрезвычайно трудным для нас (людей), поскольку мы не слишком хорошо считаем в двоичной арифметике (с другой стороны, компьютеры, с равным хладнокровием, будут использовать любую схему, которую вы им предложите).

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

Сетевая маска  Подсетей  Адр.сети  Шир.вещат.  МинIP  МаксIP  Хостов  Всего хостов
--------------------------------------------------------------------------------
      128          2         0        127         1    126      126
                           128        255       129    254      126     252

      192          4         0         63         1     62       62
                            64        127        65    126       62
                           128        191       129    190       62
                           192        255       193    254       62     248

      224          8         0         31         1     30       30
                            32         63        33     62       30
                            64         95        65     94       30
                            96        127        97    126       30
                           128        159       129    158       30
                           160        191       161    190       30
                           192        223       193    222       30
                           224        255       225    254       30     240

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

С этой информацией вы теперь способны назначить адреса машин, сетевые адреса и сетевые маски.


Маршрутизация

Если вы используете Linux машину с двумя сетевыми картами, чтобы установить маршрут между двумя (или более) подсетями, вам нужно иметь ядро, скомпилированное с поддержкой пересылки IP-пакетов (Forwarding). Сделайте следущее:

	cat /proc/ksyms | grep ip_forward

Вы должны получить, что-то вроде...
00141364 ip_forward_Rf71ac834

Если не так, тогда пересылка IP-пакетов не включена в ядро, и вам нужно перекомпилировать и установить новое ядро.

Для примера, позвольте предположить, что вы решили разделить вашу сеть класса C с адресом IP 192.168.1.0 на 4 подсети (в каждой пригодно для использования 62 IP адреса). Однако, две из этих подсетей объединяются в большую сеть, давая в общем три физических сети.

Network		Broadcast	Netmask			Hosts
192.168.1.0	192.168.1.63	255.255.255.192		62
192.168.1.64	192.168.1.127	255.255.255.192		62
182.168.1.128	192.168.1.255	255.255.255.126		124 (см. примечание)

Примечание: последняя сеть имеет только 124 сетевых адреса (не 126, как ожидалось бы от сетевой маски) и является сетью из двух подсетей. Главные компьютеры на других двух сетях интерпретируют адрес 192.168.1.192 как сетевой адрес 'несуществующей' подсети. Подобно они будут интерпретировать 192.168.1.191 как широковещательный адрес 'несуществующей' подсети.

Так, если вы используете 192.168.1.191 или 192 как адреса хостов в третьей подсети, тогда компьютеры двух малых подсетей не смогут связаться с ними.

Это иллюстрирует важный пункт при работе с подсетями - пригодные для использования адреса определяются САМОЙ МАЛОЙ подсетью в том адресном пространстве.


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

Позвольте нам предположить, что компьютер с Linux действует, как маршрутизатор для этой сети. Он будет иметь три сетевых карты к локальным сетям и, возможно, четвертый интерфейс для связи с Internet (который был бы шлюзом по умолчанию).

Пусть компьютер с Linux использует самый первый доступный IP адрес в каждой подсети. Конфигурация сетевых карт будет следующей:

Interface	IP Address	Netmask
eth0		192.168.1.1	255.255.255.192
eth1		192.168.1.65	255.255.255.192
eth2		192.168.1.129	255.255.255.128

Таблица маршрутизации при данной конфигурации будет такой

Destination     Gateway         Genmask         Iface
192.168.1.0	0.0.0.0		255.255.255.192	eth0
192.168.1.64	0.0.0.0		255.255.255.192	eth1
192.168.1.128	0.0.0.0		255.255.255.128	eth2

На каждой из подсетей главные компьютеры были бы конфигурированы с их собственным IP адресом и сетевой маской (соответствующий специфической сети). Каждый главный компьютер объявил бы Linux PC своим шлюзом/маршрутизатором, определяя IP адрес маршрутизатора для его сетевой карты на той части сети.

Robert Hart Мельбурн, Австралия Март 1997.