Какие знаешь сетевые протоколы в модели OSI?
Комментарии (1)
Ответ сгенерирован нейросетью и может содержать ошибки
Сетевые протоколы в модели OSI
Модель OSI состоит из 7 слоёв, каждый с собственными протоколами и назначением. Как backend разработчик, должен хорошо понимать все уровни.
Структура модели OSI
Уровень 7 (Application) — Приложения
Уровень 6 (Presentation) — Представление данных
Уровень 5 (Session) — Управление сеансами
Уровень 4 (Transport) — Транспортировка
Уровень 3 (Network) — Маршрутизация
Уровень 2 (Data Link) — Передача кадров
Уровень 1 (Physical) — Физический слой
Слой 7 — Application (Приложения)
Протоколы для работы конечных приложений:
HTTP/HTTPS — веб-протокол
// Запрос по HTTP
GET /api/users HTTP/1.1
Host: example.com
Content-Type: application/json
FTP — передача файлов SMTP/POP3 — электронная почта DNS — разрешение имён SSH — защищённый терминальный доступ Telnet — незащищённый терминальный доступ SNMP — управление сетью XMPP — мессенджеры
Слой 6 — Presentation (Представление данных)
Преобразование, шифрование, сжатие данных:
SSL/TLS — шифрование транспорта
// Пример: HTTPS использует TLS на слое 6
// Данные шифруются перед отправкой на Слой 4
const char* encrypted = encrypt_data(plaintext, cipher_suite);
JPEG/PNG/GIF — сжатие изображений MPEG — сжатие видео ASCII/Unicode — кодировки текста
Слой 5 — Session (Управление сеансами)
Установление, поддержание и завершение сеансов:
RPC — удалённый вызов процедур NetBIOS — протокол Microsoft PPTP — виртуальные сети
// Управление сеансом (логин → работа → логаут)
// Сервер отслеживает состояние соединения
Слой 4 — Transport (Транспортировка)
Самый важный для backend разработчика!
TCP (Transmission Control Protocol)
#include <sys/socket.h>
#include <netinet/in.h>
// Создание TCP сокета
int sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
// Подключение к серверу
struct sockaddr_in addr;
addr.sin_family = AF_INET;
addr.sin_port = htons(80);
inet_pton(AF_INET, "192.168.1.1", &addr.sin_addr);
connect(sock, (struct sockaddr*)&addr, sizeof(addr));
TCP характеристики:
- Надёжный — гарантирует доставку
- Порядковый — сохраняет последовательность пакетов
- Ориентирован на соединение — трёхэтапное рукопожатие (3-way handshake)
- Управление потоком — предотвращает переполнение буфера
- Медленнее UDP — из-за гарантий
UDP (User Datagram Protocol)
// Создание UDP сокета
int sock = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
// Отправка датаграммы (нет соединения!)
struct sockaddr_in addr;
addr.sin_family = AF_INET;
addr.sin_port = htons(53); // DNS
inet_pton(AF_INET, "8.8.8.8", &addr.sin_addr);
sendto(sock, buffer, len, 0, (struct sockaddr*)&addr, sizeof(addr));
UDP характеристики:
- Ненадёжный — пакеты могут теряться
- Без соединения — отправляем сразу
- Быстрее TCP — минимум overhead
- Использование: DNS, видеостриминг, онлайн игры, VoIP
SCTP (Stream Control Transmission Protocol)
- Промежуточный вариант между TCP и UDP
- Надёжность TCP с приемлемой задержкой
- Используется в телекоммуникациях
Слой 3 — Network (Маршрутизация)
IP (Internet Protocol) — основной протокол интернета
// IPv4 адрес
struct sockaddr_in addr;
addr.sin_family = AF_INET;
addr.sin_addr.s_addr = inet_addr("192.168.1.1");
// IPv6 адрес
struct sockaddr_in6 addr6;
addr6.sin6_family = AF_INET6;
inet_pton(AF_INET6, "2001:db8::1", &addr6.sin6_addr);
Другие протоколы слоя 3:
- ICMP — диагностика (ping, traceroute)
- IGMP — групповая передача
- IPSec — шифрование на сетевом уровне
Слой 2 — Data Link (Передача кадров)
Ethernet — проводная сеть
// MAC адреса (вместо IP)
// ff:ff:ff:ff:ff:ff — broadcast
// 00:11:22:33:44:55 — unicast
Другие протоколы:
- Wi-Fi (802.11) — беспроводная сеть
- PPP — Point-to-Point Protocol
- Frame Relay — устаревший WAN протокол
Слой 1 — Physical (Физический слой)
Физическая среда передачи:
- Витая пара (Ethernet кабель)
- Оптическое волокно
- Коаксиальный кабель
- Радиоволны (Wi-Fi, 5G)
Практический пример: Отправка HTTP запроса
#include <sys/socket.h>
#include <arpa/inet.h>
#include <unistd.h>
#include <cstring>
int main() {
// Слой 4: TCP сокет
int sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
// Слой 3: Маршрутизация по IP
struct sockaddr_in addr;
addr.sin_family = AF_INET;
addr.sin_port = htons(80);
inet_pton(AF_INET, "93.184.216.34", &addr.sin_addr); // example.com
// Слой 2: Ethernet кадры (автоматически)
connect(sock, (struct sockaddr*)&addr, sizeof(addr));
// Слой 7: HTTP запрос
const char* request = "GET / HTTP/1.1\r\nHost: example.com\r\n\r\n";
send(sock, request, strlen(request), 0);
// Слой 6: Получаем ответ (может быть zlib сжат)
char buffer[4096];
recv(sock, buffer, sizeof(buffer), 0);
close(sock);
return 0;
}
Таблица протоколов по слоям
| Слой | Название | Протоколы | Единица данных |
|---|---|---|---|
| 7 | Application | HTTP, FTP, SMTP, DNS, SSH | Message |
| 6 | Presentation | SSL/TLS, JPEG, MPEG | Data |
| 5 | Session | RPC, NetBIOS, PPTP | Data |
| 4 | Transport | TCP, UDP, SCTP | Segment/Datagram |
| 3 | Network | IP, ICMP, IGMP | Packet |
| 2 | Data Link | Ethernet, Wi-Fi, PPP | Frame |
| 1 | Physical | Кабель, волокно, радио | Bit |
Лучшие практики для backend разработчика
-
Знай TCP vs UDP:
- Web API → TCP/HTTP(S)
- Real-time → UDP (игры, видео)
- Reliable → TCP
-
Используй правильные сокет-опции:
setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, &reuse, sizeof(reuse)); setsockopt(sock, SOL_SOCKET, SO_KEEPALIVE, &keepalive, sizeof(keepalive)); -
Мониторь сетевые соединения:
netstat,ssдля диагностики- TCP TIME_WAIT состояние при закрытии
-
Оптимизируй производительность:
- Используй асинхронные сокеты (epoll, select, kqueue)
- Batch обработку пакетов
Итог
Для backend разработчика критически важны Слои 3-4:
- IP (Слой 3) для адресации
- TCP/UDP (Слой 4) для транспорта
- HTTP/HTTPS (Слой 7) для приложений
Хорошее понимание этих слоёв помогает писать быстрые, надёжные сетевые приложения.