В Части 9 серии LFCA мы рассмотрели основы IP-адресации. Для лучшего понимания IP-адресации, нам нужно уделить больше внимания двум типам представления IP-адреса – двоичному и десятично-точечной квадратной нотации. Как упоминалось ранее, IP-адрес представляет собой 32-битное двоичное число, которое обычно представляется в десятичном формате для удобства чтения.
Формат двоичного использует только цифры 1 и 0. Это формат, который понимает ваш компьютер и через который данные отправляются по сети.
Однако, чтобы сделать адрес читаемым для человека, он передается в формате точечной десятичной записи, который компьютер позже преобразует в двоичный формат. Как мы упоминали ранее, IP-адрес состоит из 4 октетов. Давайте разберем IP-адрес 192.168.1.5.
В формате десятично-точечной записи, 192 – это первый октет, 168 – второй октет, 1 – третий, и наконец, 5 – четвертый октет.
В двоичном формате IP-адрес представлен следующим образом:
11000000 => 1st Octet 10101000 => 2nd Octet 00000001 => 3rd Octet 00000101 => 4th Octet
В двоичном формате бит может быть включен или выключен. Включенный бит обозначается 1, а выключенный бит обозначается 0. В десятичном формате;
Для получения десятичного числа производится суммирование всех двоичных разрядов, возведенных в степень 2. В таблице ниже приведено позиционное значение каждого бита в октете. Например, десятичное значение 1 соответствует двоичному 00000001.

В более удобной форме это также может быть представлено следующим образом.
2º = 1 = 00000001 2¹ = 2 = 00000010 2² = 4 = 00000100 2³ = 8 = 00001000 2⁴ = 16 = 00010000 2⁵ = 32 = 00100000 2⁶ = 64 = 01000000 2⁷ = 128 = 10000000
Давайте попробуем преобразовать IP-адрес из десятичного формата в двоичный.
Преобразование из десятичного формата в двоичный
Давайте возьмем наш пример 192.168.1.5. Для преобразования из десятичного в двоичный формат мы начнем слева направо. Для каждого значения в таблице задаем вопрос, можно ли вычесть значение из таблицы из десятичного значения в IP-адресе. Если ответ ‘да’ – пишем ‘1’. Если ответ ‘нет’ – пишем ‘0’.
Начнем с первого октета, который равен 192. Можно ли вычесть 128 из 192? Ответ – ‘да’. Следовательно, мы запишем 1, что соответствует 128.

192-128 = 64
Можно ли вычесть 64 из 64? Ответ – ‘да’. Снова запишем 1, что соответствует 64.

64-64 = 0 Поскольку мы исчерпали десятичное значение, оставшимся значениям присваиваем 0.

Итак, десятичное значение 192 переводится в двоичный 11000000. Если сложить значения, соответствующие 1 в нижней таблице, вы получите 192. То есть 128 + 64 = 192. Понятно, верно?
Давайте перейдем ко второй октету – 168. Можем ли мы вычесть 128 из 168? ДА.

168-128 = 40
Далее, можем ли мы вычесть 64 из 40? НЕТ. Итак, мы назначаем 0.

Переходим к следующему значению. Можем ли мы вычесть 32 из 40? ДА. Мы назначаем значение 1.

40 - 32 = 8
Далее, можем ли мы вычесть 18 из 8? НЕТ. Мы назначаем 0.

Далее, можем ли мы вычесть 8 из 8? ДА. Мы назначаем значение 1.

8-8 = 0
Поскольку мы исчерпали наше десятичное значение, будем назначать 0 для оставшихся значений в таблице, как показано.

В конечном итоге десятичное 168 переводится в двоичный формат 10101000. Опять же, если сложить десятичные значения, соответствующие 1 в нижней строке, вы получите 168. То есть 128 + 32 + 8 = 168.
Для третьего октета у нас есть 1. Единственное число в нашей таблице, которое мы можем полностью вычесть из 1, это 1. Итак, мы назначим значение 1 1 в таблице и добавим предшествующие нули, как показано.

Таким образом, десятичное значение 1 равно двоичному 00000001.
Наконец, у нас есть 5. Из таблицы единственное число, которое мы можем полностью вычесть из 5, начинается с 4. Все значения слева будут назначены 0.
Можем ли мы вычесть 4 из 5? ДА. Мы назначаем 1 4.

5-4 = 1
Далее, можем ли мы вычесть 1 из 2? НЕТ. Мы назначаем значение 0.

Наконец, можно ли вычесть 1 из 1? ДА. Мы присваиваем 1.

Десятичная цифра 5 соответствует двоичному 00000101.
В конце у нас есть следующее преобразование.
192 => 11000000 168 => 10101000 1 => 00000001 5 => 00000101
Таким образом, 192.168.1.5 переводится в 11000000.10101000.00000001.00000101 в двоичной форме.
Понимание маски подсети / сетевой маски
Мы уже упоминали, что каждый хост в сети TCP/IP должен иметь уникальный IP-адрес, который в большинстве случаев динамически назначается маршрутизатором с использованием протокола DHCP. Протокол DHCP (протокол динамической конфигурации хоста) – это служба, которая динамически назначает IP-адреса хостам в IP-сети.
Но как определить, какая часть IP-адреса зарезервирована для сетевого раздела, а какая часть доступна для использования хостовой системой? В этом случае на помощь приходит маска подсети или сетевая маска.
A subnet is an additional component to an IP address that distinguishes the network & host portion of your network. Just like an IP address, the subnet is a 32-bit address and can be written in either decimal or binary notation.
Цель подсети – провести границу между сетевой частью IP-адреса и частью хоста. Для каждого бита IP-адреса маска подсети или сетевая маска назначает значение.
Для сетевой части она включает бит и назначает значение 1, для хостовой части она выключает бит и назначает значение 0. Поэтому все биты, установленные в 1, соответствуют битам в IP-адресе, представляющим сетевую часть, в то время как все биты, установленные в 0, соответствуют битам IP-адреса, представляющим адрес хоста.
A commonly used subnet mask is the Class C subnet which is 255.255.255.0.
В таблице ниже показаны сетевые маски в десятичном и двоичном виде.

Это завершает вторую часть нашего сериала об основах сетевых технологий. Мы рассмотрели преобразование IP-адресов из десятичной в двоичную систему, маски подсети и маски подсети по умолчанию для каждого класса IP-адресов.
Source:
https://www.tecmint.com/learn-binary-and-decimal-numbers-in-networking/