Начну с наболевшего. С 2024 года я работаю в IT: сначала был специалистом техподдержки, теперь главный специалист отдела информационной безопасности. За это время прошёл кучу собеседований. И знаете, что меня бесило больше всего? Первый вопрос — про модели OSI и TCP/IP. Сколько ни повторял, через месяц всё вылетало из головы. Знакомая ситуация? Вот я и решил написать эту статью своими словами. Чтобы было, где подсмотреть и освежить память перед следующим собеседованием и может кому-то помочь.

Начну с модели OSI, что же это такое ? Это эталонная модель взаимодействия устройств в сети, как локальной (устройства в корпоративной сети или дома) так и глобальной (устройства в интернете), состоящая из 7 уровней передачи информации. Сейчас расскажу про сами уровни и зачем они вообще нужны.

Модель OSI
Модель OSI

L1 – физический уровень

Это самый низкий уровень модели OSI. Он нужен для передачи информации на понятном для машин языке. А наши устройства, как ни крути, общаются между собой только языком кодирования — нулями и единицами. Выглядит это примерно так «010101010».
Так вот, для того чтобы эту информацию передать из точки А в точку Б, как раз и создан физический уровень. Его часто называют «уровнем проводов», потому что информация на нём передаётся либо по проводам, либо по радиоволнам.
Объясню проще. Провода — это тот самый серенький кабель RJ45, который торчит из системника или ноутбука и воткнут в розетку, чтобы у вас работал интернет. А радиоволны — это уже то, что раздаёт ваш Wi-Fi роутер, чтобы вы могли подключиться к нему с телефона и смотреть «YouTube» или листать рилсы в «Instagram».
Короче говоря, вся информация, которая приходит на наши компьютеры из сети или уходит обратно в сеть, проходит через физический уровень. И идёт она строго в формате битов «тех самых нулей и единиц».

Радиоволны WiFi роутера
Радиоволны WiFi роутера
Ethernet кабель (Rj45)
Ethernet кабель (Rj45)

L2 – Канальный уровень

Вот информация в виде битов пришла на наше устройство через физический уровень. Но дальше-то что? В сети ведь не один компьютер, а куча устройств, ноутбук, принтер, компьютеры коллег. Как понять, кому именно из них предназначалась эта информация?
Вот здесь и нужен канальный уровень. Если бы его не было, данные передавались бы всем подряд – как это делали старые HUB (про них, может, расскажу в другой статье, когда доберёмся до сетевого оборудования). Представляете бардак? Твой компьютер получил бы письмо, адресованное принтеру, и наоборот. Чтобы такого не происходило и нужен канальный уровень.

Но как он узнаёт, где какое устройство? У каждого устройства, которое выходит в сеть, есть свой уникальный MAC-адрес. Это физический адрес устройства, который вшит в сетевую карту или в материнскую плату прямо на заводе. Грубо говоря, это имя компьютера, которое ему дали при рождении, и оно не меняется на протяжении всей жизни (если его не перебить в ручную).

И вот когда вы включаете компьютер, он пока никого не знает. И коммутатор (switch), который стоит в вашей сети, тоже никого не знает. И тут начинает работать специальный протокол ARP (Address Resolution Protocol). Работает он просто, когда компьютер хочет отправить данные другому устройству, но не знает его MAC-адрес, он кричит в сеть: «Эй, кто тут с таким-то IP-адресом? Отзовитесь и скажите свой MAC» Это называется широковещательный ARP-запрос, и кричат здесь именно сами устройства, а не коммутатор. Кричат все устройства в сети, а отвечает только тот, у кого этот IP-адрес.

Теперь самое интересное. Коммутатор (switch) – это главное устройство на канальном уровне. Он сидит и внимательно слушает, кто кому и что отвечает. Когда устройство отвечает на ARP-запрос, коммутатор смотрит «Ага, с какого порта пришёл ответ и какой у этого ответа MAC-адрес» И записывает себе в специальную MAC-таблицу порт номер 3 – это Маша, порт номер 5 – это Петя, порт номер 8 – это принтер. Это называется динамическим обучением. И теперь, когда данные придут снова, коммутатор уже не будет отправлять широковещательный ARP-запрос, а просто заглянет в свою табличку и отправит кадр строго на тот порт, где сидит получатель.

Так что вся магия канального уровня строится на двух вещах: протокол ARP, с помощью которого устройства сами находят друг друга по IP-адресу (и да, они могут покричать, если надо), и коммутатор со своей MAC-таблицей, который запоминает, где кто находится, и отправляет данные точно по адресу. В результате информация не болтается где попало, а идёт прямиком к нужному устройству.

MAC-address
MAC-address

L3 – Сетевой уровень

Допустим, мы разобрались с локальной сетью. У нас есть MAC-адреса, есть ARP, есть коммутатор. Но проблема в том что все это работает только внутри одной локальной сети. А если нам нужно отправить данные за пределы локальной сети что делать ? Тут физический и канальный уровни не справятся и для этого нужен сетевой уровень.

Если совсем по-простому, то сетевой уровень берёт наш кадр (который мы сформировали на L2) и добавляет к нему сверху IP-адрес получателя и отправителя. И после этого вся конструкция перестаёт называться кадром, а именуется пакетом.

Но на самом деле, если углубиться, на этом уровне есть множество технологий без которых бы интернет просто не существовал бы. Тут работают штуки вроде динамической маршрутизации (OSPF, BGP) — это когда роутеры между собой договариваются, по какому пути пакет быстрее передать до получателя. Если где-то порвался кабель, они автоматически перестраивают маршрут. (Советую почитать подробней про эти технологии).

И ещё одна важная технология — NAT (Network Address Translation). Дело в том, что у твоего компьютера внутри офиса или дома почти наверняка так называемый серый (частный) IP-адрес. В интернете такие адреса не маршрутизируются, они только для локального использования. А как тогда данные уходят наружу? Тут в игру вступает устройство поумнее коммутатора — роутер (или маршрутизатор). Именно он, а не коммутатор, занимается подменой адресов. Когда твой пакет с серым IP доходит до роутера, роутер подменяет этот серый адрес на свой белый (публичный) IP, запоминает у себя в таблице, кто и куда пошёл, и отправляет пакет интернет. Когда приходит ответ, роутер смотрит в свою табличку, понимает, что ответ предназначался именно тебе, подменяет белый адрес обратно на твой серый и передаёт пакет внутрь локальной сети. Короче говоря, на данном уровне происходит как подмена IP-адресов, так и формирование их в пакеты для отправки в глобальную сеть.

L4 – Транспортный уровень

Допустим, пакет с IP-адресом получателя дошёл до нужного хоста, что дальше? На хосте работает десяток приложений: браузер, мессенджер, почтовый клиент, игровой сервер и.т.д. Если просто вручить пакет операционке, она не поймёт, какому процессу его отдать. Именно эту задачу решает транспортный уровень — он адресует данные конкретному приложению при помощи портов.

Порт — это числовой идентификатор приложения (как адрес квартиры в многоэтажном доме). В заголовке сегмента или дейтаграммы (это то во что переделывается пакет) указываются два порта, источника и назначения. Порт назначения — это, как правило, стандартный номер, закреплённый за сервисом: 80 для HTTP, 443 для HTTPS, 53 для DNS. Браузер не гадает, он просто знает, что HTTPS-сервер слушает 443-й порт и.т.д. Порт источника — динамический, выделяется операционкой на время соединения из диапазона 49152–65535. Именно по нему ответный трафик возвращается в нужное приложение если запрос ушёл с порта 54321, ответ на него придёт туда же, а не в соседнюю вкладку.

Но адресация — не единственная функция транспортного уровня. Он ещё определяет способ передачи, с установлением соединения и гарантиями или без в этом ему помогают два протокола TCP и UDP.

TCP (Transmission Control Protocol) — протокол с предварительным установлением соединения. Перед отправкой данных клиент и сервер обмениваются служебными пакетами «SYN, SYN-ACK, ACK» — это называется тройным рукопожатием. После этого каждое отправленное сообщение подтверждается получателем. TCP следит за порядком пакетов, переспрашивает потерянные, отбрасывает дубликаты и гарантирует, что данные на приёмной стороне будут собраны именно в той последовательности, в которой их отправили. Плата за надёжность — задержки и избыточный трафик подтверждений. TCP используют там, где целостность критична, например: веб-сайты, почта, передача файлов.

UDP (User Datagram Protocol) — вообще не парится. Никаких рукопожатий, никаких подтверждений, никакого контроля порядка. Просто шлёт дейтаграммы в сеть без гарантии, что они дойдут. Если пакет потерялся — ну и ладно. UDP выбирают, когда скорость важнее надёжности, например: потоковое видео, VoIP, онлайн-игры и.т.д. Там потеря пары пакетов обернётся пиксельным шумом или микро-заиканием звука.

TCP и UDP протоколы
TCP и UDP протоколы

L5 – Сеансовый уровень

После того как данные доставили между клиентом (нами) и сервером (тем, с кем мы общаемся в интернете, ну например YouTube), нам открывается видео, мы начинаем его смотреть, и вдруг раз и у на середине обрывается связь. Мы перезаходим, а тот момент, на котором мы остановились, утерян. Либо еще хуже, мы полчаса правили документ на удалённом сервере, связь упала и правь все заново.

Вот чтобы такого не было, нужен сеансовый уровень. Пока идёт общение между клиентом и сервером, он расставляет контрольные точки — сохраняет сессию в промежутках. Если связь рвётся, при восстановлении мы не начинаем с нуля, а возвращаемся ровно к последней сохранённой точке. То есть видео продолжится с места обрыва, а документ откроется в том же состоянии, где вы остановились. Сеансовый уровень просто страхует, чтоб не терять прогресс. Есть несколько видов технологии подержания сеансов между устройствами. NetBIOS – старая технология, использовалась в локальных сетях, в основном в старых версиях Windows. Когда два устройства устанавливали связь между собой, NetBIOS открывал между ними сеанс и следил за ним. Если связь обрывалась, он пытался восстановить соединение самостоятельно, без участия пользователя. SIP (Session Initiation Protocol) – более современный протокол, который используется в интернет-телефонии, видеозвонках и конференциях. Он работает поверх протокола UDP, то есть не ждёт подтверждений, а просто шлёт данные потоком. Если во время разговора связь рвётся, SIP пытается переустановить сеанс, чтобы вы не заметили обрыва. Именно этот протокол поднимает сессию, когда вы звоните кому-то в WhatsApp, Skype или через IP-телефонию, также поддерживает сеанс при передачи данных где нужна сохранность, то есть поверх протокола TCP.

L6 – Уровень представления

На этом уровне все данные преобразуются в читабельный для всех устройств формат, например Linux и Windows общаются на разных языках (разная кодировка при передачи и чтении), или же сервер старый а ты отправляешь данные с нового компа и чтоб он мог прочитать ему нужен старый формат кодировки или же просто какой-то «универсальный» как UTF-8. Далее выбирается шифрование данных чтоб они передавались в безопасности от сторонних глаз, например RSA (старая школа, ключи длинные, но надежные), AES (симметричное шифрование, быстрое и мощное), или же TLS (это метод комбинированного шифрования, вы часто видели его как замочек в браузере слева вверху). Далее после всех операций с кодировкой и шифрованием данные проходят процесс сжатия, так как количество передаваемой информации может быть огромным и для простоты его передачи он сжимается. В общем уровень представления делает все чтоб устройства понимали друг друга при взаимодействии и могли безопасно и в большом количестве передавать данные.

Пример Шифрования
Пример Шифрования
Одна из технологий кодирования данных UTF-8
Одна из технологий кодирования данных UTF-8

L7 – Прикладной уровень

Прикладной уровень нужен чтобы протоколы на серверах могли общаться с программами на компе и отдавать нам информацию. HTTP или HTTPS работает когда ты в браузере открываете сайт, SMTP и POP3 когда пользуетесь почтой, FTP когда передаете файлы, DNS превращает название сайта в цифровой IP-адрес чтобы комп понял куда передавать информацию, и.т.д. Это единственный уровень где данные не преобразуются а просто передаются как есть.

Протокол HTTP работающий на прикладном уровне и отвечает за передачу картинки сайта или приложения
Протокол HTTP работающий на прикладном уровне и отвечает за передачу картинки сайта или приложения
Протокол FTP отвечает за перечу файлов и работает на прикладном уровне
Протокол FTP отвечает за перечу файлов и работает на прикладном уровне
Протокол SMTP работает на прикладном уровне и отвечает за передачу поты
Протокол SMTP работает на прикладном уровне и отвечает за передачу поты

Вот я и разобрал модель OSI так, как я это вижу. Добавить могу, что данные, которые передаются от верхнего уровня к нижнему, называются процессом «Инкапсуляции», а когда данные передаются от нижнего уровня к верхнему, это называется процессом «Декапсуляции». В общем, рассказал всё, что хотел, именно про модель OSI, теперь перехожу к модели TCP/IP.

Дело в том, что модель OSI — это «эталонная» модель взаимодействия устройств в сети, как я и говорил ранее, но она так и не вышла в свет и используется для обучения и более детального понимания всех уровней передачи информации по сети. На практике же применяется модель TCP/IP. Она почти ничем не отличается от модели OSI, отличие только в том, что она имеет 4 уровня передачи данных по сети. Сейчас я про них расскажу, и вы сразу всё поймёте.

Разница между моделями TCP/IP и OSI
Разница между моделями TCP/IP и OSI

L1 — канальный уровень. Он объединяет в себе два уровня модели OSI: физический и канальный. Вот и вся разница.
L2 — межсетевой уровень (он же сетевой). Работает так же, как и сетевой уровень модели OSI.
L3 — транспортный уровень. Работает так же, как и транспортный уровень модели OSI.
L4 — прикладной уровень. Вот он интереснее: он объединяет в себе три верхних уровня модели OSI, то есть прикладной, представления и сеансовый. В принципе, отличий нет, все уровни модели OSI делают свою работу так же, просто теперь они объединены в один уровень, который называется «Прикладной». И да, все процессы передачи информации от верхнего уровня к низшему и наоборот называются также: «Инкапсуляция и Декапсуляция».