Что такое модель 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 м | Беспроводной доступ |
Уровень 2: Канальный (Data Link)
Передача фреймов между устройствами в одной локальной сети. Использует 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)
Модель 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)