Новости технологий Как создать IP-адрес с учетом структуры и перспектив роста организации
Сегодня уже почти все знают, что для подключения к Internet сначала нужно получить IP-адрес с помощью InterNIC или у провайдера услуг Internet.
Однако многие сетевые администраторы обнаруживают, что присвоенные их сетям IP-адреса либо слишком велики, либо маловаты.
Давайте поговорим о формировании подсетей, то есть о процессе дробления одного сетевого IP-адреса на несколько меньших подсетей, каждая из которых имеет свой собственный набор уникальных IP-адресов.
Как подобрать адрес по размеру
Цель формирования подсетей заключается в том, чтобы максимально эффективно использовать пространство IP-адресов. Подсети позволяют сетевым администраторам “раскроить” адресное пространство, соответствующее сетевому IP-адресу, с учетом фактической инфраструктуры организации.
Использование третьего байта адреса
сети класса в качестве
номера подсети
Допустим, что вы планируете установить 10 подсетей по 275 хост-систем в каждой (плюс некоторый запас для роста). Сетевой адрес класса B, позволяющий сетевому администратору присвоить адреса 65534 хост-системам, будет слишком велик, а сетевой адрес класса C, дающий всего 254 адреса для хост-систем, напротив, окажется слишком мал. (Адрес класса A предоставляет где-то около 16 миллионов адресов.)
В такой ситуации вам, вероятно, лучше попросить адрес класса B и разбить его на несколько меньших подсетей, соответствующих вашим требованиям.
Подсети можно описать, потому что IP-маршрутизатор обычно находится между локальными сетями и Internet. Маршрутизатору задается маска (шаблон), с помощью которой он дешифрует используемую схему адресации подсетей (см. врезку).
Каждый маршрутизатор передает соседним маршрутизаторам номера IP-сетей, которых можно достичь через него. Маршрутизаторы не сообщают о подсетях, они лишь говорят другим маршрутизаторам о “целых” сетях класса B или C.
Байт задает номер подсети
IP-адрес можно разделить для формирования подсети либо по границе байта, либо по границе бита. Выбор одного из этих вариантов зависит от того, насколько эффективно вам нужно управлять своим адресным пространством.
Первые два байта адреса класса B содержат адрес сети, а последние два - адреса хост-систем. Допустим, что адрес вашей сети класса B выглядит так: 150.100.0.0. Вы могли бы присвоить вашим машинам адреса от 150.100.0.1 и подряд до 150.100.255.254. Это даст в сумме 65534 адресов хост-систем, то есть все адресное пространство сети класса B.
Адреса хост-систем начинаются с 150.100.0.1. (Первый допустимый адрес из диапазона адресов хост-систем, 150.100.0.0, - это номер самой сети, и его нельзя одновременно использовать и как адрес хост-системы.) Последний допустимый адрес, 150.100.255.255, зарезервирован в качестве широковещательного адреса всех хост-систем данной сети. Этот же принцип резервирования первого и последнего номеров сохранится и при разбиении сети на подсети.
Однако, использовав для задания номера хост-системы вместо третьего и четвертого байтов только последний (четвертый) байт, мы можем разбить адресное пространство сети класса B, например, на 100 меньших сетей, содержащих примерно по 50 хост-систем.
Затем, вместо того чтобы использовать третий байт для нумерации большего числа хост-систем, мы будем использовать его для обозначения номера подсети; при этом подсетям будут присвоены адреса: 150.100.1.0, 150.100.2.0, 150.100.3.0 и так далее до последнего допустимого адреса подсети, а именно 150.100.255.0.
Другими словами, первая хост-система первой подсети будет иметь адрес 150.100.1.1, а последняя хост-система первой подсети - 150.100.1.254. Первая хост-система второй подсети получит адрес 150.100.2.1, а вторая хост-система второй подсети - 150.100.2.254.
Такую схему можно реализовать для всех 255 подсетей, однако число используемых подсетей может быть и меньше.
Бит в бит
Разбиение на подсети по границе байта просто и прямолинейно. Посмотрев на третий байт адреса хост-системы, можно сразу сказать, к какой подсети он относится.
Однако обладатели адреса класса B могут провести разбиение на подсети в середине байта, чтобы оставить запас для будущего роста сети. Рассмотрим, например, реализацию этой схемы с сетевым адресом класса B 150.100.0.0. Сетевой администратор может создать 50 сетей, каждая из которых будет содержать более 600 хост-систем, что намного больше лимита в 254 хост-системы, допустимого для схемы разбиения адреса на подсети по границе байта.
Альтернативную схему можно организовать следующим образом. Первые шесть из восьми битов третьего байта задействуются для обозначения номера подсети; это дает 64 подсети, в то время как нужно 50. (26=64, минимальная степень двойки, больше 50.)
Затем все 10 оставшихся свободными бит (два последних бита третьего байта плюс все восемь битов четвертого байта) будут использоваться для обозначения хост-систем. Это даст 1024 (210) допустимых адреса хост-систем, что более чем достаточно для подсетей с 600 узлами.
Двоичные разряды и кусочки
В этот момент нумерация подсетей становится запутанной, потому что нам приходится работать с двоичными номерами, а затем переводить их обратно в десятичное представление для получения адресов хост-систем и подсетей.
Объявления сетевых адресов
Поскольку значения первого и второго байтов (150.100) никогда не меняются, давайте сосредоточимся на битах третьего и четвертого байтов. Мы поставим пробел между шестым и седьмым битами третьего байта, чтобы отразить границу между адресами подсети и хост-системы:
000000 00.00000000 подсеть | хост-система.
Сначала мы пронумеруем подсети первыми шестью битами третьего байта, а затем пронумеруем хост-системы с помощью последних двух битов третьего и всех битов последнего байта. При этом двоичный номер первой хост-системы первой подсети будет выглядеть так:
000001 00.00000001,
а двоичный номер последней хост-системы первой подсети - вот так:
000001 11.11111110.
Чтобы получить десятичный IP-адрес, мы должны проигнорировать пробел между шестым и седьмым битами третьего байта и перевести двоичные числа, представляемые каждым восьмибитовым байтом, в десятичные, а затем подставить перед каждым адресом неизменные первый и второй байты.
Обратите внимание, что мы не переводим 10-разрядный сегмент адреса хост-системы обратно в десятичное число. Мы всегда работаем с восьмибитовыми байтами, независимо от того, между какими битами мы проводим границу адресов подсети и хост-системы, потому что никакие десятичные компоненты IP-адреса не должны превышать 255.
Таким образом, IP-адрес первой хост-системы первой подсети окажется равным 150.100.4.1, а IP-адрес последней хост-системы первой подсети - 150.100.7.254 (адрес 255, как и раньше, зарезервирован для широковещательной адресации).
Двоичный номер первой хост-системы второй подсети равен:
000010 00.00000001,
а номер последней хост-системы второй подсети:
000010 11.11111110.
Если перевести каждый полный восьмибитовый байт обратно в десятичную форму, то окажется, что IP-адрес первой хост-системы второй подсети равен 150.100.8.1, а IP-адрес последней хост-системы второй подсети - 150.100.11.254.
Редукция байта
Заметьте, что для нумерации подсетей мы используем шесть битов, которые представляют номер подсети, как если бы они образовывали целый байт, что на самом деле не так. Другими словами, нумерация подсетей производится обычными двоичными числами, но в нашем примере мы работаем только с первыми шестью битами третьего байта, а не с целым байтом. Однако такая нумерация пропадает, когда мы переходим обратно к десятичному представлению каждого байта IP-адреса.
Перевод десятичных адресов
подсетей в двоичную форму
В завершение укажем, что адрес первой хост-системы последней подсети в нашей схеме с границей между шестым и седьмым битами будет выглядеть так:
111111 00.00000001,
а адрес последней хост-системы последней подсети - вот так:
111111 11.11111110.
Переведя эти номера из двоичного представления в десятичное, мы получим, что адрес первой хост-системы последней подсети есть 150.100.252.1, а адрес последней хост-системы последней подсети - 150.100.255.254.
Заметьте, что если граница номера подсети проходит не по границе целого байта, то определить номер подсети какой-либо хост-системы, зная только значение третьего байта ее адреса, невозможно. Вместо этого каждая подсеть занимает диапазон адресов и не определяется значением какого-либо одного байта.
Уильям Датчер
Маскирование маршрутизатора
По умолчанию маршрутизаторы полагают, что никакого деления на подсети нет, то есть что схема адресации сети имеет стандартную структуру IP-адресации. Таким образом, если вы создадите подсети на основе сетевого IP-адреса, вашим маршрутизаторам необходимо знать, какие биты или байты указывают номер подсети.
Для каждого сетевого порта в маршрутизатор заносится специальный номер, называемый маской, который указывает, какие биты или байты используются для обозначения номера подсети. Фактически маска - это десятичное представление двоичного числа, которое имеет двоичную единицу в разрядах, используемых для обозначения номера сети.
Маска выглядит как IP-адрес, но в отличие от него представляет собой шаблон, налагаемый маршрутизатором на IP-адреса для дешифровки номера подсети.
Например, стандартная маска для адресов сети класса B выглядит так: 255.255.0.0. Первые два байта двоичного эквивалента этого числа содержат по восемь единиц, a вторые два - по восемь нулей. Два байта из единиц сообщают маршрутизатору, что первые два байта адреса содержат номер сети.
Каждая двоичная единица маски - это сигнал маршрутизатору о том, что соответствующий бит представляет собой часть номера сети, а нули указывают биты, образующие адрес хост-системы.
Таким образом, если маршрутизатор должен обслуживать сеть класса B, в которой первый, второй и третий байты указывают номер сети, то для его портов с подключенными к ним подсетями нужно задать маску 255.255.255.0. В двоичном представлении число 255 - это восемь единиц, так что все биты первого, второго и третьего байтов указывают номер (под)сети.
Такое же правило относится к маске для схемы адресации сети класса B, когда номер подсети задается группой битов, не образующих целый байт. Единицы в двоичном представлении маски указывают, какие биты используются для задания номера сети; в нашем примере маска будет выглядеть так: 255.255.252.0. Другими словами, число 252 (в двоичном представлении - 11111100) сообщает маршрутизатору о том, что первые шесть битов третьего байта используются для обозначения номера подсети.
Нарушение правил
Неустрашимые читатели документов об Internet из серии Request for Comments (RFC), несомненно, знакомы с документом RFC 791, в котором говорится, что адрес с нулевым номером подсети недопустим и, кроме того, хотя создавать подсеть с номером из всех единиц (255) допускается, это “настоятельно не рекомендуется”.
Чтобы не нарушить требования документа RFC 791, в нашем примере с сетью класса B с адресом 150.100.0.0 мы начали нумерацию подсетей с адреса 150.100.1.0. Однако некоторые сетевые администраторы могут захотеть использовать подсеть с нулевым номером, если, например, они имеют всего 3 бита на указание номера сети при том, что необходимо создать восемь подсетей.
Мы также проигнорировали рекомендацию RFC 791 и использовали подсеть с номером из всех единиц (150.100.255.0) в качестве последней возможной подсети, поскольку строгого запрета на это нет.
Некоторые маршрутизаторы, например выпускаемые фирмой Cisco Systems, позволяют использовать подсеть с нулевым номером, но только если маршрутизатор запрограммирован так, чтобы она распознавалась. Однако имейте в виду, что маршрутизаторы других поставщиков могут не допускать использования подсети с нулевым номером и, как следствие, вообще запрещать реализацию некоторых схем разбиения сети на подсети.
У. Д.