EasyТеория10 min

Модель OSI

7 уровней модели OSI, инкапсуляция данных и сравнение с моделью TCP/IP

Что такое модель OSI

OSI (Open Systems Interconnection) -- это эталонная модель, описывающая, как данные передаются по сети. Она разделяет сетевое взаимодействие на 7 уровней, каждый из которых отвечает за свою функцию.

Модель OSI не является протоколом -- это абстракция для понимания сетевых процессов. В реальности используется модель TCP/IP, которая менее строго разделена на уровни.

Зачем знать OSI для System Design

  • Понимание, на каком уровне работает каждая технология
  • Диагностика сетевых проблем (на каком уровне произошёл сбой)
  • Выбор правильного инструмента для задачи
  • Общий язык для общения с сетевыми инженерами

7 уровней OSI

Обзор

7. Application    │ HTTP, gRPC, DNS, SMTP     │ Данные приложения
6. Presentation   │ TLS, SSL, JPEG, UTF-8     │ Формат и шифрование
5. Session        │ RPC, NetBIOS              │ Управление сессией
4. Transport      │ TCP, UDP, QUIC            │ Порты, сегменты
3. Network        │ IP, ICMP, ARP             │ IP-адреса, пакеты
2. Data Link      │ Ethernet, Wi-Fi, PPP      │ MAC-адреса, фреймы
1. Physical       │ Медь, оптика, радио       │ Биты

Уровень 1: Физический (Physical)

Передача битов по физической среде (кабели, радиоволны, оптика).

Среда Скорость Расстояние Применение
Cat5e (медь) 1 Гбит/с 100 м Офис, дата-центр
Cat6a (медь) 10 Гбит/с 100 м Дата-центр
Многомодовое волокно 10-100 Гбит/с 300-2000 м Внутри дата-центра
Одномодовое волокно 100+ Гбит/с 80+ км Между дата-центрами
Wi-Fi 6E до 9.6 Гбит/с 30-50 м Беспроводной доступ

Передача фреймов между устройствами в одной локальной сети. Использует MAC-адреса (48 бит, например AA:BB:CC:DD:EE:FF).

Ключевые технологии:

  • Ethernet -- стандарт для проводных сетей
  • Wi-Fi (802.11) -- беспроводные сети
  • VLAN -- виртуальное разделение локальной сети
  • Switch -- коммутатор, работающий на этом уровне

Уровень 3: Сетевой (Network)

Маршрутизация пакетов между сетями. Использует IP-адреса.

Ключевые технологии:

  • IPv4 / IPv6 -- адресация
  • Router -- маршрутизатор
  • ICMP -- диагностика (ping, traceroute)
  • ARP -- трансляция IP -> MAC

Уровень 4: Транспортный (Transport)

Обеспечивает доставку данных между приложениями. Использует порты (0-65535).

Протокол Гарантии Использование
TCP Надёжная доставка, порядок, контроль потока HTTP, SSH, SMTP
UDP Без гарантий, минимальный overhead DNS, видео, игры
QUIC Надёжность поверх UDP, встроенный TLS HTTP/3

Уровень 5: Сессионный (Session)

Управление сессиями между приложениями. В современных протоколах этот уровень часто объединён с транспортным или прикладным.

Примеры:

  • Установка и поддержание RPC-сессий
  • WebSocket handshake
  • TLS session resumption

Уровень 6: Представления (Presentation)

Преобразование данных: кодирование, сжатие, шифрование.

Примеры:

  • TLS/SSL шифрование
  • Сериализация (JSON, Protocol Buffers, XML)
  • Кодирование символов (UTF-8, ASCII)
  • Сжатие (gzip, brotli)

Уровень 7: Прикладной (Application)

Протоколы, с которыми работает приложение напрямую.

Примеры: HTTP/HTTPS, DNS, SMTP, FTP, gRPC, WebSocket, MQTT.

Инкапсуляция

При передаче данных каждый уровень добавляет свой заголовок (header). Это называется инкапсуляция.

Приложение:    [        Data            ]
Transport:     [ TCP Header |   Data    ]
Network:       [ IP Header | TCP | Data ]
Data Link:     [ Eth Header | IP | TCP | Data | FCS ]
Physical:      [ биты: 0110100110... ]

При получении данных происходит деинкапсуляция -- каждый уровень снимает свой заголовок.

<?php

declare(strict_types=1);

/**
 * Demonstrating encapsulation concept.
 * Each layer adds metadata (headers) to the payload.
 */
final class PacketAnalyzer
{
    /**
     * Simulate packet structure at each OSI layer.
     * Useful for understanding what happens when PHP makes an HTTP request.
     *
     * @return array<string, array{header_size: int, description: string}>
     */
    public static function analyzeHttpPacket(): array
    {
        return [
            'L7_Application' => [
                'header_size' => 200,  // HTTP headers (Host, Content-Type, etc.)
                'description' => 'HTTP request: GET /api/users HTTP/1.1',
            ],
            'L6_Presentation' => [
                'header_size' => 40,   // TLS record header + encryption overhead
                'description' => 'TLS 1.3 encryption wrapper',
            ],
            'L4_Transport' => [
                'header_size' => 20,   // TCP header (src/dst port, seq, ack, flags)
                'description' => 'TCP segment: src_port=49152, dst_port=443',
            ],
            'L3_Network' => [
                'header_size' => 20,   // IP header (src/dst IP, TTL, protocol)
                'description' => 'IP packet: src=192.168.1.10, dst=93.184.216.34',
            ],
            'L2_DataLink' => [
                'header_size' => 18,   // Ethernet header (src/dst MAC) + FCS
                'description' => 'Ethernet frame: src_mac=AA:BB:CC:DD:EE:FF',
            ],
        ];
    }

    /**
     * Calculate overhead of network headers.
     * Important for understanding MTU and fragmentation.
     *
     * @param int $payloadBytes Application data size
     * @return array{total_bytes: int, overhead_percent: float}
     */
    public static function calculateOverhead(int $payloadBytes): array
    {
        // Typical header sizes
        $ethernetHeader = 14 + 4;     // 14 header + 4 FCS
        $ipHeader = 20;               // without options
        $tcpHeader = 20;              // without options
        $tlsRecord = 5 + 16 + 16;    // record header + IV + auth tag

        $totalOverhead = $ethernetHeader + $ipHeader + $tcpHeader + $tlsRecord;
        $totalBytes = $payloadBytes + $totalOverhead;

        return [
            'payload_bytes' => $payloadBytes,
            'overhead_bytes' => $totalOverhead,
            'total_bytes' => $totalBytes,
            'overhead_percent' => round(($totalOverhead / $totalBytes) * 100, 1),
        ];
    }
}

// Small payload: high relative overhead
$small = PacketAnalyzer::calculateOverhead(64);
// overhead: ~55% (for 64-byte payload, headers dominate)

// Large payload: low relative overhead
$large = PacketAnalyzer::calculateOverhead(1400);
// overhead: ~5% (for 1400-byte payload near MTU)
> **Для System Design:** Мелкие пакеты имеют высокий относительный overhead. Это причина, по которой batch-запросы (отправка множества элементов за раз) эффективнее множества мелких запросов. Nagle's algorithm в TCP решает эту проблему на транспортном уровне.

Модель TCP/IP

Сравнение с OSI

TCP/IP -- практическая модель, используемая в реальных сетях. Она объединяет некоторые уровни OSI.

OSI TCP/IP Примеры
7. Application Application HTTP, DNS, SMTP
6. Presentation Application TLS, JSON
5. Session Application WebSocket
4. Transport Transport TCP, UDP
3. Network Internet IP, ICMP
2. Data Link Network Access Ethernet, Wi-Fi
1. Physical Network Access Кабели, радио

Почему TCP/IP победила OSI

  • Простота: 4 уровня вместо 7
  • Практичность: создавалась вместе с реальными протоколами (TCP, IP)
  • Открытость: свободные стандарты (RFC)
  • Интернет: TCP/IP -- основа Интернета

Для интервью: Модель OSI используется для объяснения концепций, а TCP/IP -- для практической работы. На System Design интервью важнее понимать уровни 3-7, потому что именно там принимаются архитектурные решения.

Практические примеры

На каком уровне работает каждая технология

Технология Уровень OSI Что делает
Load Balancer L4 Transport Распределяет TCP-соединения
Load Balancer L7 Application Распределяет HTTP-запросы
Firewall L3/L4 Network/Transport Фильтрует по IP/портам
WAF Application Фильтрует HTTP-запросы
CDN Application Кэширует HTTP-ответы
VPN Network Туннелирует IP-пакеты
DNS Application Разрешает доменные имена

L4 vs L7 Load Balancing

<?php

declare(strict_types=1);

/**
 * Understanding the difference between L4 and L7 load balancing.
 * This affects how you design your system architecture.
 */
final class LoadBalancerComparison
{
    /**
     * L4 Load Balancer characteristics.
     *
     * Works at TCP level - sees only IP addresses and ports.
     * Cannot make decisions based on HTTP content.
     *
     * @return array<string, mixed>
     */
    public static function l4Characteristics(): array
    {
        return [
            'protocol' => 'TCP/UDP',
            'routing_basis' => 'IP address + port number',
            'performance' => 'Very high (millions of connections/sec)',
            'ssl_termination' => 'No (pass-through)',
            'content_inspection' => 'No',
            'sticky_sessions' => 'By source IP only',
            'examples' => ['HAProxy (TCP mode)', 'AWS NLB', 'Linux IPVS'],
            'use_cases' => [
                'Database connection pooling',
                'Non-HTTP protocols (gRPC, MQTT)',
                'Ultra-high throughput requirements',
            ],
        ];
    }

    /**
     * L7 Load Balancer characteristics.
     *
     * Works at HTTP level - can inspect headers, paths, cookies.
     * Can make intelligent routing decisions.
     *
     * @return array<string, mixed>
     */
    public static function l7Characteristics(): array
    {
        return [
            'protocol' => 'HTTP/HTTPS',
            'routing_basis' => 'URL path, headers, cookies, body',
            'performance' => 'High (hundreds of thousands req/sec)',
            'ssl_termination' => 'Yes (terminates TLS)',
            'content_inspection' => 'Yes (HTTP headers, URL)',
            'sticky_sessions' => 'By cookie, header, or URL',
            'examples' => ['Nginx', 'HAProxy (HTTP mode)', 'AWS ALB', 'Envoy'],
            'use_cases' => [
                'Microservice routing (/api/users -> users-service)',
                'A/B testing (route % of traffic)',
                'Rate limiting per endpoint',
                'SSL termination',
            ],
        ];
    }
}
## Диагностика по уровням

При возникновении сетевой проблемы полезно диагностировать по уровням OSI снизу вверх:

Уровень Проверка Инструмент
L1 Physical Кабель подключён? Link up? ip link show, светодиоды
L2 Data Link ARP работает? arp -a, ip neigh
L3 Network Ping проходит? ping, traceroute
L4 Transport Порт открыт? telnet host port, ss -tlnp
L7 Application HTTP отвечает? curl -v, wget

Выводы

  • Модель OSI -- 7 уровней для понимания сетевого взаимодействия
  • TCP/IP -- практическая модель с 4 уровнями, основа Интернета
  • Инкапсуляция добавляет заголовки на каждом уровне (overhead)
  • L4 vs L7 балансировка -- ключевой архитектурный выбор в System Design
  • Диагностика проблем идёт снизу вверх по уровням
  • Для System Design важнее всего уровни 3-7 (IP, TCP/UDP, HTTP)