Что такое IP-адрес и маска подсети и зачем они нужны
Рассказываем, что такое IP-адрес и маска подсети, зачем они нужны и как используются.
Иллюстрация: Оля Ежак для Skillbox Media
Компьютерам, серверам и роутерам в интернете нужно понимать, куда отправлять данные, чтобы они не потерялись в паутине проводов и прочих вайфаев по пути с какого-нибудь американского хранилища «Ютуба» в браузер дяди Васи в Череповце. Один из помощников в этом деле — IP-адрес. Он представляет собой что-то вроде дорожного указателя, маяка, который содержит данные о месте конкретного устройства в структуре Глобальной сети.
Чтобы узнать IP-адрес вашего устройства, можно открыть терминал и ввести ipconfig в Windows или ifconfig в macOS и Linux:
Что такое IP-адрес и как он устроен
Чаще всего это четыре числа, которые разделены между собой точками (такой формат поддерживается в протоколе IPv4). Например, вот один из самых популярных IP-адресов — вы могли вводить его, чтобы зайти на свой роутер:
Каждое из чисел в адресе — это восьмизначное двоичное число, или октет. Оно может принимать значения от 0000 0000 до 1111 1111. Или же от 0 до 255 в десятичной системе счисления — то есть 256 разных значений.
Получается, диапазон IP-адресов стартует с 0.0.0.0 и заканчивается 255.255.255.255. Если посчитать количество всех адресов в этом диапазоне, получится 4 294 967 296.
Формат адресов IPv4 — не единственный, хоть и один из самых популярных в интернете. Есть ещё стандарт IPv6 — его адреса состоят уже из 128 битов (в IPv4 — 32 бита). Таким образом, IPv6 позволяет пронумеровать 2128 устройств (по 300 миллионов на каждого жителя Земли).
Ниже мы будем говорить только об IPv4, однако эти принципы хорошо ложатся и на IPv6.
Из чего состоит IP-адрес
На самом деле IP-адрес — это чуть больше, чем просто набор чисел. Он всегда состоит из двух частей: номера хоста (устройства) и номера сети.
Например, IPv4-адрес 192.168.1.34 состоит из таких смысловых частей:
В нём первые три числа означают номер сети, а четвёртое — номер хоста (то есть вашего устройства). Все устройства, идентификаторы которых начинаются с 192.168.1, находятся в одной сети.
Устройство, идентификатор которого начинается, например, с 192.168.2, будет принадлежать к другой сети и не сможет связываться с устройствами из сети 192.168.1. Чтобы это сделать, понадобится роутер, который соединит две сети между собой.
Он будет мостом, по которому данные переходят из одной сети в другую. Если же говорить техническим языком, то роутер — это сеть более высокого уровня, которая объединяет несколько подсетей. Со стороны это будет выглядеть так, будто у роутера есть устройства, которым он передаёт данные и которые могут связываться между собой.
Какими бывают IP-адреса
Номер сети может храниться не только в первых трёх октетах, но и в первых двух или даже в одном. Остальные числа — это номера устройств в сети.
Чтобы компьютер понимал, какие октеты обозначают сеть, а какие — компьютеры и роутеры, используют несложный механизм. Первые несколько битов в двоичном представлении IP-адреса фиксируются, считываются компьютером и автоматически распознаются — это похоже на конструкцию switch в языках программирования:
- Если первый бит — это 0, значит, компьютер имеет дело с большой сетью, на которую указывает только одно, самое первое число.
При этом первый бит у нас уже зарезервирован под такой «свитч», поэтому всего таких сетей может быть 128 (от нуля до 127), а устройств в них — более 16 миллионов.
- Если первые два бита — это 10 (то есть 2 в десятичной системе счисления), значит, IP-адрес принадлежит к средней сети и использует два числа как указатель на неё.
У такого адреса уже зарезервировано два первых бита, а значит, для номера сети остаётся только 14 битов — это более 16 тысяч сетей и более 65 тысяч устройств.
- Если первые три бита — это 110, значит, компьютеру попался IP-адрес из маленькой сети, в качестве указателей на которую используются только три первых числа.
Всего таких сетей существует более двух миллионов, а подключаемых устройств в каждой — 256. Диапазон значений — от 192.0.0.0 и до 223.255.255.0 (223 — потому что у нас зарезервировано три бита).
Все эти виды IP-адресов имеют свои названия: класс A, B и C. Класс А — это большие сети, B и C — средние и маленькие. Кроме них существуют ещё сети класса D и E. В них входят зарезервированные адреса — например, 127.0.0.0 или 192.168.X.X. Первый указывает сам на себя — когда он отправляет данные по этому адресу, они тут же приходят обратно (его ещё называют localhost). А второй — это стандартный идентификатор интернет-модемов и Wi-Fi-роутеров.
Бывает, что хостов в сети больше, чем доступных IP-адресов, — в современном интернете дела обстоят именно так. В этом случае интернет-провайдеры выдают устройствам адреса формата IPv6. При этом адрес IPv4 можно легко переделать в формат IPv6, а вот в обратную сторону это уже не работает.
Однако не все интернет-провайдеры перешли на новую версию IP-адресов, и это создало новую проблему: невозможно напрямую отправлять данные с устройств, поддерживающих IPv4, на устройства с IPv6. Проблему решили с помощью туннелирования — создали специальный канал между двумя устройствами, по которому обмениваются информацией между сетями с разными версиями протокола.
Маска подсети
Маска подсети — это более удобный способ разделить IP-адрес на номер сети и номер хоста. Она пришла на смену алгоритму, который мы описали выше. Маска подсети состоит из тех же четырёх чисел и похожа на IP-адрес:
В двоичном представлении такая маска выглядит как 11111111 11111111 00000000 00000000. Нули показывают, где находится номер хоста, а единицы — номер сети.
Чтобы применить маску, нужно воспользоваться логическими операторами «И» и «НЕ». Первый работает по следующим правилам:
Оператор «НЕ» просто меняет все нули на единицы, а единицы на нули. И делает он это справа налево:
Давайте применим к IP-адресу 192.168.1.34 маску подсети 255.255.255.0:
На картинке показано, как мы сначала перевели IP-адрес и маску подсети в двоичную систему счисления. А затем побитово справа налево применили операцию логического «И». Маска помогла удалить ненужную часть адреса, и мы выделили номер сети — 192.168.1.0.
Чтобы выделить номер хоста, нужно сначала применить операцию логического «НЕ» к маске подсети, а затем — операцию логического «И» к IP-адресу и полученной маске:
Так мы получили маску для выделения номера устройства. А теперь применим операцию логического «И»:
У нас получился адрес 0.0.0.34. Это и есть номер хоста.
Как выбрать маску подсети
Обычно маска задаётся программистами в настройках серверов или пользователями в настройках системы. Например, на MacBook маску подсети можно посмотреть в разделе «Сеть» → «Дополнительные настройки»:
Маска показывает, сколько битов включает в себя номер сети. Например, у большой сети номером будет только первое число (8 битов), а маска будет состоять из восьми единиц и 24 нулей: 255.0.0.0.
Если IP-адрес принадлежит к маленькой сети, то первые три числа в нём будут представлять номер сети. Значит, маска будет выглядеть так: 255.255.255.0.
Есть и слегка необычные маски подсетей — например, 255.255.254.0. Они тоже означают, сколько битов используется в номере сети. Только в данном случае их будет 23 — по 8 в первых двух числах и 7 в третьем. Остальные биты будут принадлежать номеру хоста.
Как ещё используют маски подсети
Выделять номера хостов и сетей удобно, но это не самая интересная часть использования масок. Их главная суперсила — умение разделять большие сети на несколько маленьких.
Допустим, у нас есть номер сети 185.12.0.0 с маской 255.255.0.0. В такой сети может быть более 65 тысяч устройств, чего вполне хватит, чтобы вместить все компьютеры в одном большом офисе.
Но что если у нас есть несколько маленьких офисов в одном здании, и мы хотим их все подключить к сети? Создавать новую сеть с 65 тысячами IP-адресов для каждого офиса нерационально. Поэтому мы можем разбить сеть 185.12.0.0 на подсети.
Для этого вместо маски 255.255.0.0 мы возьмём маску 255.255.255.0. Так у нас появится 256 новых подсетей внутри одной большой. При этом в каждой подсети будет по 256 устройств.
Если в офисе понадобится больше устройств, мы можем взять другую маску — например, 255.255.254.0. И теперь нам будет доступно 512 устройств, а количество подсетей сократится до 128.
Резюме
IP-адреса нужны, чтобы передавать данные внутри сетей. Их делят на классы A, B и C — для больших, средних и маленьких сетей. Ещё есть классы D и E, но они нужны для служебных задач.
Логически IP-адрес поделён на номер сети и номер хоста (устройства). Эти части позволяют определить, к какой сети подключено устройство и какой у него номер.
Маска подсети помогает удобно выделять из IP-адреса номер сети и номер хоста. Она выглядит как обычный IP-адрес, но на самом деле представляет собой набор последовательных единиц и нулей. Первые показывают, сколько битов занимает номер сети в IP-адресе, а второй — сколько битов принадлежит номеру хоста.
Ещё маски позволяют создавать подсети внутри одной сети. В этом случае подсети будут соединены одним компьютером, который похож на роутер. Он помогает хостам из разных сетей общаться между собой.