IP адрес

IP адрес состоит из 32 битов, которые поделены на 4 части по 8 бит соответственно (эти части называются октетами). В жизни используется запись IP адреса в десятичном виде.

Примеры IP адресов:
172.16.2.15 = 10101100.00010000.00000010.00001111
178.68.128.168 = 10110010.01000100.10000000.10101000
217.20.147.94 = 11011001.00010100.10010011.01011110

Из этих 32 битов часть относится к адресу хоста, которому принадлежит этот IP адрес, а другая часть относится к адресу сети, в которой находится этот хост. Первая часть (слева направо) IP адреса обозначает адрес сети, а вторая часть (оставшиеся биты) – адрес хоста. Чтобы узнать, сколько битов относится к адресу сети, надо воспользоваться маской сети.

Маска сети

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

Примеры масок сети:
255.255.255.0 = 11111111.11111111.11111111.00000000
255.0.0.0 = 11111111.00000000.00000000.00000000
255.255.240.0 = 11111111.11111111.11110000.00000000
255.255.255.128 = 11111111.11111111.11111111.10000000

Префикс маски

Еще чаще, маска сети записывается в виде короткого префикса маски. Число в префиксе обозначает количество бит относящихся к адресу сети.
/16 = 11111111.11111111.00000000.00000000 = 255.255.0.0
/24 = 11111111.11111111.11111111.00000000 = 255.255.255.0
/26 = 11111111.11111111.11111111.11000000 = 255.255.255.192

IP адрес и маска сети

Чтобы узнать, какая часть IP адреса относится к порции сети, необходимо выполнить бинарную логическую операцию AND (И).

Бинарная логическая операция AND (И)
Смысл операции заключается в сравнении двух битов, причем только в одном случае бинарная операция даёт единицу на выходе – в случае сравнения двух единиц. В остальных случаях логическая операция AND даёт на выходе 0.
Результаты сравнения логической операцией AND двух битов:
1 AND 1 = 1
1 AND 0 = 0
0 AND 1 = 0
0 AND 0 = 0

Операция AND над IP адресом и маской

Представим, что у нас есть IP адрес 192.168.1.31 с маской сети в виде префикса /24, наша задача вычислить адрес сети, порцию сети, порцию хоста.
Сначала надо перевести IP адрес из десятичной системы счисления в двоичную систему. Затем перевести префикс в двоичный вид и нормальный вид маски сети (десятичный). Далее останется только сложить IP адрес с маской с помощью логической операции AND.

192.168.1.31/24
192.168.1.31 = 11000000.10101000.00000001.00011111
/24 = 11111111.11111111.11111111.00000000 = 255.255.255.0
11000000.10101000.00000001.00011111 (IP)
AND
11111111.11111111.11111111.00000000 (Mask)
=
11000000.10101000.00000001.00000000 (Адрес сети в двоичном виде)
192.168.1.0/24 (Адрес сети в десятичном виде с сетевым префиксом)

Вот мы и узнали адрес сети. Единички в маске указывают на длину порции адреса сети (11000000.10101000.00000001.), а нолики – на порцию адреса хоста (.00011111).