OSI L7: Прикладний рівень (Application Layer)¶
Що таке прикладний рівень?¶
Прикладний рівень — це інтерфейс між мережею та користувачем/додатком. Він надає мережеві сервіси безпосередньо програмам користувача.
┌─────────────────────────────────────────────────────────────────┐
│ L7 = Те, з чим взаємодіє користувач │
│ │
│ ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐ │
│ │ Browser │ │ Email │ │ SSH │ │ FTP │ │
│ │ HTTP │ │ SMTP │ │ Client │ │ Client │ │
│ └────┬────┘ └────┬────┘ └────┬────┘ └────┬────┘ │
│ │ │ │ │ │
│ ═════╪═════════════╪═════════════╪═════════════╪═══════════ │
│ │ │ │ │ │
│ └─────────────┴─────────────┴─────────────┘ │
│ │ │
│ Network Stack │
└─────────────────────────────────────────────────────────────────┘
Основні протоколи L7¶
Огляд¶
| Протокол | Порт | Призначення |
|---|---|---|
| HTTP/HTTPS | 80/443 | Веб |
| FTP/SFTP | 21/22 | Передача файлів |
| SMTP | 25/465/587 | Відправка пошти |
| POP3/IMAP | 110/143, 995/993 | Отримання пошти |
| DNS | 53 | Резолюція доменів |
| SSH | 22 | Безпечний віддалений доступ |
| DHCP | 67/68 | Автоконфігурація мережі |
| SNMP | 161/162 | Моніторинг обладнання |
| NTP | 123 | Синхронізація часу |
| LDAP | 389/636 | Каталоги, автентифікація |
HTTP/HTTPS¶
HTTP Request¶
┌─────────────────────────────────────────────────────────────────┐
│ GET /api/users HTTP/1.1 │
│ Host: api.example.com │
│ User-Agent: Mozilla/5.0 │
│ Accept: application/json │
│ Accept-Language: uk,en │
│ Authorization: Bearer eyJhbGc... │
│ Connection: keep-alive │
│ │
│ [Request body — для POST/PUT] │
└─────────────────────────────────────────────────────────────────┘
│ │
│ └── Resource path
└── HTTP Method
HTTP Response¶
┌─────────────────────────────────────────────────────────────────┐
│ HTTP/1.1 200 OK │
│ Date: Sat, 17 Jan 2026 12:00:00 GMT │
│ Content-Type: application/json; charset=utf-8 │
│ Content-Length: 1234 │
│ Cache-Control: max-age=3600 │
│ X-Request-Id: abc123 │
│ │
│ {"users": [{"id": 1, "name": "Ivan"}, ...]} │
└─────────────────────────────────────────────────────────────────┘
│
└── Status Code (200 = OK)
HTTP Methods¶
| Method | Опис | Idempotent | Body |
|---|---|---|---|
| GET | Отримати ресурс | Так | Ні |
| POST | Створити ресурс | Ні | Так |
| PUT | Замінити ресурс | Так | Так |
| PATCH | Частково оновити | Ні | Так |
| DELETE | Видалити | Так | Ні |
| HEAD | Тільки headers | Так | Ні |
| OPTIONS | Доступні методи | Так | Ні |
HTTP Status Codes¶
┌─────────────────────────────────────────────────────────────────┐
│ 1xx — Informational │
│ 100 Continue │
│ 101 Switching Protocols (WebSocket) │
├─────────────────────────────────────────────────────────────────┤
│ 2xx — Success │
│ 200 OK │
│ 201 Created │
│ 204 No Content │
├─────────────────────────────────────────────────────────────────┤
│ 3xx — Redirection │
│ 301 Moved Permanently │
│ 302 Found (temporary redirect) │
│ 304 Not Modified (cache) │
├─────────────────────────────────────────────────────────────────┤
│ 4xx — Client Error │
│ 400 Bad Request │
│ 401 Unauthorized │
│ 403 Forbidden │
│ 404 Not Found │
│ 429 Too Many Requests │
├─────────────────────────────────────────────────────────────────┤
│ 5xx — Server Error │
│ 500 Internal Server Error │
│ 502 Bad Gateway │
│ 503 Service Unavailable │
│ 504 Gateway Timeout │
└─────────────────────────────────────────────────────────────────┘
HTTP/2 та HTTP/3¶
┌─────────────────────────────────────────────────────────────────┐
│ HTTP/1.1 HTTP/2 HTTP/3 │
│ (1997) (2015) (2022) │
├─────────────────────────────────────────────────────────────────┤
│ Text-based Binary Binary │
│ 1 request/conn Multiplexed Multiplexed │
│ No compression Header compression Header compression │
│ TCP TCP QUIC (UDP) │
│ Server Push 0-RTT │
└─────────────────────────────────────────────────────────────────┘
HTTPS (HTTP + TLS)¶
# Перевірити HTTPS
curl -v https://example.com 2>&1 | grep -E "(SSL|TLS|subject|issuer)"
# SSL Labs тест
# https://www.ssllabs.com/ssltest/
DNS (Domain Name System)¶
Як працює DNS¶
┌─────────────────────────────────────────────────────────────────┐
│ Запит: "Яка IP у example.com?" │
│ │
│ Client ───────▶ Local DNS ───────▶ Root DNS (.com) │
│ │ Resolver │ │
│ │ ▼ │
│ │ TLD DNS (.com) │
│ │ │ │
│ │ ▼ │
│ │ Authoritative DNS (example.com) │
│ │ │ │
│ │◀───────── 93.184.216.34 ◀───────────┘ │
│ │
│ Відповідь кешується на кожному етапі │
└─────────────────────────────────────────────────────────────────┘
DNS Record Types¶
| Тип | Опис | Приклад |
|---|---|---|
| A | IPv4 адреса | example.com → 93.184.216.34 |
| AAAA | IPv6 адреса | example.com → 2606:2800:220:1:... |
| CNAME | Alias | www.example.com → example.com |
| MX | Mail server | example.com → mail.example.com |
| TXT | Текст (SPF, DKIM) | v=spf1 include:_spf.google.com |
| NS | Name server | example.com → ns1.example.com |
| SOA | Start of Authority | Primary NS, admin email, serials |
| PTR | Reverse DNS | 34.216.184.93 → example.com |
| SRV | Service location | _sip._tcp.example.com |
DNS команди¶
# Простий запит
dig example.com
# або
nslookup example.com
# Конкретний тип запису
dig example.com MX
dig example.com TXT
# Використати конкретний DNS сервер
dig @8.8.8.8 example.com
# Трасування DNS
dig +trace example.com
# Reverse DNS
dig -x 93.184.216.34
# Коротка відповідь
dig +short example.com
# 93.184.216.34
SSH (Secure Shell)¶
SSH Handshake¶
┌─────────────────────────────────────────────────────────────────┐
│ Client Server │
│ │ │ │
│ │ 1. TCP connection (port 22) │ │
│ │ ─────────────────────────────────────────────▶ │ │
│ │ │ │
│ │ 2. Protocol version exchange │ │
│ │ ◀═══════════════════════════════════════════▶ │ │
│ │ "SSH-2.0-OpenSSH_8.9" │ │
│ │ │ │
│ │ 3. Key exchange (DH, ECDH) │ │
│ │ ◀═══════════════════════════════════════════▶ │ │
│ │ │ │
│ │ 4. Server host key verification │ │
│ │ (fingerprint check) │ │
│ │ │ │
│ │ 5. User authentication │ │
│ │ - Password │ │
│ │ - Public key (recommended) │ │
│ │ - Keyboard-interactive │ │
│ │ │ │
│ │ 6. Encrypted session established │ │
│ │ ════════════════════════════════════════════▶ │ │
└─────────────────────────────────────────────────────────────────┘
SSH команди¶
# Базове підключення
ssh user@server.com
# З портом
ssh -p 2222 user@server.com
# З конкретним ключем
ssh -i ~/.ssh/id_ed25519 user@server.com
# Port forwarding (local)
ssh -L 8080:localhost:80 user@server.com
# Локальний 8080 → Сервер localhost:80
# Port forwarding (remote)
ssh -R 9090:localhost:3000 user@server.com
# Сервер 9090 → Локальний localhost:3000
# SOCKS proxy
ssh -D 1080 user@server.com
# Локальний SOCKS5 проксі на 1080
# SCP (копіювання файлів)
scp file.txt user@server:/path/to/
scp -r folder/ user@server:/path/to/
# SFTP
sftp user@server.com
SSH Config¶
# ~/.ssh/config
Host myserver
HostName 192.168.1.100
User admin
Port 22
IdentityFile ~/.ssh/id_ed25519
ServerAliveInterval 60
Host *
AddKeysToAgent yes
IdentitiesOnly yes
# Тепер можна:
ssh myserver
Email протоколи¶
SMTP (Sending Mail)¶
┌─────────────────────────────────────────────────────────────────┐
│ Client (MUA) Server (MTA) │
│ │ │ │
│ │ EHLO client.com │ │
│ │ ────────────────────────▶│ │
│ │ │ │
│ │ 250-server.com Hello │ │
│ │◀──────────────────────── │ │
│ │ │ │
│ │ MAIL FROM:<from@x.com> │ │
│ │ ────────────────────────▶│ │
│ │ │ │
│ │ RCPT TO:<to@y.com> │ │
│ │ ────────────────────────▶│ │
│ │ │ │
│ │ DATA │ │
│ │ ────────────────────────▶│ │
│ │ │ │
│ │ Subject: Hello │ │
│ │ Message body... │ │
│ │ . │ │
│ │ ────────────────────────▶│ │
│ │ │ │
│ │ 250 OK │ │
│ │◀──────────────────────── │ │
└─────────────────────────────────────────────────────────────────┘
Порти:
- 25 — SMTP (server-to-server)
- 465 — SMTPS (deprecated)
- 587 — SMTP Submission (client-to-server, STARTTLS)
POP3 vs IMAP¶
┌─────────────────────────────────────────────────────────────────┐
│ POP3 IMAP │
├─────────────────────────────────────────────────────────────────┤
│ Завантажує листи на клієнт Синхронізує з сервером │
│ Видаляє з сервера (зазвичай) Зберігає на сервері │
│ Один пристрій Багато пристроїв │
│ Порти: 110, 995 (SSL) Порти: 143, 993 (SSL) │
│ Простий Складніший, більше функцій │
└─────────────────────────────────────────────────────────────────┘
DHCP (Dynamic Host Configuration Protocol)¶
DHCP DORA¶
┌─────────────────────────────────────────────────────────────────┐
│ Client DHCP Server │
│ │ │ │
│ │ 1. DISCOVER (broadcast) │ │
│ │ "Хто може дати мені IP?" │ │
│ │ ═══════════════════════════════════════════════▶ │ │
│ │ │ │
│ │ 2. OFFER │ │
│ │ "Я пропоную 192.168.1.100" │ │
│ │ ◀═══════════════════════════════════════════════ │ │
│ │ │ │
│ │ 3. REQUEST (broadcast) │ │
│ │ "Я беру 192.168.1.100" │ │
│ │ ═══════════════════════════════════════════════▶ │ │
│ │ │ │
│ │ 4. ACKNOWLEDGE │ │
│ │ "OK, 192.168.1.100 твоя на 24 години" │ │
│ │ ◀═══════════════════════════════════════════════ │ │
│ │
│ D - Discover │
│ O - Offer │
│ R - Request │
│ A - Acknowledge │
└─────────────────────────────────────────────────────────────────┘
DHCP надає¶
- IP адресу
- Маску підмережі
- Default gateway
- DNS серверів
- Lease time
- NTP серверів (опціонально)
SNMP (Simple Network Management Protocol)¶
┌─────────────────────────────────────────────────────────────────┐
│ SNMP — моніторинг мережевого обладнання │
│ │
│ ┌────────────┐ ┌────────────┐ │
│ │ Manager │ GET/SET │ Agent │ │
│ │ (Zabbix, │ ───────▶ │ (Router, │ │
│ │ PRTG) │ │ Switch) │ │
│ │ │ Response │ │ │
│ │ │ ◀─────── │ │ │
│ │ │ │ │ │
│ │ │ TRAP │ │ │
│ │ │ ◀═══════ │ (alert!) │ │
│ └────────────┘ └────────────┘ │
│ │
│ Порти: 161 (agent), 162 (trap receiver) │
│ Версії: v1 (небезпечна), v2c, v3 (з шифруванням) │
└─────────────────────────────────────────────────────────────────┘
NTP (Network Time Protocol)¶
┌─────────────────────────────────────────────────────────────────┐
│ NTP Hierarchy (Stratum) │
│ │
│ Stratum 0: Atomic clocks, GPS │
│ │ │
│ ▼ │
│ Stratum 1: Primary servers (time.nist.gov) │
│ │ │
│ ▼ │
│ Stratum 2: Secondary servers (pool.ntp.org) │
│ │ │
│ ▼ │
│ Stratum 3+: Your servers, clients │
│ │
│ Порт: 123/UDP │
│ Точність: мілісекунди по інтернету │
└─────────────────────────────────────────────────────────────────┘
# Перевірити синхронізацію
timedatectl status
# Налаштувати NTP (systemd)
timedatectl set-ntp true
# Статус chrony
chronyc tracking
chronyc sources -v
WebSocket¶
┌─────────────────────────────────────────────────────────────────┐
│ WebSocket — full-duplex комунікація через HTTP upgrade │
│ │
│ Client Server │
│ │ │ │
│ │ HTTP Upgrade Request │ │
│ │ Upgrade: websocket │ │
│ │ Connection: Upgrade │ │
│ │ ─────────────────────────────────────────────▶ │ │
│ │ │ │
│ │ HTTP 101 Switching Protocols │ │
│ │ ◀───────────────────────────────────────────── │ │
│ │ │ │
│ │ ═══════════ WebSocket Connection ═══════════ │ │
│ │ (bidirectional) │ │
│ │ ◀═══════════════════════════════════════════▶ │ │
│ │
│ Використання: Chat, Live updates, Gaming, Notifications │
└─────────────────────────────────────────────────────────────────┘
Діагностика L7¶
HTTP/HTTPS¶
# Базовий запит
curl -v https://example.com
# Тільки headers
curl -I https://example.com
# POST з JSON
curl -X POST https://api.example.com/users \
-H "Content-Type: application/json" \
-d '{"name": "Ivan"}'
# З автентифікацією
curl -u user:pass https://api.example.com/
curl -H "Authorization: Bearer TOKEN" https://api.example.com/
# Вимірювання часу
curl -w "@curl-format.txt" -o /dev/null -s https://example.com
# HTTPie (user-friendly)
http GET https://api.example.com/users
DNS¶
# Базовий запит
dig example.com
host example.com
nslookup example.com
# Перевірка DNS сервера
dig @8.8.8.8 example.com
dig @1.1.1.1 example.com
# Всі записи
dig example.com ANY
# Перевірка propagation
# https://www.whatsmydns.net/
Email¶
# Тест SMTP
telnet smtp.example.com 25
# або
openssl s_client -connect smtp.example.com:465
# Перевірити MX
dig example.com MX
# SPF/DKIM/DMARC
dig example.com TXT | grep -E "(spf|dkim|dmarc)"
SSH¶
# Debug з'єднання
ssh -vvv user@server
# Перевірити ключ сервера
ssh-keyscan server.com
# Тест автентифікації
ssh -o PreferredAuthentications=publickey user@server
Wireshark фільтри для L7¶
http # Весь HTTP трафік
http.request.method == "POST" # POST запити
http.response.code == 404 # 404 відповіді
dns # DNS запити
dns.qry.name contains "example"# DNS запити з "example"
ssh # SSH трафік
smtp # SMTP трафік
tls.handshake # TLS handshake
Типові проблеми та рішення¶
| Проблема | Симптоми | Діагностика | Рішення |
|---|---|---|---|
| DNS не резолвить | "Name not resolved" | dig domain |
Перевірити DNS server |
| HTTP 502/504 | Bad Gateway/Timeout | curl -v |
Backend не відповідає |
| SSL error | Certificate errors | openssl s_client |
Оновити сертифікат |
| SMTP rejected | Email не відправляється | telnet smtp 25 |
SPF/DKIM, relay access |
| SSH timeout | Connection timed out | ssh -vvv |
Firewall, port |
API та веб-сервіси¶
REST API¶
┌─────────────────────────────────────────────────────────────────┐
│ REST — стандартний підхід до API │
│ │
│ GET /users — список користувачів │
│ GET /users/123 — конкретний користувач │
│ POST /users — створити користувача │
│ PUT /users/123 — оновити користувача │
│ DELETE /users/123 — видалити користувача │
│ │
│ Stateless, Resource-based, HTTP methods │
└─────────────────────────────────────────────────────────────────┘
GraphQL¶
┌─────────────────────────────────────────────────────────────────┐
│ GraphQL — query language для API │
│ │
│ POST /graphql │
│ { │
│ user(id: 123) { │
│ name │
│ email │
│ posts { │
│ title │
│ } │
│ } │
│ } │
│ │
│ Один endpoint, клієнт вибирає потрібні поля │
└─────────────────────────────────────────────────────────────────┘
gRPC¶
┌─────────────────────────────────────────────────────────────────┐
│ gRPC — high-performance RPC framework (Google) │
│ │
│ • Protocol Buffers (бінарна серіалізація) │
│ • HTTP/2 (multiplexing) │
│ • Streaming (client, server, bidirectional) │
│ • Code generation │
│ │
│ Використання: Microservices, Mobile backends │
└─────────────────────────────────────────────────────────────────┘
Підсумок¶
Прикладний рівень забезпечує:
- HTTP/HTTPS — веб-комунікація
- DNS — резолюція доменних імен
- SSH — безпечний віддалений доступ
- Email — SMTP, IMAP, POP3
- DHCP — автоматична конфігурація мережі
- NTP — синхронізація часу
Це рівень, з яким безпосередньо взаємодіють користувачі та додатки.
Див. також¶
- Модель OSI — огляд всіх рівнів
- Рівень представлення — попередній рівень
- DNS — детальніше про DNS
- SSH ключі — налаштування SSH
- TLS/SSL — безпека з'єднань
Шлях: networking/basics/osi-7-application.md