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

IP адрес протокола IPv4 состоит из 32 бит, но не все биты в адресе имеют одинаковое значение. Биты делятся на две части: слева некоторое количество бит обозначают сеть, к которой относится данный адрес, оставшиеся биты справа идентифицируют устройство внутри сети. Подробнее об этом можно прочесть в статье про IPv4-адресацию. Граница между этими двуя группами бит может проходить в разных местах, например, для 32-битного адреса, первые 16 бит могут обозначать сеть, вторые – хост внутри сети, возможны любые другие сочетания (10 и 22, 8 и 24, 30 и 2) – в принципе, любые два числа, дающие в сумме 32 подойдут.

Для описания того, где проходит эта граница используется маска подсети. Она представляет из себя так же 32 бита, среди которых слева находится некоторое количество единиц, а остальные биты равны нулю. Там, где в маске подсети стоит единица, в основном адресе бит содержит информацию о сети, там, где в маске подсети 0 – в основном адресе содержится информация о хосте. Возможно, такое описание не сильно понятно, давайте рассмотрим пример.

Адрес 192.168.10.130 с маской 255.255.255.192, где в адресе хост, а где – сеть? Запишем в двоичном виде адрес, а под ним маску:

11000000.10101000.00001010.10000010
11111111.11111111.11111111.11000000

Там где в маске единички – в адресе хранится информация о сети, там где в маске нули – в адресе хранится информация о хосте. Если выполнить между адресом и маской двоичную операцию «И» побитово, то на выходе получим адрес сети. Эта операция в нашем случае просто обнулит ту часть адреса, где в маске находятся нули.

Получим 11000000.10101000.00001010.10000000, что соответствует сети 192.168.10.128

Таким образом, в нашем адресе 192.168.10.128 – это сеть.

Перевод маски подсети в префикс подсети

Если стоит задача узнать префикс по маске, то надо просто сосчитать количество единичек в маске. В нашем примере в маске (в двоичном виде) содержится 26 единичек, значит она может быть записана префиксом /26. Это же означает, что в адресе 192.168.10.130 первые 26 бит – это сеть, а оставшиеся 6 – это хост внутри сети.

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

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

Относится к теме: 

Комментарии

Спасибо. Ещё бы описали двоичную операцию «И». А так, всё хорошо

Аватар пользователя bacek
Двоичные операции описываются через множество всех возможных комбинаций операндов. 0 и 0 = 0 0 и 1 = 0 1 и 0 = 0 1 и 1 = 1 0 или 0 = 0 0 или 1 = 1 1 или 0 = 1 1 или 1 = 1 Типа того :)

Адрес 192.168.10.130 с маской 255.255.255.192.
Меня одного удивляет как смогли получить число 130 из 6 бит?

Аватар пользователя bacek

Отличный вопрос. Обожаю такие конкретные, тут явно есть что разъяснить. Ошибки нет. Наш адрес 192.168.10.130 в двоичном виде последний октет выглядит так 10000010. Теперь я поставлю вертикальную черту там где кончается сеть и начинается хочтовая часть: 10|00010 То есть сеть у нас 192.168.10.128. Таким образом из 6 бит мыполучили число 2, а 128 там уже было - это сама сеть. 128+2 дало нам 130. Кстати, брудкаст в этой сети будет 10|111111 -192.168.10.191, то есть хосты в этой сети будут идти с 192.168.10.129 по 192.168.10.190.

1.
«там где в маске нули – в адресе хранится информация о хосте.»:
11000000.10101000.00001010.10|000010
11111111.11111111.11111111.11|000000
Получается, что в сети 192.168.10.128 хост № 2. Каким образом получить 3 или 4 ?
2.
И как получился брудкаст? 10|111111-192.168.10.191
Если переводить все единицы (шесть единиц: 32+16+8+4+2+1=63), то получается 192.168.10.63

Третий хост будет: 192.168.10.131, четвёёртый 192.168.10.132 ?

Про брудкаст разобрался из другой статьи). Но 1 вопрос всё ещё актуален.

Аватар пользователя bacek

Здравствуйте.
На счёт брудкаста - вы забыли прибавить первую единичку (128). Когда переводим из двоичной в десятичную и обратно, нем не важно, где там сеть, где хост переводим весь октет в любом случае.

По поводу вопроса 1:

11000000.10101000.00001010.10|000010

11111111.11111111.11111111.11|000000

  • 10|000000 - сеть (128)
  • 10|000001 - хост 1 (129)
  • 10|000010 - хост 2 (130)
  • 10|000011 - хост 3 (131)
  • 10|000100 - хост 4 (132)
  • 10|000101 - хост 5 (133)
  • 10|000110 - хост 6 (134)
  • ...
  • 10|111110 - последний хост (190)
  • 10|111111 - брудкаст (191)
Аватар пользователя Valger

Здравствуйте. Зарегистрировался что бы сказать "Спасибо" за интересную и качественную подачу материала. Очень кратко, ёмко и интересно.

Добавить комментарий