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

Как соотносятся уровни протоколов в модели OSI?

1.7 Middle🔥 191 комментариев
#Сети и протоколы

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

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

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

Уровни протоколов в модели OSI

Модель OSI (Open Systems Interconnection) описывает взаимодействие между компьютерами в сети через 7 уровней абстракции. Каждый уровень предоставляет сервисы уровню выше и использует сервисы уровня ниже. Понимание этой иерархии критично для C/C++ Backend разработчика при работе с сетевыми приложениями.

Семь уровней модели OSI

7. Application Layer (Прикладной слой)

  • Протоколы: HTTP, HTTPS, FTP, SMTP, DNS, SSH, Telnet
  • Взаимодействие с пользовательскими приложениями
  • Предоставляет интерфейсы для отправки/получения данных

6. Presentation Layer (Уровень представления)

  • Форматирование и кодирование данных (ASCII, Unicode, SSL/TLS)
  • Шифрование и сжатие информации
  • Преобразование между форматами (JSON, XML, Protocol Buffers)

5. Session Layer (Сеансовый уровень)

  • Управление сеансами между приложениями
  • Синхронизация, восстановление соединения
  • Менее используется в современных приложениях (функции часто на прикладном уровне)

4. Transport Layer (Транспортный уровень)

  • Протоколы: TCP, UDP, SCTP
  • Обеспечение надёжной или быстрой доставки данных
  • Контроль потока, обнаружение ошибок
  • Порты (0-65535)

3. Network Layer (Сетевой уровень)

  • Протоколы: IP (IPv4, IPv6), ICMP, IGMP, BGP
  • Маршрутизация пакетов между сетями
  • IP-адреса, логическая адресация

2. Data Link Layer (Канальный уровень)

  • Протоколы: Ethernet, PPP, Wi-Fi (802.11), ARP
  • MAC-адреса и физическая адресация
  • Обнаружение и исправление ошибок на уровне фреймов

1. Physical Layer (Физический уровень)

  • Электрические сигналы, кабели, разъёмы
  • Биты (0 и 1), напряжение, частота
  • Концентраторы, повторители

Взаимодействие между уровнями

// C/C++ Backend перспектива: HTTP запрос

// Application (7) - HTTP
GET /api/users HTTP/1.1
Host: example.com

// Transport (4) - TCP
Src_Port: 54321, Dst_Port: 80, Seq: 1000, ACK: 2000

// Network (3) - IP
Src_IP: 192.168.1.10, Dst_IP: 93.184.216.34

// Data Link (2) - Ethernet
Src_MAC: 00:11:22:33:44:55, Dst_MAC: AA:BB:CC:DD:EE:FF

// Physical (1)
10101010 11001100 01010101 ...  // электрические сигналы

Инкапсуляция и добавление заголовков

Каждый уровень добавляет свой заголовок (header) к данным:

#include <iostream>
#include <string>

struct HTTPFrame {
    // Layer 7: Application
    std::string http_header;
    std::string http_body;
};

struct TCPSegment {
    // Layer 4: Transport
    uint16_t src_port;
    uint16_t dst_port;
    uint32_t seq_num;
    uint32_t ack_num;
    HTTPFrame payload;  // данные с уровня 7
};

struct IPPacket {
    // Layer 3: Network
    uint32_t src_ip;
    uint32_t dst_ip;
    uint8_t ttl;  // Time To Live
    TCPSegment payload;  // данные с уровня 4
};

struct EthernetFrame {
    // Layer 2: Data Link
    uint8_t src_mac[6];
    uint8_t dst_mac[6];
    IPPacket payload;  // данные с уровня 3
};

Практическое применение для Backend разработчика

TCP/IP соединение (Layer 4-3):

#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>

int sock = socket(AF_INET, SOCK_STREAM, 0);  // TCP - Layer 4
struct sockaddr_in addr;
addr.sin_family = AF_INET;  // IPv4 - Layer 3
addr.sin_port = htons(8080);  // Port - Layer 4
addr.sin_addr.s_addr = inet_aton("192.168.1.1");  // IP - Layer 3
connect(sock, (struct sockaddr*)&addr, sizeof(addr));

HTTP запрос (Layer 7):

const char* http_request = "GET / HTTP/1.1\r\nHost: example.com\r\n\r\n";
send(sock, http_request, strlen(http_request), 0);  // Send через Layer 4

Ключевые соотношения

  • Нисходящее направление (при отправке): Layer 7 → 1, каждый слой добавляет заголовок
  • Восходящее направление (при приёме): Layer 1 → 7, каждый слой удаляет свой заголовок
  • Прозрачность: Высокие уровни не знают о деталях нижних уровней
  • Независимость: Можно менять реализацию одного уровня без изменения других

Для C/C++ Backend разработчика наиболее важны Layer 4 (TCP/UDP) и Layer 7 (HTTP, DNS), но понимание всей модели помогает правильно диагностировать сетевые проблемы и оптимизировать производительность.