Перевод маски в двоичный вид

Как узнать маску подсети? Маска подсети: расчет по IP

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

Умение вычислить значение маски TCP/IP может быть использовано при подключении нового хоста в сеть и реорганизации корпоративной сетки. Изучение этой проблемы следует начать с понимания того, что она собой представляет и для каких целей используется.

Битовая маска

Маска подсети может называться битовой маской, что является 32-битным значением, которое указывает на одну часть IP, относящуюся к адресации сетевого интерфейса, и на вторую часть, относящуюся к адресации подсетей. Обычно её значение отображается в десятичном виде, в формате ХХХ.ХХХ.ХХХ.ХХХ.

Это определение приближено к профессиональному сленгу и может показаться непонятным. Разобраться с тем, что это такое, поможет конкретный пример.

Предположим, что у нас есть какая-то сеть, в которой присутствует компьютер. В свойствах подключения видно, что его сетевому интерфейсу присвоен IP-адрес и маска подсети.

Далее оба значения приводятся в двоичный вид и вычисляются следующие последовательности:

Теперь надо последовательно умножить каждый разряд IP-адреса в двоичном виде на разряд маски в двоичном виде и в результате будет получено значение,

которое при переводе в десятичный вид будет выглядеть, как

Умножая адрес IP на инвертированное значение маски, получаем последовательность

Возвращая в десятичный вид, получается цифра 199, соответствующая адресу интерфейса хоста.

Сравнив первый и второй результаты, можно сказать, что цифры IP-адреса, которые соотносятся с единицами маски, указывают на адрес подсети. Цифры IP-адреса, соотносящиеся с нулями маски, образуют адрес компьютера в этой подсети.

В итоге маска подсети помогла выяснить по IP, что наш компьютер находится в подсети 192.168.0.0 и имеет в ней адрес 199. Возвращаясь к определению выше, она показала, какая часть IP указывает на подсетку, а какая на адрес хоста.

Как найти маску подсети по классу IP-сети

Совокупность всех IPv4-адресов делится на классы по диапазонам адресов. Всего существует пять, из которых используются A, B, C, D- адреса заложены под мультикасты, и E — зарезервированы на будущее.

Для определения класса адреса необходимо опять перевести его в двоичный вид и посмотреть начало последовательности битов:

Возвращаясь к примеру, который был выше, как узнать маску подсети в нем:

IP-адрес в двоичном виде начинается на 110, значит, он принадлежит к классу C. Ещё один способ, как узнать маску подсети, это запомнить диапазоны принадлежащие классам.

Как узнать маску по префиксу

Для краткости маску можно записывать в виде префикса, который означает количество бит порции сети. Эта система обозначения принята с приходом бесклассовой междоменной маршрутизации (Classless Inter-Doma-in Routing, или CIDR, «сайдр»). Она избавляет от классов, а для идентификации сети может использоваться разное число битов IP. Узнать маску подсети в десятичном и двоичном виде по префиксу проще всего по таблице.

Как рассчитать маску по префиксу CIDR

Привести маску из префикса в десятичный вид просто. Известно, что маска подсети имеет 32 бита, при этом единицы в начале, а нули в конце. Следовательно, нужно:

Последним действием получаем маску в десятичном виде.

Как привести маску подсети из десятичного вида в короткий префикс

Написание маски сети в виде префикса экономит время и место в тексте. Кроме того, это стандартизированное международное отображение и сейчас используется чаще, чем десятичное. Для этого требуется:

Таким образом можно рассчитать префикс CIDR.

Как определить маску подсети с помощью адреса сети и маски сети

Подобное задание часто всплывает на собеседованиях и тестовых заданиях. И также навык пригодится при реорганизации сети предприятия или делении крупной сетки на более мелкие подсети.

Для наглядности стоит вернуться к примеру, который разбирается с первого абзаца.

С помощью адреса 192.168.0.199 и маски сети 255.255.255.0 уже вычислен адрес самой сети, который имеет вид 192.168.0.0. Здесь для использования присутствует 256 адресов. Из них 2 адреса автоматически резервируются:

. 0 — адрес сети и не может быть использован.

Остаётся для раздачи хостам всего 254 адреса. Стоит отметить, что в многоранговых сетях еще один адрес резервируется для роутинга, это может быть . 1 (или любой другой).

Разбирая все по порядку, приведём этот пример в общий вид, применяемый к любой сети.

Число допустимых узлов всегда ограничено. Если перевести маску сети в двоичный вид, то, как уже известно, единицы указывают на адрес подсети, нули — на адрес компьютера.

Бит может возвращать только два значения, два бита — четыре, три бита — восемь и так далее. Выходит, что n-бит возвращают 2^n значения. Исходя из всего, что сказано выше, получается вывод: число хостов (N) в сети вычисляется формулой N = (2^r)—2, в которой r-количество нулей в двоичном виде маски.

Возвращаясь к нашему примеру, производим расчёт:

Получаются те же 254 адреса для раздачи интерфейсам хостов в сети.

Предположим, что предприятию требуется создать подразделение и собрать 20 рабочих компьютеров в подсеть. Рассчитать маску подсети можно следующим образом.

Берём 20 IP и прибавляем к ним 2 адреса, которые будут зарезервированы. Всего требуется 22, самая близкая степень 2 — это 32. В двоичном виде 10 0000. Поскольку сеть, в которой проводится деление, относится к классу С, то маска подсети будет иметь вид:

Максимально в полученной подсети раздать интерфейсам хостов можно 30 адресов.

Как рассчитать маску подсети. Побитный сдвиг

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

Предположим, требуется разбить сеть 192.1.1.0 на 6 подсетей, в самой большой планируется разместить максимум 20 узлов. Исходя из этого, производится расчёт.

Определить класс разбиваемой сети. Для примера предложена сеть класса С, маска, используемая по умолчанию 255.255.255.0 или /24.

Выяснить, какое количество бит требуется для шести подсетей. Для этого число сетей округляется до ближайшей степени двойки, это 8. Получается, что требуется 3 бита, так как 8 = 2^3.

Представить маску по умолчанию в двоичный вид для наглядности:

Для создания 6 подсетей требуется забрать 3 бита из октета адреса хоста. К 24 битам адреса сети прибавляется еще 3. В итоге 24+3 = 27.

Остаётся перевести маску в десятичный вид. Последний октет 11100000 — это 224. Получается, маска имеет вид

Либо, обращаясь к CIDR, посчитать количество битов по единицам — 27, и посмотреть значение префикса.

Пользуясь тремя битами и с помощью маски разбиваем подсети. В последнем октете проставляем единицы. Для наглядности это можно сделать в двоичном виде:

Посчитать адреса подсетей можно и без двоичного представления, здесь сделано для наглядного отображения того, почему получаются именно эти адреса, а не другие.

Таким образом можно создать 8 подсетей, но в задании требуется только 6, поэтому остановимся на них.

Времена, когда подобные расчёты проводились вручную, далеко позади. Информация о том, как узнать маску подсети, преподаётся в ВУЗах и на различных курсах. Как правило, её старательно пытаются изучить студенты и профессионалы, которые хотят пройти сертификацию.

Сегодня для облегчения работы системных администраторов и сетевых инженеров существует множество различных калькуляторов. Эти системы могут провести любой расчёт за несколько секунд. Однако прибегать к помощи программ при небольшом объёме данных неинтересно. Иногда проще и быстрее разбить сеть в уме, чем искать нужный ресурс.

Понимание того, как производится расчёт маски подсети, необходимо специалисту, даже если он никогда на практике не будет его применять.

Источник

Советы о масках сети

Давно не приходится пользоваться, боюсь забыть. Поэтому выложил сюда.

Общий совет

Т.е. октет в 8 бит (11111111) = 255 (128+64+32+16+8+4+2+1).
Таким образом, любой из октетов не может иметь значение более 255. Плюс одно нулевое значение (000, адрес подсети), итого 256 адресов.

Перевод

двоичный вид в десятичный

Например, нам дана двоичная маска 11000000. Как получить читаемую? Просто: 128+64=192.
Смотрим «Общий совет» и видим, что первым двум битам соответствуют 128 и 64, в сумме они дают 192, соответственно, маска будет — 192.

десятичный вид в двоичный

Нам дана маска 224. Как получить в двоичном виде? Тоже не сложно: 224=128+64+32 (три первых позиции), соответственно, маска в двоичном виде будет выглядеть так — 11100000.

Расчёт хостов по маске

Маска 255.255.255.240. Сколько хостов в подсети может быть?

Вариант 1

В десятичном виде: 256-240=16. Всего — 16 адресов на подсеть, из них: первый — адрес сети, последний — широковещательный адрес (broadcast). Соответственно, 16-2=14. Итого — 14 адресов хостов.

Вариант 2

Более сложный
240=128+64+32+16 — четыре первых позиции. Значит, маска в двоичном виде выглядит так 11110000, где 1111 — адрес подсети, 0000 — адреса хостов. Четыре последних позиции — это 8+4+2+1=15. 15 значимых значений, плюс одно нулевое (0000) итого — 16 адресов на подсеть, из них: первый — адрес сети, последний — широковещательный адрес (broadcast). Соответственно, 16-2=14. Итого — 14 адресов хостов.

Расчёт маски по хостам

Необходимо выделить маску для 5 хостов.

Вариант 1

Всего адресов — 256. 256-5=251. 251 — это 128+64+32+16+8 и 3, но 3 у нас отсутствует (см.общий совет). Значит маска 11111000 (для 8 адресов: семь значимых и один нулевой), либо маска 111111100 (для 4-х адресов: три значимых и один нулевой). 4 адреса нам мало, т.к. первый — сеть, последний — broadcast, а на хосты остаётся всего 2 адреса. Выходит, нам требуется — 11111000. Воспользовавшись общим советом, получаем 128+64+32+16+8=248. Октет — 248, т.е нам нужна маска 255.255.255.248.

Вариант 2

5 в двоичной системе — 101. Т.е. для выделения пяти адресов требуется 3 бита. Однако, 3 значимых бита (111) — это 7 и один нулевой адрес (000), итого — 8 адресов. Соответственно, выделить менее 8-ми адресов нельзя. Но, из восьми адресов первый — адрес сети, последний — широковещательный адрес (broadcast), и остаётся 6 адресов на хосты. Коль под адреса хостов выделяется 3 бита, на адрес подсети остаётся 5 бит, значит маска в двоичном виде будет выглядеть как 11111000. Воспользовавшись общим советом, получаем 128+64+32+16+8=248. Октет — 248, т.е нам нужна маска 255.255.255.248.

Источник

MNorin.com

Блог про Linux, Bash и другие информационные технологии

Маска подсети: считаем на bash

Маска подсети — это набор битов, определяющий, какое количество битов используется для указания адреса подсети, а какое для указания адреса компьютера в этой подсети. Более привычно маску подсети видеть в десятичном виде, но на самом деле она представляется в бинарном виде. Если вы понимаете, как представляется адрес подсети и адрес компьютера в этой подсети, то можете легко определить по адресу компьютера и маске подсети адрес этой самой подсети и маску подсети в таком виде:

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

Предположим, у вас есть некоторая сеть 192.168.1.0 (сеть класса C), а маска подсети (netmask) представлена как 255.255.255.0 (в бинарном виде это 11111111 11111111 11111111 00000000). Это говорит о том, что для адреса подсети выделены первые 24 бита, а под адрес компьютера в подсети 8 бит, то есть, интервал значений последнего октета (последних 8 бит) будет принимать 256 различных значений (значения от 0 до 255 включительно), где 0 — это адрес подсети, а 255 — броадкаст. Соответственно, под адреса компьютеров вы сможете выделить 254 адреса (от 1 до 254). И, находясь на каком-либо компьютере под управлением операционной системы на базе ядра Linux, вы можете посмотреть адрес компьютера и сетевую маску при помощи команд «ifconfig» и «ip addr».

Иногда требуется имея адрес компьютера и маску подсети определить адрес подсети и битность сетевой маски, чтобы представить адрес подсети в виде

Давайте попробуем решить задачу по такому преобразования на bash.

Перевод из десятичной системы в двоичную в bash

Для решения задачи нам необходимо будет перевести маску подсети в бинарный вид, поскольку маска подсети (netmask) — это последовательность бит, определяющая, какие из бит в указанном адресе выделены под адрес подсети (бит установлен в единицу), а какие — под адрес компьютера в подсети. Это очень важный момент в понимании IP адресов.

Функции, которая позволяет преобразовать десятичные числа в двоичные, в bash нет, поэтому необходимо будет использовать небольшую хитрость. Она заключается в том, что мы можем сгенерировать массив из последовательностей единиц и ноликов, каждый элемент которого будет являться двоичным представлением десятичного значения индекса этого элемента.

Эта строчка будет развернута в массив, содержащий 8-разрядные значения, что равносильно следующим операциям:

Перевод из двоичной системы в десятичную в bash

Обратное преобразование нам потребуется, чтобы преобразовать последовательность бит обратно в десятичное число. Тут всё проще. В bash есть возможность преобразовывать число из N-ричного в десятичное, где N — это число до 64 включительно. Вот как это выглядит для системы счисления с основанием 2 (двоичной):

Как видите, в данном случае всё очень просто.

Пишем скрипт

Если вы хотите использовать команду ip для получения адреса и маски подсети, а не ifconfig, который считается устаревшим, вам нужно только поменять вычисление переменной PARAMS, так, чтобы ее значение содержало адрес компьютера и маску подсети в виде «192.168.1.10 255.255.255.0».

Источник

Оцените статью
( Пока оценок нет )
Поделиться с друзьями
Uchenik.top - научные работы и подготовка
0 0 голоса
Article Rating
Подписаться
Уведомить о
guest
0 Комментарий
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии