← Назад к вопросам

Какие знаешь сетевые протоколы в модели OSI?

1.0 Junior🔥 121 комментариев
#Сети и протоколы

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI29 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Сетевые протоколы в модели 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;
}

Таблица протоколов по слоям

СлойНазваниеПротоколыЕдиница данных
7ApplicationHTTP, FTP, SMTP, DNS, SSHMessage
6PresentationSSL/TLS, JPEG, MPEGData
5SessionRPC, NetBIOS, PPTPData
4TransportTCP, UDP, SCTPSegment/Datagram
3NetworkIP, ICMP, IGMPPacket
2Data LinkEthernet, Wi-Fi, PPPFrame
1PhysicalКабель, волокно, радиоBit

Лучшие практики для backend разработчика

  1. Знай TCP vs UDP:

    • Web API → TCP/HTTP(S)
    • Real-time → UDP (игры, видео)
    • Reliable → TCP
  2. Используй правильные сокет-опции:

    setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, &reuse, sizeof(reuse));
    setsockopt(sock, SOL_SOCKET, SO_KEEPALIVE, &keepalive, sizeof(keepalive));
    
  3. Мониторь сетевые соединения:

    • netstat, ss для диагностики
    • TCP TIME_WAIT состояние при закрытии
  4. Оптимизируй производительность:

    • Используй асинхронные сокеты (epoll, select, kqueue)
    • Batch обработку пакетов

Итог

Для backend разработчика критически важны Слои 3-4:

  • IP (Слой 3) для адресации
  • TCP/UDP (Слой 4) для транспорта
  • HTTP/HTTPS (Слой 7) для приложений

Хорошее понимание этих слоёв помогает писать быстрые, надёжные сетевые приложения.

Какие знаешь сетевые протоколы в модели OSI? | PrepBro