Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

Системный администратор - секреты мастерства: основы IP-адресации


Здравствуйте, уважаемые коллеги!

Сегодня мы поговорим с вами об одном из трех китов, на которых держится сакральное знание о компьютерных сетях – об IP-адресации.
Это может показаться странным, но хотя про IP-адреса слышали (и использовали) практически все, не так уж и много народу свободно ориентируется в этом вопросе, особенно среди администраторов, делающих первые шаги. Попробую поправить это недоразумение и простыми словами объяснить, как же устроен IP-адрес, для чего нужна маска подсети и откуда вообще брать эти адреса. Также мы немного затронем понятие «шлюз по умолчанию» или default gateway.
Этот выпуск рассылки довольно объемный по содержанию, поэтому запаситесь терпением и постарайтесь читать его как можно внимательнее. Понимание данной темы очень важно для того, чтобы в дальнейшем избежать досадных ошибок.
Итак, как вы уже знаете из своего опыта, IP-адреса используются в компьютерных сетях для того, чтобы отличить один хост (компьютер или любое другое сетевое устройство) от другого и доставить данные именно тому, кому они предназначены. Если внимательно присмотреться к сети Интернет, мы увидим, что она состоит из огромного количества небольших по размеру подсетей, подключенных к другим сетям посредством маршрутизаторов – устройств, объединяющих несколько сетей и перенаправляющих данные из одной сети в другую. IP-адрес хоста содержит в себе информацию о том, в какой сети хост находится (адрес подсети), и какой номер он имеет внутри сети (номер хоста). На основе этой информации маршрутизаторы передают информацию от одного хоста к другому транзитом через другие сети. Этот процесс называется маршрутизацией IP-пакетов.

Существует два стандарта IP-адресации – IPv4 и IPv6. Второй пока не получил широкого распространения, поэтому мы не будет его рассматривать сегодня. В стандарте IPv4 IP-адрес записывается в виде чисел от 0 до 255, разделенных точками. Эти цифры принято называть октетами, т.к. каждое из них представлено 8 битами или 1 байтом, всего в IP-адресе 4 октета. В стандарте IPv6 принята другая запись.

Форма записи адреса в виде 4-х разделенных точкой чисел принята для удобства восприятия человеком. В действительности устройства воспринимают IP-адрес, как непрерывный набор из 32 нулей и единиц (если мы запишем все 4 числа в двоичном виде, то получим как раз 32 разряда). Возьмем IP-адрес 82.204.216.116, принадлежащий одному из реально работающих серверов в сети Интернет. В двоичном виде он будет выглядеть как 01010010110011001101100001110100. Попробуйте сами – переведите каждый из октетов (чисел IP-адреса, разделенных точкой) в двоичный код при помощи обычного Калькулятора Windows (программа calc.exe). Полученная последовательность, как уже говорилось, содержит в себе адрес сети (сетевая часть) и номера хоста, который ему присвоен в данной сети.

Сетевая часть IP-адреса однозначно описывает, к какой из этих подсетей относится нужный нам хост, а номер хоста однозначно определяет устройство внутри сети. Для того, чтобы разделить IP-адрес на данные составляющие, применяется параметр, называемый «маска подсети» (net mask). Маска определяет, сколько разрядов IP-адреса из имеющихся 32 занимает адрес сети, а сколько – номер хоста. Записывается она как НЕПРЕРЫВНАЯ последовательность единиц, за которой следует НЕПРЕРЫВНАЯ последовательность нулей. Сколько единиц – столько разрядов отдано под адрес сети, сколько нулей – столько разрядов занимает номер хоста. Перемножая оба 32 разрядных числа с помощью логической операции «И» (накладывая маску на адрес), мы получим адрес сети, а вычтя из IP-адреса адрес сети, получим номер хоста.
Нумерация хостов начинается с единицы, поэтому если после наложения маски на IP-адрес получается ноль, значит адрес, с которым мы работаем – адрес целой подсети, а адрес первого хоста в данной сети будет больше на единицу. Наибольший из возможных номеров хоста внутри сети называется широковещательным (broadcast). Он не может быть присвоен какому-либо хосту, и данные, отправленные на этот адрес, получают сразу все хосты в пределах подсети.

Возьмем наш адрес 82.204.216.116 и маску сети 255.255.255.240. Эти параметры были выданы провайдером при подключении сервера к Интернет. Найдем с помощью этих значений сети и номер хоста. Для этого сначала переведем все в двоичный вид. Если вы не умеете переводить числа из десятичной в двоичную форму, воспользуйтесь Калькулятором из набора штатных программ Windows (не забудьте переключить его из обычного режима в «инженерный», при помощи меню «Вид»)

82.204.216.116 =   01010010110011001101100001110100
255.255.255.240 = 11111111111111111111111111110000

Обратите внимание, маска всегда начинается с единицы,и последовательность единиц ВСЕГДА непрерывна!!! Например, маска не может иметь вид типа 255.255.240.255, т.к. в этом случае она выглядела бы как 11111111111111111111000011111111, т.е. в середине такой маски есть разрыв, которого быть не должно!

Определим адрес сети, к которой принадлежит сервер. Для этого произведем логическое умножение (функция «логическое И» или &) двух получившихся двоичных чисел. При логическом умножении 1 х 0 = 0, 0 х 0 = 0, 1 х 1 = 1. В итоге:
01010010110011001101100001110100
&
11111111111111111111111111110000
------------------------------------------------
01010010110011001101100001110000

Разделим получившуюся последовательность на октеты и переведем их в десятичный вид. Результат будет выглядеть как 82.204.216.112

Чтобы получить номер хоста, вычтем получившийся адрес сети из исходного IP-адреса хоста:
01010010110011001101100001110100
-
01010010110011001101100001110000
-------------------------------------------
00000000000000000000000000000100 или просто 0100, что в десятичном виде выглядит как 4

 Обратите внимание, что при маске 255.255.255.240 под номер хоста отведено всего 4 разряда. Это значит, что максимальное количество номеров хостов, которое мы можем получить в нашей сети– 16 шт. Число 16 – это 2 в четвертой степени. В четвертой - потому что у нас под номер хоста отдано 4 разряда. Если бы маска подсети была короче, и под хост оставалось бы 5 разрядов, то число номеров хостов было бы 2 в пятой степени (32 шт.).

Теперь самое время  вспомнить про то, что номер хоста не может быть нулевым, а наибольший номер хоста зарезервирован под broadcast-адрес. Таким образом, число хостов в сети сокращается на 2 шт и составляет 14 шт:
0001 (82.204.216.113) – заметьте, хоть номер хоста в сети равен 1, его IP-адрес имеет значение, равное адресу сети +1
0010 (82.204.216.114) – номер хоста равен 2, IP-адрес равен адресу сети +2
0011 (82.204.216.115) – номер хоста равен 3
0100 (82.204.216.116) – и так далее
0101 (82.204.216.117)
0110 (82.204.216.118)
0111 (82.204.216.119)
1000 (82.204.216.120)
1001 (82.204.216.121)
1010 (82.204.216.122)
1011 (82.204.216.123)
1100 (82.204.216.124)
1101 (82.204.216.125)
1110 (82.204.216.126)

IP-адрес 82.204.216.127 (сочетание 1111) зарезервирован под broadcast.
Теперь представим, что нам по каким-то причинам нужно поделить имеющуюся в нашем распоряжении сеть 82.204.216.112 / 28 на две части.

Кстати, вас не смущает то, как я записал адрес сети? Запись «/ 28» означает, что маска подсети состоит из 28 единиц (и соответственно, 4 нулей – маска-то 32-битная). Если мы запишем такую маску в привычном виде, то увидим, что она выглядит как 255.255.255.240. Запись числа единиц в маске через символ «/» часто встречается в документации, поэтому лучше запомнить, что она означает.

Представим, что Интернет-провайдер от своих щедрот разрешил нам использовать всю сеть 82.204.216.112 / 28 (маска 255.255.255.240). Допустим, нам нужно эту сеть поделить на 2 части. Зачем? Например, кому-то из клиентов нашей компании нужно выделить несколько IP-адресов, но застраховаться при этом от кривизны рук их системного администратора. Как уже было замечено выше, в нашем распоряжении есть сеть из 14 адресов от 82.204.216.113 до 82.204.216.126 – разделим ее пополам и отдадим часть адресов нашему клиенту.
Для создания новой подсети модифицируем известную нам маску, добавив дополнительную единицу, в результате маска обретет вид 255.255.255.248 (итого в маске станет 29 единиц: 11111111111111111111111111111000). Под описание номера хоста мы теперь сможем использовать только 3 разряда, зато у нас появится дополнительный бит, который будет описывать новую выделяемую нами подсеть.

Возьмем нашу подопытную сеть 82.204.216.112 / 28 и наложим на нее новую маску из 29 единиц:
01010010110011001101100001110000 (82.204.216.112)
&
11111111111111111111111111111000 (255.255.255.248)
------------------------------------------------
                                                         ^

Теперь четвертый справа разряд в адресе сети войдет в сетевую часть адреса и сможет участвовать в обозначении новой сети. Если мы изменим его с 0 на 1, у нас «родится» новая сеть 01010010110011001101100001110000. В привычном виде ее можно записать как 82.204.216.120 / 29 (переведите последний октет адреса в десятичный вид и убедитесь сами).
Таким образом, сеть 82.204.216.112 / 28 разделится на две сети: 82.204.216.112 / 29 и  82.204.216.120 / 29, в каждой из которых может быть уже только по 6 хостов (два в третьей степени – это 8, и 2 адреса мы присваивать хостам не можем):
001 (82.204.216.113 в сети 82.204.216.112 / 29 и 82.204.216.121 в сети 82.204.216.120 / 29)
010 (82.204.216.114 в первой и 82.204.216.122 во второй сети)
011 (82.204.216.115 и 82.204.216.123 соответственно)
100 (82.204.216.116 и 82.204.216.124)
101 (82.204.216.117 и 82.204.216.125)
110 (82.204.216.118 и 82.204.216.126)
Адреса 82.204.216.119 и 82.204.216.117 будут широковещетельными адресами в сетях 82.204.216.112 / 29 и  82.204.216.120 / 29 соответственно.

ВНИМАНИЕ: поскольку имевшаяся в нашем распоряжении сеть 82.204.216.112 / 28 теперь поделена на 2 части, мы теперь можем использовать для своих нужд не 14 адресов, как раньше, а только 6 (от 82.204.216.113 до 82.204.216.118)! Остальные адреса будут задействованы под новую сеть 82.204.216.120 / 29, отданную клиенту. При этом маска подсети для адресов в новой сети будет не 255.255.255.240, а 255.255.255.248.

Чтобы клиент, с которым вы делитесь своими адресами, мог воспользоваться выделенной ему подсетью 82.204.216.120 / 29, в сети 82.204.216.112 / 28, нам потребуется установить маршрутизатор, один из интерфейсов которого должен будет иметь адрес из сети 82.204.216.112 / 29, а другой – из сети 82.204.216.120 / 29. Этот маршрутизатор будет «шлюзом по умолчанию» (default gateway) для сети 82.204.216.120 / 29 в сеть 82.204.216.112 / 29.

Параметр «шлюз по умолчанию» или основной шлюз в настройках сетевой платы (сетевого интерфейса) – адрес хоста, который соединяет нашу сеть с остальным миром. Как он используется? Представьте себе, что вы отправляете данные на компьютер, который находится за пределами вашей подсети. Поскольку получатель находится непонятно где, за пределами известной сети, ваш хост «не знает», куда девать эти данные. Чтобы данные не пропали, отправитель передает их хосту, который указан в качестве основного шлюза, а тот в свою очередь отправляет в известную ему сеть или на хост, который является для него шлюзом по умолчанию - и так до тех пор, пока данные не дойдут до получателя.
Поясню на пальцах. Допустим, вам нужно передать записку Президенту Путину, но вы знаете только Васю, Петю и Коляна. Вася и Петя никого не знают, кроме вас, друг друга и Коляна, но зато Колян знаком с чиновниками из мэрии Москвы, господами Взяткиным и Гундосовым, которые, быть может, и знают Президента Путина. Так вот, Колян будет для вас «основным шлюзом». Он возьмет вашу записку и отнесет в мэрию. В мэрии выяснится, что Гундосов никого не знает, но зато Взяткин знаком со многими в Кремле. Взяткин станет для вашего друга Коляна «шлюзом», который передаст записку кому-то в Кремля. Так постепенно, от одного персонажа к другому, ваша записка доберется до главы государства, Президента Путина. Когда он напишет вам ответ, записка пойдет обратным путем, через тех же людей, пока не доберется до Коляна, который передаст ее вам.
Если вернуться к примеру с подсетью, которую мы отдали клиенту, то данные из сети 82.204.216.120 / 29 будут попадать через маршрутизатор в сеть 82.204.216.112 / 28, а оттуда – куда угодно, пока не доберутся до получателя. Ответы пойдут тем же путем, пока не доберутся до сети 82.204.216.112 / 28, откуда будут переправлены через маршрутизатор в сеть 82.204.216.120 / 29, принадлежащую клиенту.

В принципе, ваш клиент может самостоятельно поделить выданную ему сеть при помощи новой маски (например 255.255.255.252 – 30 единиц и 2 нуля в маске) еще на две части и отдать получившуюся подсеть какому-то из своих партнеров, но в каждой из таких двух подсетей будет всего 2 адреса.

Уф-ф-ф… Кажется, я вас немного загрузил! Если вы не совсем поняли, о чем шла речь в данной статье, пожалуйста, перечитайте ее заново. Понимание IP-адресации очень важно для работы с компьютерными сетями, поскольку позволяет избежать многих трудно диагностируемых ошибок. Сделайте паузу и перечитайте все еще раз – на свежую голову, а потом проделайте следующие упражнения:
Задача 1: Возьмите сеть 192.168.1.0 / 24 (маска 255.255.255.0). Разбейте ее на 2 равных части и напишите адреса получившихся сетей и количество адресов, доступных внутри каждой сети. Получившуюся сеть разбейте еще на 4 подсети.
Задача 2 (посложнее): возьмите сеть 10.10.0.0 / 15 и разбейте ее на 8 частей. Какое максимальное количество хостов может быть в каждой сети? Запишите результаты вашей работы.
Правильные ответы будут во внеочередном выпуске рассылки через два дня.

На сегодня это все. В следующем выпуске мы поговорим о реальных и «серых» IP-адресах, а также о технологии NAT, позволяющей подключать несколько компьютеров к сети Интернет, имея в своем распоряжении только один IP-адрес, выданный провайдером при подключении.

 

Искренне ваш,
Павел Медников


В избранное