Недооценить важность интернета на сегодняшний день, пожалуй, невозможно. Неудивительно, что данная тема вошла в курс по информатике.
Представьте, что вам надо отправить письмо вашему другу из Америки. Обычное письмо. Вы идете в почтовое отделение, покупаете конверт, запечатываете его, наклеиваете марки и отправляете. Как почтовая служба узнает, куда именно нужно доставить письмо? Через адрес. Если он будет неправильным, письмо не попадет в руки вашему другу. Тот же самый принцип работает и в интернете — чтобы отправить или получить какие-то данные из сети, вам нужно знать адрес того устройства, к которому вы обращаетесь. Разумеется, у вас тоже должен быть такой адрес, иначе никакие данные к вам просто не придут — будет неясно, куда отправлять. Когда компьютеров в сети два, три, да даже если их сто — раздать каждому адреса — не проблема. А что, если подключенных устройств 15 миллиардов? Да, именно столько различных устройств было подключено к интернету по статистике на 2017 год. А к 2021 ожидается число в 46 миллиардов. В этом случае необходимо использовать специальные методы адресации.
IP-адрес
Для адресации в интернете используют IP-адреса. Да, те самые, про которые шутят «я тебя по айпи вычислю». У каждого физического устройства (в том числе у того, с которого вы читаете этот текст), есть свой уникальный IP-адрес.
11000000101010000000000000000001
Для удобства IP-адрес делят на байты:
11000000 10101000 00000000 00000001
переводят в десятичную систему счисления:
192 168 0 1
и разделяют точками:
192.168.0.1
Маска сети
IP-адрес — это не просто адрес устройства. Он содержит в себе информацию как о самом устройстве (их еще называют хостами), так и о так называемой подсети (или просто сети), в которой это устройство находится. Логика здесь такая же, как у адресации домов на какой-то улице: в адресе всех домов присутствует название улицы, при этом каждый дом имеет свой уникальный номер. Аналогично, IP-адрес указывает как на адрес сети, в которой находится устройство (Network ID), так и на адрес хоста в этой сети (Host ID). IP-адрес, Host ID и Network ID придумывали связывать между собой через специальную дополнительную последовательность — маску сети.
Иначе говоря, если где-то в маске стоит ноль, то все разряды дальше тоже будут нулями.
Например, вот это маска:
11111111 11111111 11110000 00000000
и вот это маска:
11111111 11100000 00000000 00000000
а вот это — нет:
11111111 1100100 11111100 00000000
Маску сети, по аналогии с IP-адресом, для удобства делят на байты, переводят в десятичную систему счисления и записывают через точку. Например, маску:
11111111 11111111 11110000 00000000
записывают как:
255.255.240.0
Получение Network ID и Host ID через IP-адрес и маску
Такой формат числа — сначала единицы, а потом нули — не случаен. С помощью этой записи можно выделить в IP-адресе только те разряды, которые относятся к адресу сети. Остальные, соответственно, будут относиться к адресу хоста в сети. Делается это с помощью операции поразрядной конъюнкции (о том, что такое поразрядная конъюнкция и как ее считать, см. раздел теории к уроку «Логические высказывания»). Ниже приведен алгоритм нахождения адреса сети по IP-адресу и маске:
Выписать IP-адрес и маску друг под другом;
Перевести каждый байт IP-адреса и маски в двоичную систему счисления;
Выполнить поразрядную конъюнкцию;
Перевести результат обратно в десятичную систему счисления
Результат поразрядной конъюнкции и будет являться адресом сети. А те разряды, которые «уничтожились» нулями в маске, будут указывать на адрес хоста в сети. Ниже приведен пример вычисления Network ID и Host ID по IP-адресу и маске.
Пускай дан IP-адрес 149.131.130.125 и маска 255.255.192.0 и требуется определить адреса сети и хоста.
Выписываем IP-адрес и маску друг под другом:
149.131.130.125
255.255.192.0
переводим в двоичную систему:
10010101.10000011.10000010.01111101
11111111.11111111.11000000.00000000
выполняем поразрядную конъюнкцию для каждого разряда IP-адреса и маски. Получим:
10010101.10000011.10000000.00000000
переводим обратно в десятичную:
149.131.128.0 — это адрес сети (Network ID).
Все, что было в IP-адресе, но не попало в Network ID — это адрес хоста:
00000000.00000000.00000010.01111101 или 0.0.2.125
Сообразительный читатель уже заметил, что не обязательно каждый раз переводить все байты адреса и маски в двоичную систему счисления. Чтобы понять, где адрес сети будет в точности повторять IP-адрес, достаточно посмотреть на те байты в маске, которые имеют значение 255 (это как раз восемь единиц). В примере выше первые два байта маски равны 255, следовательно, первые два байта IP-адреса просто перенесутся в адрес сети без изменений. Последний байт маски — это 0, значит и последний байт адреса сети тоже будет равен 0. Остается выполнить операцию поразрядной конъюнкции только над третьим байтом IP-адреса и маски, чтобы найти третий байт адреса сети, и задача решена.