Сетевая модель OSI
Мы живём в мире, где каждое мгновение взаимодействуем с невероятно сложной системой коммуникаций. Общение с друзьями в мессенджерах, бесконечная лента коротких видео, просмотр новостей — всё это кажется нам настолько обыденным, что мы редко задумываемся о том, как это вообще работает.
Представьте себе механизм, который позволяет миллиардам устройств по всему миру — будь то компьютер, телевизор, телефон или умная колонка — общаться друг с другом. И что самое важное, эти устройства «понимают» друг друга вне зависимости от страны производства, фирмы-изготовителя или года выпуска. Ваш старенький ноутбук без проблем отправляет сообщение на новейший смартфон вашего друга на другом континенте.
Для реализации такого механизма нужны общие правила, которые определяют порядок взаимодействия всех компонентов системы. Такие правила называются протоколом. Протокол — это своего рода соглашение между устройствами о том, как именно они будут обмениваться информацией.
В начале 80-х годов международные организации по стандартизации разработали модель, которая сыграла огромную роль в развитии сетей. Она называется моделью взаимодействия открытых систем или моделью OSI (Open System Interconnection). Суть этой модели в том, чтобы разделить весь процесс передачи данных на семь уровней:
- Физический
- Канальный
- Сетевой
- Транспортный
- Сеансовый
- Представления
- Прикладной
Каждому уровню задан строгий функционал и определён перечень протоколов, которые должны работать на нём.
Можно сказать, что модель OSI описывает, как работает весь интернет — как электрические сигналы или световые импульсы передаются по проводам и оптоволокну из одной части света в другую и в итоге превращаются в смешную картинку, которую вам скидывают в любимом мессенджере.
Уровни модели OSI
Прежде чем разбирать каждый уровень по отдельности, давайте проследим путь данных целиком. Представьте, что вы хотите открыть страницу в браузере. Вы вводите адрес future-step.ru и нажимаете Enter. Что происходит дальше?
На самом верхнем, прикладном уровне ваш браузер формирует запрос — своего рода «письмо» с инструкциями: какую страницу загрузить, какой браузер отправляет запрос, какой язык предпочитает пользователь. К этому запросу добавляется заголовок со служебной информацией.
Затем данные спускаются на уровень представления, где при необходимости сжимаются или шифруются. Далее — на сеансовый уровень, который следит за поддержанием соединения между вашим компьютером и сервером.
На транспортном уровне наш запрос разбивается на небольшие кусочки — сегменты. Это похоже на то, как длинное письмо разрезают на несколько частей, чтобы их было удобнее отправлять.
Сетевой уровень добавляет к каждому сегменту адрес отправителя и получателя — IP-адреса. Теперь данные называются пакетами и знают, куда им нужно попасть.
Канальный уровень упаковывает пакеты во фреймы (кадры), добавляя физические адреса устройств — MAC-адреса. Также здесь добавляется контрольная сумма для проверки целостности всех данных.
Наконец, на физическом уровне фреймы превращаются в последовательности нулей и единиц, которые передаются по проводам в виде электрических сигналов, по оптоволокну в виде световых импульсов или по воздуху в виде радиоволн.
На стороне получателя всё происходит в обратном порядке: сигналы собираются в биты, биты — во фреймы, фреймы распаковываются в пакеты, и так далее, пока на прикладном уровне не появится исходный запрос. Процесс упаковки данных называется инкапсуляцией, а обратный процесс распаковки — декапсуляцией.
Теперь давайте подробно разберём каждый уровень, двигаясь снизу вверх.
Уровень 1: Физический
На физическом уровне происходит самая базовая вещь — передача нулей и единиц между устройствами. Здесь нет никакой логики, никаких адресов, никакого понимания того, что именно передаётся. Только сырые биты.
Эти биты превращаются в физические сигналы. Если вы подключены к интернету через кабель, то нули и единицы представлены изменением электрического напряжения в проводах. Если используете оптоволокно — это импульсы света. Если Wi-Fi — изменения в радиоволнах.
Самый распространённый кабель для домашнего интернета — витая пара.
Это кабель, внутри которого находятся восемь медных проводников, скрученных попарно. Такая конструкция снижает помехи и улучшает качество передачи. На концах кабеля обжаты разъёмы RJ45, которые вставляются в сетевые устройства.
На физическом уровне работают простейшие устройства — концентраторы (хабы) и повторители. Они не анализируют данные, а просто передают сигнал дальше, при необходимости усиливая его.
Основные протоколы физического уровня — Ethernet (для проводных сетей) и Wi-Fi (для беспроводных).
Уровень 2: Канальный
Физический уровень позволяет связать два устройства напрямую. Но что делать, если в сети несколько устройств? Как понять, кому именно предназначены данные? Как проверить, не повредились ли они при передаче? Решением этих проблем занимается канальный уровень.
На канальном уровне появляется первый вид адресации — MAC-адрес. Это уникальный идентификатор, который присваивается каждому сетевому устройству ещё на заводе. Можно сказать, что MAC-адрес — это «серийный номер» вашей сетевой карты.
MAC-адрес состоит из 12 шестнадцатеричных символов, обычно записывается через дефис или двоеточие: 90-2B-34-5E-57-BA. Первые шесть цифр (три октета) обозначают производителя сетевой карты и называются OUI (Organizational Unique Identifier). Оставшиеся 6 цифр уникальны для каждого устройства и обозначают определённую сетевую плату или же NIC (Network Interface Controller), установленную в устройство.
Узнать MAC-адрес своего компьютера можно через командную строку Windows, введя команду ipconfig /all и найдя строку «Физический адрес».
На канальном уровне данные упаковываются во фреймы (или кадры). Можно представить это так: мы берём наши данные, кладём их в конверт и подписываем его — указываем MAC-адрес отправителя и MAC-адрес получателя. Также к фрейму добавляется контрольная сумма — специальное число, которое позволяет проверить, не повредились ли данные в пути.
Когда фрейм приходит на устройство-получатель, оно вычисляет контрольную сумму заново и сравнивает с той, что записана во фрейме. Если числа совпадают — всё в порядке, данные приняты корректно. Если нет — фрейм отбрасывается как повреждённый.
На канальном уровне работает важное сетевое устройство — коммутатор (или свитч). В отличие от простого хаба, который просто рассылает данные всем подряд, коммутатор анализирует MAC-адреса и отправляет фрейм только тому устройству, которому он предназначен.
Коммутатор ведёт специальную таблицу, где записывает, какой MAC-адрес к какому порту подключён. Когда приходит новый фрейм, коммутатор смотрит адрес получателя, находит его в таблице и отправляет данные только в нужный порт. Это делает сеть быстрее и безопаснее.
Уровень 3: Сетевой
Канальный уровень отлично справляется со связью внутри одной локальной сети. Но интернет — это миллионы отдельных сетей, соединённых между собой. Как отправить данные из вашей домашней сети на сервер, который находится на другом континенте? Этим занимается сетевой уровень.
Если MAC-адрес — это «серийный номер» устройства, то IP-адрес — это его «почтовый адрес» в сети. И это очень точная аналогия.
Представьте, что вы отправляете бумажное письмо другу. На конверте вы пишете адрес: город Москва, улица Пушкина, дом 5к. По этому адресу почтальон находит нужный дом. Точно так же IP-адрес позволяет найти нужное устройство среди миллиардов других.
IP-адрес (в версии IPv4) записывается как четыре числа от 0 до 255, разделённые точками: 192.168.1.3. Каждое число представляет один байт, то есть весь адрес занимает 32 бита.
Важное отличие от MAC-адреса: IP-адрес не «вшит» в устройство, а назначается программно. Ваш домашний роутер выдаёт IP-адреса всем устройствам в сети. При подключении к другой сети (например, к Wi-Fi в кафе) ваш телефон получит другой IP-адрес.
При этом стоит различать «серые» IP-адреса и «белые». «Серые» адреса — это те самые 192.168.x.x, которые вы видите в настройках домашней сети. Их ещё называют приватными. Такие адреса существуют только внутри вашей локальной сети и нигде за её пределами не видны.
Роутер раздаёт их всем устройствам: телефону, ноутбуку, телевизору. Причём у вашего соседа тоже есть устройство с адресом 192.168.1.3 — и это нормально, потому что эти адреса никогда не пересекаются в интернете, они существуют как бы в «параллельных мирах».
Под приватные диапазоны зарезервированы конкретные диапазоны адресов: 10.0.0.0–10.255.255.255, 172.16.0.0–172.31.255.255 и 192.168.0.0–192.168.255.255. Всё, что входит в эти диапазоны — серое, всё остальное — потенциально белое.
«Белые» адреса — это публичные IP, видимые из любой точки интернета. Например, 130.255.77.28 — такой адрес есть у вашего роутера со стороны интернет-провайдера. Именно по нему внешний мир вас и находит. Когда вы открываете сайт, сервер отвечает не на 192.168.1.3 вашего ноутбука, а на белый адрес вашего роутера — и уже роутер разбирается, кому именно внутри сети передать ответ.
IP-адрес состоит из двух частей: адрес сети и адрес хоста (устройства). Адрес сети общий для всех устройств в одной сети (например, это 192.168.1.х), а адрес хоста уникален для каждого (например, наш хост будет иметь адрес 3: 192.168.1.3).
Вернёмся к аналогии с почтой. Адрес «город Москва, улица Пушкина» — это как адрес сети, а «дом 5к» — как адрес хоста. Все дома на улице Пушкина имеют один «сетевой» адрес (улицу), но разные номера домов.
Как понять, какая часть IP-адреса относится к сети, а какая — к хосту? Для этого используется маска подсети.
Маска записывается так же, как IP-адрес: 255.255.255.0. В двоичном виде маска состоит из единиц (они отмечают часть сети) и нулей (они отмечают часть хоста).
Рассмотрим пример. Пусть IP-адрес — 192.168.1.3, а маска — 255.255.255.0. Маска говорит нам: первые три числа (192.168.1) — это адрес сети, а последнее число (3) — адрес хоста. Значит, адрес сети — 192.168.1.0.
Чтобы это вычислить, нам нужно применить побитовую конъюнкцию маски сети (255.255.255.0) к IP-адресу (192.168.1.3):
11000000 10101000 00000001 00000011 (192 168 1 3)
И
11111111 11111111 11111111 00000000 (255 255 255 0)
=
11000000 10101000 00000001 00000000 (192 168 1 0)
Получим значение адреса сети 11000000 10101000 00000001 00000000 или 192.168.1.0 в десятичной системе.
Для получения адреса хоста нужно сначала применить инверсию к маске подсети, а затем побитовую конъюнкцию.
11000000 10101000 00000001 00000011 (192 168 1 3)
И
00000000 00000000 00000000 11111111 (0 0 0 255)
=
00000000 00000000 00000000 00000011 (0 0 0 3)
В таком случае получим 0.0.0.3, что и будет адресом хоста. Всего в такой сети может быть 256 адресов (от 0 до 255), но использовать для устройств можно только 254. Почему? Два адреса зарезервированы!
Адрес 192.168.1.0 — это адрес самой сети, его нельзя присваивать устройствам. А адрес 192.168.1.255 — это широковещательный адрес. Он используется, когда нужно отправить сообщение сразу всем устройствам в сети.
Представьте, что учитель в классе говорит: «Внимание всем!» Это и есть широковещательное сообщение. В сети такие сообщения отправляются на широковещательный адрес, и все устройства их получают.
Зачем вообще нужны эти широковещательные сообщения? Самый частый пример — когда ваш ноутбук только что подключился к сети и ещё не знает, у кого просить интернет. Он не может написать роутеру напрямую, потому что не знает его адрес. Тогда ноутбук отправляет широковещательный запрос на 192.168.1.255 — что-то вроде «Эй, кто здесь раздаёт адреса?». Роутер слышит это и отвечает.
На сетевом уровне фреймы канального уровня превращаются в пакеты. К каждому пакету добавляется заголовок с IP-адресами отправителя и получателя.
Основной протокол сетевого уровня — IP (Internet Protocol). Именно от него и произошло название «IP-адрес».
На этом уровне работают маршрутизаторы (роутеры). Их задача — найти лучший путь для доставки пакета.
Интернет — это сложная паутина из множества сетей, и от вашего компьютера до сервера может быть десятки промежуточных точек. Маршрутизатор анализирует адрес назначения и решает, куда отправить пакет дальше.
Уровень 4: Транспортный
На транспортном уровне решается важная задача: как надёжно доставить данные от одного приложения к другому. Здесь пакеты разбиваются на сегменты, и работают два главных протокола — TCP и UDP.
TCP: надёжный, но не быстрый
TCP (Transmission Control Protocol) — это протокол, который гарантирует доставку данных. Перед отправкой он устанавливает соединение между отправителем и получателем через процедуру «тройного рукопожатия»: клиент отправляет запрос, сервер подтверждает, клиент подтверждает в ответ. Только после этого начинается передача.
Во время передачи TCP следит, чтобы каждый сегмент был доставлен. Если какой-то потерялся — протокол запрашивает его повторно. Также TCP следит за порядком: даже если сегменты пришли вразнобой, он соберёт их правильно.
TCP используется везде, где важна точность: загрузка веб-страниц, скачивание файлов, электронная почта.
UDP: быстрый, но не надёжный
UDP (User Datagram Protocol) работает иначе. Он просто отправляет данные и не проверяет, дошли ли они. Никакого установления соединения, никаких подтверждений, никаких повторных отправок.
Звучит не очень надёжно, не так ли?
Но у UDP есть огромное преимущество — скорость. Он идеально подходит для ситуаций, где важнее получить данные быстро, чем получить их все.
Вспомните видеозвонки в мессенджере Max. Что вам важнее: видеть собеседника в реальном времени с редкими помехами или получить идеальную картинку с задержкой в несколько секунд? Конечно, первое. Поэтому видеозвонки, онлайн-игры и стриминг используют UDP.
Уровень 5: Сеансовый
Сеансовый уровень управляет «разговором» между двумя устройствами. Он устанавливает соединение, поддерживает его на протяжении всего обмена данными и корректно завершает, когда работа закончена.
Одна из важных функций — создание контрольных точек. Представьте, что вы скачиваете большой файл, и вдруг интернет пропадает. Благодаря контрольным точкам после восстановления соединения скачивание продолжится с того места, где прервалось, а не начнётся заново.
Сеансовый уровень также определяет режим связи: полудуплекс (устройства «говорят» по очереди) или дуплекс (одновременно в обе стороны).
В современных сетях функции сеансового уровня часто «растворяются» в других протоколах. Например, протокол TLS отвечает за безопасность соединения, а TCP — за его поддержание.
Уровень 6: Представления
Уровень представления занимается форматом данных. Его задача — сделать так, чтобы данные, отправленные одним устройством, были понятны другому, даже если они используют разные системы.
Здесь происходят три основных процесса:
Кодирование — преобразование данных в нужный формат. Например, текст может быть закодирован в ASCII, UTF-8 или Unicode. Уровень представления следит, чтобы отправитель и получатель «говорили на одном языке».
Сжатие — уменьшение размера данных для экономии трафика и ускорения передачи. Когда вы смотрите видео онлайн, оно передаётся в сжатом формате.
Шифрование — защита данных от посторонних глаз. Когда вы заходите на сайт по HTTPS, ваши данные шифруются с помощью протокола SSL/TLS именно на этом уровне.
Уровень 7: Прикладной
Прикладной уровень — это то, с чем вы взаимодействуете напрямую. Браузер, почтовый клиент, мессенджер — все эти программы работают на прикладном уровне.
Когда вы открываете сайт, браузер использует протокол HTTP (или его защищённую версию HTTPS). Когда отправляете письмо — SMTP. Когда скачиваете файл с сервера — FTP. Когда вводите адрес сайта вместо непонятных цифр IP-адреса — работает DNS, который переводит человеческие имена в машинные адреса.
Именно на прикладном уровне формируется исходное сообщение — тот самый HTTP-запрос, который потом путешествует через все уровни вниз, обрастая заголовками, превращается в электрические сигналы, летит по проводам на сервер, и там проходит обратный путь наверх, пока не превратится в веб-страницу в вашем браузере.
Итоги
Модель OSI может показаться сложной, но её красота — в чётком разделении обязанностей. Каждый уровень занимается своим делом и не вмешивается в работу других.
Физический уровень передаёт биты. Канальный — упаковывает их во фреймы и добавляет MAC-адреса. Сетевой — создаёт пакеты с IP-адресами и находит маршрут. Транспортный — обеспечивает надёжную доставку. Сеансовый — управляет соединением. Уровень представления — форматирует данные. Прикладной — работает с пользователем.
Благодаря этой системе ваш смартфон может без проблем общаться с сервером на другом конце планеты, даже если они сделаны разными компаниями, в разных странах, с разницей в десять лет. Универсальные правила OSI делают это возможным.