Роутеру, компьютеру и любому другом устройству, так или иначе подключённому к сети, необходимо знать, куда отправлять пакеты данных, чтобы они точно дошли до получателя. В этом им помогает IP-адрес. Он выступает в роли ориентира, указывающего, в каком месте всемирной паутины находится то или иное устройство.
IP-адрес (v4) состоит из 32-бит, а IPv6 из 128 бит. Получается, что только IPv4-адресов может быть 4 млрд. И этот объём уже превышен, раз понадобились адреса нового типа, IPv6. Вы можете узнать адрес своего устройства, если введёте в терминале команду ipconfig (в Linux и MacOS — ifconfig). Кстати, у большинства роутеров по умолчанию стоит один и тот же адрес: 192.168.0.1.
Восьмизначное двоичное число в IP-адресе — это октет. Его значение может колебаться в пределах от 0 до 255 в десятичной системе. Получается, что октету можно присвоить 256 разных значений. Диапазон IP-адресов стартует с 0.0.0.0 и заканчивается 255.255.255.255.
Как устроен IP-адрес
Но IP-адрес представляет собой не просто комбинацию чисел, которые последовательно присваиваются разным устройствам. Его можно разбить на две части: номер узла (устройства) и номер сети. Возьмём, например, IPv4-адрес 192.168.1.12. Номером сети в нём будет 192.168.1, а номером узла — .12. Получается, что любое устройство, у которого IP-адрес начинается с 192.168.1, входит в состав одной сети. Если его IP-адрес начинается с 192.168.3, то это значит, что устройство входит в состав другой сети, подключиться к которой нельзя без настроенного роутера.
Можно сказать, что роутер — это сетевой надуровень, в состав которого входят подсети. Он выступает в роли моста, позволяющего ходить между разными подсетями. Важно знать, что номер сети может храниться в первых двух или даже одном октете, тогда как остальные числа выступают в качестве номеров устройств, подключённых к этой сети.
Чтобы данные доходили до получателя, нужно научить компьютер различать цифры, которые относятся к сети и к устройствам. Для этого используются первые биты IP-адреса в двоичном представлении. Компьютер получает информацию о них и понимает, где здесь адрес устройства, а где — сети.
Понять принцип несложно. Когда первый бит — 0, то это значит, что используется одно первое число, так как сеть большая и устройств много. В таких сетях используется адресное пространство от 0.0.0.0 до 127.0.0.0. Когда первые два бита — это 10, то перед вами сеть средних размеров, которая в качестве своего адреса использует два числа. IP-адреса средней сети могут использовать адресное пространство от 128.0.0.0 до 191.255.0.0. В ситуации, когда первые бита — 110, перед вами небольшая сеть с диапазоном адресов от 192.0.0.0 до 223.255.255.0.
Зачем IP-адресу нужна маска подсети
Представьте, что вы взаимодействуете с другим сетевым устройством, обмениваясь пакетами данных. Возможно, вы знаете, что у IP-пакета есть заголовок с полями "source IP" и "destination IP". В этих полях содержится об отправителе и получателе. Как поля «Кому/Куда» и «От кого» на бумажном почтовом конверте. Внутри пакета масок нет. Но когда компьютеру или роутеру присваивается IP-адрес, одновременно он получает и маску подсети.
Маска подсети — это ещё один алгоритм, с помощью которого IP-адрес дробится на номер сети и номер узла. Маска подсети похожа на IP-адрес, так как выглядит как набор из четырёх блоков чисел. Например, она может выглядеть так: 255.255.255.0.
Фактически маска подсети — это 32-битное число, обладающее одной интересной особенностью: в нём невозможно чередование нулей и единиц. Они всегда расставлены в строгом порядке, сначала идут единицы, потом нули. Чтобы было нагляднее, это можно изобразить следующим образом: 255.255.248.0=11111111.11111111.11111000.00000000.
Давайте посмотрим на примере. Допустим, у нас есть IP-адрес 192.168.123.132. Если перевести его в двоичную систему счисления, мы получим 110000000.10101000.01111011.10000100, а маска подсети 255.255.255.0 будет выглядеть как 11111111.11111111.11111111.00000000.
В этом примере адресом сети выступают первые 24 бита (мы считаем единицы), а оставшиеся 8 битов (считаем нули) идентифицируют адрес узла. Так получаются следующие адреса:
11000000.10101000.01111011.00000000 — адрес сети (192.168.123.0)
00000000.00000000.00000000.10000100 — адрес узла (000.000.000.132)
И когда пакет с адресом 192.168.123.132 попадёт в сеть 192.168.123.0, компьютер его увидит и обработает. Кстати, часто маска подсети пишется с префиксом. Например, так: 192.168.21.3/19. Узнать префикс легко, для этого нужно посчитать все единички в двоичном формате. Количество единиц и нулей может меняться.
Выводы
Маска подсети позволяет компьютеру идентифицировать устройства внутри одной сети, и понимать, кто не в ней. Устройства, находящиеся в пределах одной сети могут обмениваться данными напрямую, а для связи с устройствами из другой сети используют роутер.
С помощью маски подсети удобно разбивать большую сеть на несколько маленьких. Это особенно актуально для крупных компаний, у которой может быть несколько тысяч компьютеров и других устройств.