42. (Л) Знайомство з моделлю OSI¶
Зміст лекції¶
- Навіщо потрібна модель OSI
- Сім рівнів моделі OSI
- Інкапсуляція та декапсуляція даних
- OSI vs TCP/IP
- Як модель OSI допомагає програмісту
Навіщо потрібна модель OSI¶
Коли ви відкриваєте сайт у браузері, за лічені мілісекунди відбувається безліч речей: запит проходить через драйвер мережевої карти, перетворюється на електричні або радіосигнали, мандрує по маршрутизаторах інтернету, знову стає байтами на сервері, а потім текстом у HTTP-відповіді. Усе це — десятки взаємопов'язаних задач: адресація, надійна передача, шифрування, формат даних.
Щоб не змішувати їх в одну величезну задачу «передати дані по мережі», у 1984 році ISO (International Organization for Standardization) запропонувала модель OSI (Open Systems Interconnection) — концептуальний поділ мережевої взаємодії на сім рівнів.
Аналогія з поштою
Уявіть, як ви відправляєте лист:
- Ви пишете текст (зміст листа).
- Конверт із адресою відправника та одержувача.
- Поштове відділення відповідає за маршрутизацію між містами.
- Літак чи машина фізично перевозить мішки з листами.
Кожен учасник знає лише свій рівень. Поштар не читає лист, ви не вибираєте літак, а літак не дбає, чи правильно написана адреса. Те саме робить OSI — розділяє мережеву взаємодію на незалежні шари.
Принципи моделі¶
- Шарова архітектура — кожен рівень виконує свою задачу і не залежить від внутрішньої реалізації сусідів.
- Чіткі інтерфейси — рівень взаємодіє лише з рівнем безпосередньо вище та нижче.
- Інкапсуляція — рівень додає свій заголовок до даних і передає вниз; на іншому боці заголовки знімаються знизу вгору.
Сім рівнів моделі OSI¶
graph TD
L7["7. Прикладний (Application)"]
L6["6. Представлення (Presentation)"]
L5["5. Сеансовий (Session)"]
L4["4. Транспортний (Transport)"]
L3["3. Мережевий (Network)"]
L2["2. Канальний (Data Link)"]
L1["1. Фізичний (Physical)"]
L7 --> L6 --> L5 --> L4 --> L3 --> L2 --> L1
style L7 fill:#fa5252,stroke:#333,color:#fff
style L6 fill:#fd7e14,stroke:#333,color:#fff
style L5 fill:#fab005,stroke:#333,color:#000
style L4 fill:#82c91e,stroke:#333,color:#000
style L3 fill:#15aabf,stroke:#333,color:#fff
style L2 fill:#339af0,stroke:#333,color:#fff
style L1 fill:#7950f2,stroke:#333,color:#fff
Розглянемо кожен рівень — згори донизу, як проходять дані від програми до проводу.
7. Прикладний рівень (Application)¶
Це рівень, з яким працює користувач і програміст. Тут живуть протоколи, що визначають формат повідомлень між програмами:
- HTTP / HTTPS — веб
- FTP, SFTP — передача файлів
- SMTP, IMAP, POP3 — електронна пошта
- DNS — перетворення доменів на IP
- WebSocket, gRPC — двостороння комунікація
import urllib.request
# Програміст працює саме на цьому рівні
response = urllib.request.urlopen("https://example.com")
print(response.status)
Коли ви викликаєте urlopen, бібліотека формує HTTP-запит — це і є дані прикладного рівня.
6. Рівень представлення (Presentation)¶
Відповідає за формат даних: кодування й стиснення. Саме тут текст перетворюється на байти, а JSON — на UTF-8.
| Що робить | Приклади |
|---|---|
| Кодування | UTF-8, ASCII, Base64 |
| Стиснення | gzip, brotli |
| Серіалізація | JSON, XML, Protobuf |
text = "Hello, world!"
encoded = text.encode("utf-8") # text -> bytes (presentation)
decoded = encoded.decode("utf-8") # bytes -> text
На практиці
У сучасних мережах рівень представлення часто «вбудований» у бібліотеки прикладного рівня. Наприклад, Python автоматично кодує рядки в UTF-8 при відправці HTTP-запиту.
5. Сеансовий рівень (Session)¶
Керує сесіями між двома сторонами: відкриває з'єднання, підтримує його, закриває. Сюди потрапляють механізми авторизації, токенів, cookie-сесій (хоча на практиці більшість цього робиться на прикладному рівні).
Приклади концепцій сеансу:
- авторизація користувача та підтримка стану входу
- відновлення з'єднання після обриву
- синхронізація сторін у голосових/відео-дзвінках
4. Транспортний рівень (Transport)¶
Гарантує надійну (або швидку) доставку даних між програмами. На цьому рівні з'являється поняття порту — числа, що ідентифікує конкретну програму на машині.
Два головні протоколи:
| Протокол | Властивості | Коли використовувати |
|---|---|---|
| TCP | Надійний, з'єднання, порядок | HTTP, бази даних, SSH |
| UDP | Без з'єднання, швидкий, без гарантій | DNS, відеодзвінки, ігри |
Детально розглянемо в наступній лекції.
3. Мережевий рівень (Network)¶
Відповідає за маршрутизацію пакетів між мережами. Саме тут живе IP-адреса — глобальний ідентифікатор пристрою в інтернеті.
graph LR
A["Ваш ПК<br/>192.168.1.10"] --> R1["Маршрутизатор<br/>домашній"]
R1 --> R2["Маршрутизатор<br/>провайдера"]
R2 --> R3["Маршрутизатор<br/>дата-центру"]
R3 --> B["Сервер<br/>93.184.216.34"]
style A fill:#339af0,stroke:#333,color:#fff
style B fill:#51cf66,stroke:#333,color:#000
Ключовий протокол — IP (Internet Protocol), із двома версіями: IPv4 (192.168.1.1) та IPv6 (2001:0db8::1).
2. Канальний рівень (Data Link)¶
Передає дані між двома сусідніми вузлами — наприклад, між вашим комп'ютером і Wi-Fi роутером. Тут з'являється MAC-адреса — апаратний ідентифікатор мережевої карти.
Приклади технологій:
- Ethernet — провідна мережа
- Wi-Fi (IEEE 802.11) — бездротова
- PPP — точка-точка
1. Фізичний рівень (Physical)¶
Найнижчий рівень: електричні сигнали, радіохвилі, світло у волокні. Тут визначаються характеристики середовища: напруга, частота, тип роз'єму.
| Середовище | Приклад |
|---|---|
| Мідь | Ethernet-кабель (RJ-45) |
| Оптичне волокно | SFP-модулі дата-центрів |
| Радіо | Wi-Fi, Bluetooth, 5G |
Інкапсуляція та декапсуляція даних¶
Коли програма надсилає повідомлення, дані рухаються згори вниз через рівні. Кожен рівень додає свій заголовок (header) — цей процес називається інкапсуляцією.
graph TD
A["📄 Дані програми<br/>HTTP GET /index.html"] --> B["+ TCP header<br/>(порт 80, seq, ack...)"]
B --> C["+ IP header<br/>(IP джерела та призначення)"]
C --> D["+ Ethernet header<br/>(MAC джерела та призначення)"]
D --> E["⚡ Біти на дроті"]
style A fill:#fa5252,stroke:#333,color:#fff
style B fill:#82c91e,stroke:#333,color:#000
style C fill:#15aabf,stroke:#333,color:#fff
style D fill:#339af0,stroke:#333,color:#fff
style E fill:#7950f2,stroke:#333,color:#fff
На іншому боці відбувається зворотний процес — декапсуляція: кожен рівень знімає свій заголовок і передає дані вище.
Назви одиниць даних¶
На різних рівнях ту саму «порцію даних» називають по-різному:
| Рівень | Назва |
|---|---|
| Прикладний / Представлення / Сеансовий | Data (дані) |
| Транспортний | Segment (TCP) / Datagram (UDP) |
| Мережевий | Packet (пакет) |
| Канальний | Frame (кадр) |
| Фізичний | Bits (біти) |
Чому це важливо знати
Коли ви читаєте документацію на Wireshark, tcpdump або помилки на кшталт MTU exceeded, терміни «фрейм», «пакет», «сегмент» зустрічаються на кожному кроці. Знаючи рівні, ви одразу розумієте, де саме виникла проблема.
OSI vs TCP/IP¶
OSI — модель теоретична. У реальному інтернеті використовується спрощена модель TCP/IP із чотирьох рівнів. Вона з'явилася раніше і виявилася більш практичною.
graph LR
subgraph "OSI (7 рівнів)"
O7["Application"]
O6["Presentation"]
O5["Session"]
O4["Transport"]
O3["Network"]
O2["Data Link"]
O1["Physical"]
end
subgraph "TCP/IP (4 рівні)"
T4["Application"]
T3["Transport"]
T2["Internet"]
T1["Link"]
end
O7 -.-> T4
O6 -.-> T4
O5 -.-> T4
O4 -.-> T3
O3 -.-> T2
O2 -.-> T1
O1 -.-> T1
Відповідність:
| OSI | TCP/IP | Приклади |
|---|---|---|
| Application + Presentation + Session | Application | HTTP, DNS, SMTP |
| Transport | Transport | TCP, UDP |
| Network | Internet | IP, ICMP |
| Data Link + Physical | Link | Ethernet, Wi-Fi |
Що використовувати
На практиці кажуть «4-рівнева модель TCP/IP», коли описують реальну роботу інтернету, і «7-рівнева модель OSI», коли пояснюють концепції або обговорюють мережеве обладнання. Ці моделі не конкурують — вони доповнюють одна одну.
Як модель OSI допомагає програмісту¶
Здавалося б — навіщо програмісту, який пише веб-сервер, знати про MAC-адреси та електричні сигнали? Виявляється, рівні OSI постійно «прориваються» в повсякденну роботу.
Діагностика проблем¶
Коли щось не працює, перше питання — на якому рівні виникла помилка:
| Симптом | Рівень | Інструмент |
|---|---|---|
ConnectionRefusedError |
Транспортний | telnet, nc |
Name or service not known |
Прикладний (DNS) | dig, nslookup |
No route to host |
Мережевий | ping, traceroute |
| Повільний канал, втрати пакетів | Канальний / Фізичний | iperf, ethtool |
| Невірне кодування символів | Представлення | iconv, hex-перегляд |
Вибір технологій¶
- Чат із тисячею клієнтів → транспортний рівень: TCP (надійність) або WebSocket (на TCP).
- Пошук серверів у локальній мережі → канальний рівень: broadcast / multicast.
- VPN → мережевий рівень: тунелювання IP.
- Балансувальник навантаження буває L4 (TCP) і L7 (HTTP) — це прямі посилання на рівні OSI.
Розуміння бібліотек¶
Багато бібліотек чітко відповідають конкретному рівню:
import socket # рівень 4 (TCP/UDP)
import http.client # рівень 7 (HTTP)
import json # рівень 6 (формат даних)
Чим краще ви розумієте, де лежить кожна абстракція, тим легше підібрати правильний інструмент.
Підсумок¶
| Рівень | № | Що робить | Приклади |
|---|---|---|---|
| Application | 7 | Логіка програм | HTTP, DNS, SMTP |
| Presentation | 6 | Формат, кодування, стиснення | UTF-8, JSON, gzip |
| Session | 5 | Керування сесіями | NetBIOS, RPC |
| Transport | 4 | Доставка програмі (порти) | TCP, UDP |
| Network | 3 | Маршрутизація між мережами | IP, ICMP |
| Data Link | 2 | Передача між сусідами | Ethernet, Wi-Fi |
| Physical | 1 | Сигнали в середовищі | RJ-45, оптика, радіо |
Ключові принципи:
- OSI — концептуальна модель, реальний інтернет працює за TCP/IP.
- Кожен рівень знає лише сусідів — згори і знизу.
- Інкапсуляція додає заголовки при відправленні, декапсуляція — знімає при отриманні.
- Розуміння рівнів прискорює діагностику мережевих проблем у рази.
Корисні посилання¶
- Cloudflare — What is the OSI model?
- Cloudflare — OSI vs TCP/IP
- RFC 1122 — Requirements for Internet Hosts
- Wireshark User's Guide
Знайшли помилку чи бажаєте додати інформацію, щоб покращити курс? Створіть issue на GitHub