Ура. Второй уровень закончился, приходит третий уровень (я хотел было написать про 803.2X, про протокол идентификации по паролю на канальном уровне, но, честно говорю, "я о нём только читал", и объяснение его сочетания с всякими крипто-заморочками в WiFi приведёт к ахинее, так что просто упомянем, что такой протокол есть).
Третий уровень. Сетевой. Уровень, на котором происходит самое важное и сложное.
Напомню, в кратце. На первом (физическом) уровне определяется как именно кодировать биты в шипение/моргание. На втором уровне у нас появляется понятие "устройство" (точнее, его номер), "кадр" (и возможность проверить, правильно ли мы приняли его).
Третий уровень - уровень сетевой, позволяет передавать данные между устройствами через "третьих лиц". Главная, важнейшая особенность третьего уровня - маршрутизация.
Заметим, на втором уровне есть некие робкие зачатки этого (коммутатор умеет определять в какой именно порт передать кадр), но сделать сеть на 100000 человек из одних только коммутаторов не получится. Потому что сам протокол не подразумевает "разумного выбора" в направлении передачи данных.
Для определения как именно передавать данные и был создан третий уровень.
В принципе, как и всех остальных, протоколов третьего уровня, есть несколько видов. Но главным, основным и фундаментальным является Протокол Интернета. IP. Протокол, который связывает между собою всех, кто пользуется интернетом.
О маршрутизации мы поговорим чуть позже, пока остановимся на "формате имён". В настоящий момент используется версия 4 протокола, хотя горячие головы порываются перейти на ipv6, всё нижеследующее касается ipv4.
IP-адрес состоит из двух частей: номер сети и номер узла. (Примерно так можно считать, что почтовый адрес (бумажный) состоит из индекса и фамилии получателя). В Большом Интернете (той его части, которую никогда не увидит простой человек у себя дома) используется ещё более важная величина - автономная система, но об этом мы (может быть) поговорим потом. Для дальнейшей терминологии, мы добавим помимо слов "устройство" и "порт", слово "узел" (как объект принимающий/отправляющий данные на третьем уровне).
Пока что, с точки зрения IP, важно деление на номер сети и узла. В силу крохоборства создателей протокола, номер сети и номер узла тщательно упихивается в 4 байта, при этом граница между номером сети и узла проходит (обычно) не по границе байта. Так что без двоичной системы нам не обойтись.
Основное условие - комбинация номера узла и номера сети должна давать 4 байта. Ровно.
Номер сети указывается первым, за ним указывается номер узла. Сети бывают разного размера (от 1 узла до сотен тысяч), так что для определения "где сеть, а где узел" используется маска сети. Если кто знает двоичное счисление, то вот простые формулы (формула применяется к каждому биту по-очереди).
NET=IP AND MASK
HOST = IP AND NOT MASK
Если кто не знает, то вот (занудное) объяснение:
Представим себе адрес (4 байта) в двоичном виде (что такое двоичная система счисления объяснять не буду, из принципа).
Часть из этих нулей и единиц - номер сети, часть номер узла. Для отделения одного от другого мы создаём ещё 4 байта, у которых все биты, которые указывают на номер сети, равны 1, а все биты, указывающие на номер узла - нулю. Так как номер сети идёт первым, все маски вначале имеют единицы, а нули потом (и ни в коем случае не в перемешку или в обратном порядке). Другими словами, после первого нуля в маске больше не может быть единиц.
ИП адрес и маску принято записывать не как число, а как 4 однобайтовых числа через точку.
Например, 192.168.15.4. Маска при этом 255.255.255.0 (т.е. три байта состоят из чистых единиц, четвёртый байт из нулей, это означает, что три байта это номер сети 192.168.15.0, а последний байт - номер узла (.4)).
Повторю, что число бит в номерах может быть не кратным 8. Например, 192.168.129.44 при маске сети 255.255.128.0 будет иметь номер сети 192.168.128, и номер узла 1.44.
Сказать честно, в реальной жизни, это немного неудобно.
Кстати, обратите внимание, маска 255.255.255.255 означает сеть, в которой есть только 1 узел (на самом деле 0, но для удобства работы принято считать, что 1), а маска 0.0.0.0 означает "весь интернет".
Деление на "сеть" и "узел" с одной стороны важно (почему - в следующем уроке), с другой стороны, довольно условно. Например, если у нас есть две сети 192.168.1.0 и 192.168.2.0, то в некоторых случаях, мы их можем объявить одной сетью 192.168.0.0. Это можно сделать только в некоторых случаях (подробности потом).
Заметим, так как биты в маске сети должны идти до победного конца (без промежуточных нулей), то глупо записывать их в длинной форме, когда можно просто указать количество этих самых единиц. Это делают через дробь. Например, 192.168.1.1/24 это то же самое, что 192.168.1.1 mask 255.255.255.0.
ИП адреса бывают 4 видов. Во-первых, это адреса "обратной петли" (т.е. адреса, назначенные узлу для самого себя, т.е. не использующиеся для общения с устройствами снаружи). К таковым относятся адреса 127.0.0.0/8 (/8 - это очень много, это сеть с номером 127 и 2^(3*8) = 24 миллиона адресов).
Во-вторых, это мультикастовые адреса. Об этом мы не скажем ни слова (слишком запутанно, да и не нужно, важно знать, что они есть и для другого их использовать нельзя).
В третьих, это адреса для "частного использования" (т.е. адреса, которые может использовать любой желающий, при условии, что в интернет данные с такими адресами не попадут). Это 192.168.0.0/16, 10.0.0.0/8, 172.16.0.0/12).
Ну и в четвёртых, это обычные адреса, которые используются в интернете. Заметим, они постепенно кончаются, именно по этой причине товарищи рвутся сделать ipv6, в котором на адрес отводится аж 16 байт, так что "хватит всем" (они наивные).
Что это за "частное использование адресов"? Дело в том, что иногда надо сделать локальную сеть без выхода в интернет (в рамках третьего уровня). Для таких сетей (например, для вашей личной сети в пределах квартиры) и выделены частные адреса.
Можно ли использовать другие адреса? Да, можно. Хотите 89.0.0.0/8 для домашней сети? Нет проблем. Только не обижайтесь, если при этом у вас не будет связи с 3/4 питера. Частные адреса нужны, чтобы быть уверенным, что используя этот адрес, не оказаться в ситуации, что с этим номером у вас и локальная машина, и удалённая (с которой вам очень хочется связаться).
С этой проблемой, кстати, сталкиваются домонетки, в которых есть пирринг между сетями. Если у вас в одной сети адреса 192.168.10.0/24, и в другой 192.168.10.0/24, то связи между ними не будет 100%.
Да и вообще, использование "частных" адресов в домонетках - дурной тон. Хотя бы потому, что для домашнего пользователя это уже не частные сети, а внешние (публичные).