понедельник, сентября 24, 2012

Ох уж эти маски подсети...


Наряду с терминами IP и MAC адрес, очень часто, в повседневной речи сетевиков проскакивает термин сетевая маска или маска подсети. Маска подсети является не менее важным параметром, который указывается при конфигурации самых различных сетей, поэтому важно знать и понимать ее смысл, а также способы ее использования.
Для начала отвлечемся от сетевых технологий и приведем следующий, пример из жизни. Все мы с вами живем в домах, кто то в больших, кто то в маленьких, но суть в том, что у каждого дома есть свой адрес, состоящий из  названия улицы и номера дома. Как легко заметить этот адрес состоит их двух частей. Первая часть адреса помогает определить улицу, на которой мы живем, а вторая уточняет полученную информацию и указывает на дом.  Каждая из частей адреса в отдельности не позволяет обнаружить наше место жительства, и только их сочетание позволяет нас найти. На письме части адреса разделяются между собой с помощью запятой (например, улица Ленина, дом 23).

Теперь вернемся в тему сетевых технологий. Точно также как и наш реальный географический адрес, IPадреса компьютера состоят из двух частей: адреса сети и адреса компьютера в данной сети. Роль разделяющей запятой в географическом адресе, в мире сетевых технологий выполняет маска подсети. Рассмотрим, как  это происходит. Пусть у нас есть IPадрес 172.20.20.20 и классическая маска подсети 255.255.255.0, переведем наш IPадрес и маску подсети в двоичный вид, получим IPадрес 10101100.00010100.00010100.00010100 и маску подсети 11111111.11111111.11111111.00000000, теперь последовательно умножим каждый разряд IP адреса на каждый разряд маски подсети (при этом помним, что 1*1=1, 1*0=0,0*1=0,0*0=0), в итоге получим10101100.00010100.00010100.00000000, переведем его в десятичный вид и получим 172.20.20.0 . Полученной адрес будет являться адресом сети. Если же мы умножим наш IP адрес компьютера на инвертированную сетевую маску 00000000.00000000.00000000.11111111 (поменяйте все знаки в исходной маске наоборот), то грубо говоря вы получите 20 – это число будет являться адресом компьютера в данной сети. Итого мы получили, что у компьютера с IPадресом 172.20.20.20 и маской 255.255.255.0, 172.20.20.0 – адрес сети, а 20 – адрес компьютера.
Использование маски подсети
Если сказать более простыми словами, то каждый символ двоичного представления IPадреса сопоставляется соответствующему символу двоичного представления маске подсети, те символы адреса, которые сопоставляются единицам маски подсети, образуют адрес сети, символы IPадреса сопоставляемые нулям маски подсети образуют адрес компьютера в сети.

Стоит отметить, что маска подсети может иметь не любой вид. В левой части маски должны быть собраны все единицы, а в правой все нули. Этот принцип проиллюстрирован на рисунке.
Разрешенные и запрещенные сетевые маски
Очень часто маску подсети записывают в сокращенной форме. Например, вместо ip адреса 172.20.20.20 c маской подсети 255.255.255.0, записывают 172.20.20.20/24, в этой записи 24 обозначает количество единиц в двоичном виде маски подсети.








Используя маски подсети можно выполнять деление крупных подсетей на более мелкие. Пусть, например,  у нас есть подсеть 172.20.20.0 с маской 255.255.255.0. Такая сеть может содержать в себе адреса начиная с 172.20.20.0 до 172.20.20.255 (адрес сети не меняется, меняется только адрес компьютера, хоста. Он может изменяться только в интервале от 0 до 255, так как маска 255.255.255.0 отводит под адрес хоста 8 двоичных разрядов, см. первый рисунок статьи). Причем из этих адресов 172.20.20.0 – является адресом подсети, 172.20.20.255 – является адресом широковещательной рассылки, и только адреса с 172.20.20.1 по 172.20.20.254 могут быть присвоены хостам (здесь использованное ранее слово компьютер, заменено на слово хост, так как клиентом в сети может быть не только компьютер но и множество других сетевых устройств, далее везде будем использовать именно термин хост). Как видно, такая подсеть может содержать 254 хоста. А что если нам не нужна такая подсеть? Вдруг мы хотим поделить ее на две подсети. В таком случае необходимо в двоичной форме записи увеличить количество бит отводимых под адрес сети, тоесть увеличить количество единичек в маске подсети на 1 штучку. Соответственно количество разрядов под IPадрес уменьшится на 1, и станет равно 7, и будет позволять организовать только  128 адресов. Данный принцип изображен на рисунке, красным цветом отмечен бит, перешедший из адреса хоста в адрес сети.
Деление на подсети с помощью сетевых масок
С помощью данной операции, подсеть 172.20.20.0 с маской 255.255.255.0 была разделена на две подсети: 172.20.20.0 с маской 255.255.255.128 и 172.20.20.128 с маской 255.255.255.128. В первой подсети адрес 172.20.20.0 является адресом подсети, 172.20.20.127 адресом широковещательной рассылки, адреса с 172.20.20.1 по 172.20.20.126 адресами хостов. Во второй подсети адрес 172.20.20.128 является адресом подсети, 172.20.20.255 адресом широковещательной рассылки, адреса с 172.20.20.129 по 172.20.20.254 отводятся под хосты.

При первом прочтении это может показаться довольно сложным для понимания, поэтому рекомендую для закрепления ответить на следующие вопросы:
  1.  Какой IP адрес является адресом широковещательной рассылки в сети 192.168.1.0 с маской 255.255.255.0?
  2. Сколько хостов может быть в подсети 192.168.0.0 с маской 255.255.255.192?
  3. Разбейте подсеть 192.168.0.0 с маской 255.255.255.0 на две подсети.
Буду рад видеть ваши ответы в комментариях.

35 коммент.:

1. 192.168.1.255.
2. 62.
3. 192.168.0.0 с маской 255.255.255.128 и 192.168.0.128 с маской 255.255.255.128 .

Отлично, все правильно!

Не пойму, почему во втором вопросе ответ 62? Адреса с 192.168.0.1 по 192.168.0.191 могут быть присвоены хостам. Получается 191. Или я что-то неправильно понял?

Давайте попробуем решить эту задачу вместе. У нас есть маска 255.255.255.192. В данном случае нас будет интересовать только четвертый октет, так как только он содержит в своей двоичной форме не только единицы, но и нули. Если мы переведем 192 в двоичную форму то получим число 11000000. Данная двоичная маска означает что под адрес подсети отводится 2 бита, а под адреса хостов 6 бит. Число хостов в сети можно вычислить как 2 в степени числа битов отведенных под адрес хоста - 2. Получается 2^8-2=64-2=62.

"Получается 2^8-2=64-2=62." (с)

тут получается ошибка, вводящая в заблуждение. согласно написанному ранее должно быть 2^6-2=...

Спасибо, за то что заметили ошибку. Расчет верный, но вместо 6 в степени опечатался и написал 8. Прошу у всех прощение за неточность.

Спасибо! Статья мне очень помогла. Написано доступным языком.

Все доступно и понятно, спасибо. Еще бы статью о том как и зачем применять подсети.

Попробую обойтись ответом в комментариях. По моему мнению деление сетей на подсети необходимо по следующим причинам:
1)Уменьшение широковещательного трафика
2)Более экономное использование адресного пространства (например используя маску /24 вы можете адресовать в сети 254 хоста, но не всем необходим такой объем и если вы хотите адресовать например 20 хостов, то можно использовать более длинные маски, и получить несколько подсетей в одной сети и тем самым более плотное использование адресов )
3)Удобство использование - очень удобно когда для определенного дела у вас выделена определенная подсеть, а не все в куче.

Добрый день.
Не совсем понял деление на подсети.
Даже если маска будет 255.255.255.128, адрес подсети останется 172.20.20.0, изменится только адрес хоста 0.0.0.128

Я так понимаю данный комментарий относится к фразе: "С помощью данной операции, подсеть 172.20.20.0 с маской 255.255.255.0 была разделена на две подсети: 172.20.20.0 с маской 255.255.255.128 и 172.20.20.128 с маской 255.255.255.128."
В данном случае все верно. Если у нас есть сеть 172.20.20.0 с маской 255.255.255.0 то в ее последнем октете все 8 битов относятся к адресу хоста, а вот если мы используем маску 255.255.255.128 то в этом случае получается что уже не все биты последнего октета адреса относятся к адресу хоста. В данном случае первый бит относится к адресу подсети, а остальные 7 к адресу хоста.

Адрес сети 172.20.20.0 и маской подсети 255.255.255.128 с помощью логического "И" действительно получается, но адреса 172.20.20.128 и маской подсети 255.255.255.128 не получается - старший разряд обнуляется.
Поправьте меня, видимо что-то мной упущено в вычислениях. Все биты остаются в своих октетах - 8бит.8бит.8бит.8бит

Адрес 172.20.20.128 и маской подсети 255.255.255.128 это не адрес хоста, это адрес сети.
Давайте попробуем еще раз. Пусть у нас есть 172.20.20.0 с маской 255.255.255.0. В таком случае значения адреса хоста в четвертом октете адреса могут лежать в двоичном виде в диапазоне от 00000001 до 11111110. Если же мы берем маску со 128 на конце, тобишь 10000000 , то один из битов адреса хоста, самый левый, переходит из части адреса хоста, в адрес подсети и в таком случае мы можем иметь две подсети: первая эта та у которой бит перешедший из адреса хоста равен 0, а вторая у которой данный бит равен 1. Тобишь сети 172.20.20.0/25 и 172.20.20.128/25. В первой подсети могут лежать хосты с адресами 00000001 - 01111110, во второй 10000001 - 11111110.

Если я гдето не прав, то прошу меня поправить.

Доброго времени суток. Подскажите пожалуйста, как определить маску подсети: 172.16.0.2/30, 172.16.0.1/30, и 172.16.0.1/3.

В вашем вопросе уже прописаны используемые маски подсети, это 30, 30 и 3 соответственно. Возможно вы хотели узнать как перевести их в десятичную форму? Если так то эти числа означают количество единиц находящихся в левой части 32 двух разрядного двоичного числа, полученного при последовательной записи двоичных форм записи разрядов маски подсети. Звучит сложно, поэтому приведу примеры:
30 - 11111111 11111111 11111111 11111100 - 255.255.255.252
3 - 11000000 00000000 00000000 00000000 - 192.0.0.0

Если по простому то делаете так пишите с лева количество единиц равное число стоящему после знака /, оставшиеся до 32 разряды заполняете нулями. Далее каждые 8 разрядов переводите в десятичную форму и разделяете точками.

Добрый день!
Почему диапазон ip в подсети 172.20.20.0 с маской 255.255.255.128 равен 126?
Почему *.127 является адресом широковещательной рассылки, а не *.128?

Маска 255.255.255.128 подразумевает использование в качестве адреса хоста последнее 7 битов IP адреса. 127 в двоичной форме выглядит как 1111111, а 128 как 10000000. Если все биты отведенные под адрес хоста равны 1, то это широковещательный адрес, и им завершается данная подсеть, после него начинается другая. Если все биты отведенные под адрес хоста равны 0, то это адрес подсети, и именно с него она начинается.

Получается при разбиении сети, теряем 2 ip, получается первый диапазон 1-126, второй 129-254

Да, все верно. Получается что вы теряете два ip адреса которые можно задать хостам.

Добрый день,

К сожалению до конца не получается понять т.к. ответ к задаче не сопоставляется с примером в тексте.

Согласно примерам из статьи, ответ ко 2 задаче будет 190:

Получается:
192.168.0.1
192.168.0.2
192.168.0.3
...
192.168.0.189
192.168.0.190
192.168.0.191

192.168.0.0 - адрес подсети
192.168.0.192 - адрес широковещательной рассылки

192-2= 190 - в итоге!


62 должно получится если бы задача была:

Сколько хостов может быть в подсети 192.168.0._192_ с маской 255.255.255.192

192.168.0.193
192.168.0.194
192.168.0.195
...
192.168.0.253
192.168.0.254

192.168.0.192 - адрес подсети
192.168.0.255 - адрес широковещательной рассылки

64-2= 62 в данном случае действительно получается 62 хосте!

Прошу поясните!
Спасибо за ответы.

Добрый день!

Вернемся ко второй задаче : "Сколько хостов может быть в подсети 192.168.0.0 с маской 255.255.255.192".

Так как в этой задаче нас спрашивают сколько может быть хостов в подсети с определенной маской подсети, то нам даже не важен адрес сети приведенный в условии и саму задачу можно перефразировать как "Сколько хостов может быть в подсети с маской 255.255.255.192"

Количество хостов в подсети по её маске определяется по формуле:
255 - последний актет - 1 = 255-192-1= 62

Здравствуйте, помогите, как определить адрес узла

Отличная статья для подготовки к B11 в ЕГЭ по информатике!

Среди множества статей на данную тему - эта единственная понятная...
Автор - молодец!

Спасибо! Не знал, что такое проходят уже в школе=)

Спасибо за ваш труд! Все очень толково и доходчиво объясняете)

подскажите, пожалуйста. Имеется устройство с веб-интерфейсом. IP-192.168.168.168 маска-255.255.0.0 шлюз-192.168.1.1 . Изменили маску на 255.255.255.0- теперь устройство не пингуется. Что случилось и что делать? Можно ли войти с другим адресом или шлюзом?

вот так спасибо автору за статью! доступно и понятно. я наконец-то понял, что за маска и с чем ее едят.

Я такой тугодум, что целую неделю потратил на размышления над этой статьёй, и теперь, когда до меня дошло, я сражён наповал гениальной простотой этого метода и талантом людей, которые это изобрели. Вам отдельное спасибо!

Пожалуйста! К сожалению изобрел не я)

Отправить комментарий