Мы заканчиваем изучение методов адресации в IP-сетях. Из прошлых статей мы с вами узнали о том, что такое доклассовый и классовый метод адресации в сетях. А кроме того, узнали много интересного об IP-адресах и работе компьютеров в сети. Сейчас же пришла пора рассмотреть еще один способ адресации — более «продвинутый», чем классовый метод.

Маски подсети

В целом классовый метод создания IP-адресов улучшил положение в адресном пространстве, однако основного своего назначения он так и не выполнил. Благодаря классовому методу удалось смягчить основные проблемы разделения адресного пространства на подсети, однако полностью их решить так и не удалось. В частности, вскоре стало ясно, что количества сетей, на которые можно разделить все адресное пространство с помощью классового метода, может оказаться недостаточным. Компьютерное сообщество опять стало поговаривать о нерациональном использовании адресного пространства IP-адресов. Например…

* Кто вообще выдумал отдать половину всего адресного пространства под адреса класса A, из которых можно создать только 126 сетей? И кроме того, ни один администратор в здравом уме даже подумать не посмеет о создании сети, содержащей несколько миллионов хостов. Да что там несколько миллионов хостов — даже тысяча хостов для одной сети, это что-то из ряда вон выходящее.

* Если вам нужно создать сеть, состоящую не более чем из 300 хостов, вам придется использовать адреса класса B. Опять-таки адресное пространство используется нерационально — вам нужна сеть только из 300 хостов, а вам предлагают сеть из 64 000 хостов.

* Точно то же относится и к адресам класса C. Как пример, вам нужно объединить между собой два маршрутизатора. Чтобы это сделать, необходимо создать между ними сеть, состоящую только из двух хостов. Итак, вам нужна сеть из двух хостов, а вам предлагают сеть класса C, которая может состоять из 254 хостов.

В общем, компьютерное сообщество опять начало поиски возможных решений проблемы. Требовалось такое решение, которое не только раз и навсегда устранило бы основную проблему деления адресного пространства (нерациональное использование), но и было совместимо с используемым в данный момент классовым методом. И такое решение было найдено. В 1985 году новое решение было одобрено в RFC950, и получило название маски подсети.

Маска подсети не заменяет классовый метод адресации, а лишь дополняет его. На данный момент маску подсети поддерживают все современные операционные системы. Естественно, к этому числу относится и Windows Vista (если не изменяет память, маску подсети поддерживала еще Windows 2000).

Маска подсети — это 32-битное число, аналогичное по своей структуре IP-адресу. Сначала в маске подсети указываются единицы, а потом указываются нули. Сколько бит в маске подсети равно 1, столько бит IP-адреса будут использоваться для определения номера сети. Оставшиеся биты в IP-адресе будут использоваться для определения номера хоста. В качестве примера посмотрите на маску подсети, которая могла бы использоваться для определения IP-адресов, относящихся к тому или иному классу:

* Класс A: 11111111.00000000.00000000.00000000 или 255.0.0.0; * Класс B: 11111111.11111111.00000000.00000000 или 255.255.0.0; * Класс C: 11111111.11111111.11111111.00000000 или 255.255.255.0.

VLSM или Variable Length Subnet Mask (Маски подсети переменной длины) — это не что-то страшное, а лишь дополнение (или специальный метод использования) к технологии маски подсети. Дело в том, что не все администраторы понимают, что подсеть, полученная путем использования маски подсети, является такой же сетью, и к ней также можно дополнительно применять маску посети. То есть, имея один адрес сети, вы можете разделить его на набор сетей с разным количеством хостом, используя маски подсети разной длины. Чтобы напомнить об этом, и появился новый термин VLSM.

Пример: разбиение адреса сети

В качестве примера давайте попробуем решить такую задачку. Допустим, нам дали адрес сети класса A, например, 77.0.0.0. Неважно, как мы получили такой адрес, ценящийся на вес золота, но все-таки. У нас есть один адрес сети, но вот проблема — сетей-то у нас как минимум 5, каждая из которых состоит не более чем из 1000 узлов. На покупку еще 4 адресов сети денег нет =(, поэтому придется обойтись только имеющейся. Для решения подобных задач и предназначена технология маски подсети.

Итак, актив:

* адрес сети 77.0.0.0. * маска подсети для этого адреса: 11111111.00000000.00000000.0000000.

Нам нужно разделить сеть 77.0.0.0 на 5 отдельных подсетей. Чтобы сделать это, необходимо расширить количество битов IP-адреса, которые будут отвечать за определение номера сети. В нашем случае необходимо 3 дополнительных бита — с их помощью можно создать 8 подсетей (2 в 3 степени), чего вполне хватит для требующихся нам 5 подсетей, и еще останется место для расширения количества подсетей.

Добавив к номеру сети три дополнительных бита, мы получим следующую маску подсети: 11111111.11100000.00000000.00000000 или 255.224.0.0. C помощью такой маски подсети можно разбить один адрес сети на 5 подсетей, например, следующих:

x.010xxxxx.x.x = 77.64.0.0; x.100xxxxx.x.x = 77.128.0.0; x.101xxxxx.x.x = 77.160.0.0; x.110xxxxx.x.x = 77.192.0.0; x.111xxxxx.x.x = 77.224.0.0;

Однако как обстоят дела с хостами? Хватит ли нам того количества хостов, которое может использоваться в созданных адресах сети? Если нам нужно не более 1000 хостов в одной сети, то, конечно, хватит. Ведь под номер хоста отводится целых 21 бит, т.е. в наших сетях может быть более 2 000 000 с хвостиком хостов.

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

01001101.10100000.0.0 11111111.11100000.0.0

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

Первый: 01001101.10100000.0.00000001 или 77.160.0.1 Второй: 01001101.10100000.0.00000010 или 77.160.0.2 Последний: 01001101.10111111.11111111.11111110 или 77.191.255.254

Обратите внимание на последний адрес: 01001101.10111111.11111111.11111110. Как видите, в нем в номере хоста есть только один 0 (самый младший), все остальные биты установлены в единицу. Если мы установим и самый младший бит в единицу, то это уже будет не номер хоста, а широковещательный адрес в заданную сеть.

То есть, наша первая сеть может состоять из следующих хостов:

77.160.0.1 77.160.0.2 … 77.161.0.1 77.161.0.2 … 77.161.1.1 77.161.2.1 … 77.191.255.254

Аналогично определяются адреса хостов и для остальных сетей.

Маску подсети мы нашли. Возможные адреса хостов при использовании данной маски мы также нашли. Теперь осталось только сконфигурировать операционную систему Windows Vista для того, чтобы она стала использовать нашу маску подсети.

Для этого отобразите диалог Центр управления сетями и общим доступом (например, с помощью одноименного пункта контекстного меню значка сети в области уведомлений), после чего нажмите на ссылку Управление сетевыми подключениями, расположенную в левой панели диалога. Перед вами отобразится диалог Сетевые подключения, содержащий перечень сетевых адаптеров, модемов и др. сетевого оборудования, установленного на вашем компьютере. Выберите сетевой адаптер, для которого вы хотите указать новый IP-адрес, и в его контекстном меню выберите пункт Свойства. Перед вами появится диалог свойств выбранного адаптера, на вкладке Сеть которого есть список компонентов, которые используются подключением. В этом списке выделите пункт Протокол Интернета версии 4 (TCP/IP) и нажмите кнопку Свойства. Вот и все — перед вами появится диалог свойств (рис. 1), в котором нужно установить переключатель в положение Использовать следующий IP-адрес, после чего в поле IP-адрес ввести найденный нами IP-адрес, который будет присвоен данному компьютеру (ну, например, 77.160.0.1), а в поле Маска подсети — найденную нами маску (255.224.0.0).

Пример: определение сведений по IP и маске подсети

Помимо описанной выше задачи, существует еще одна задача — зная IP-адрес и маску подсети, определить используемый адрес сети, а также первый и последний IP-адрес компьютера в этой сети. Зная маску подсети, несложно выделить из IP-адреса адрес сети — достаточно в IP-адресе заменить нулями все биты, предназначенные для хранения номера хоста. А дальше см. пример выше.

Примерно такую же задачу необходимо решать и операционной системе, когда ей нужно отправить пакет определенному компьютеру. Как правило, перед тем, как отправить пакет компьютеру, операционная система имеет лишь следующие сведения: свой IP-адрес и свою маску подсети, а также IP-адрес удаленного компьютера. Первым делом она пытается определить адрес сети, в которой находится. Для этого она умножает по модулю два свой IP-адрес на свою маску подсети (если бит маски подсети равен 1, тогда возвращается бит, находящийся на том же месте в IP-адресе; если бит маски подсети равен 0, тогда возвращается 0). Получив таким образом номер своей сети, операционная система заносит его в память (для того, чтобы в дальнейшем его не пересчитывать).

Итак, операционная система знает свой IP-адрес, свою маску сети и адрес своей сети. Об удаленном же компьютере она знает только одно — его IP-адрес. Этого явно недостаточно для того, чтобы начать взаимодействие. Как минимум, операционной системе еще нужно узнать адрес сети, в которую входит удаленный компьютер. Чтобы это сделать, операционная система выполняет умножение по модулю два IP-адреса удаленного компьютера на свою маску подсети. Если в результате этого умножения получится значение, аналогичное адресу сети локального компьютера, значит локальный и удаленный компьютер находятся в одной и той же сети. А следовательно, для них используется одна и та же маска подсети.