OSI / TCP-IP model concept page. 7 OSI layers (Application/Presentation/Session/Transport/Network/Data Link/Physical) mapped to practical TCP/IP stack. Shows where each network device lives (switch=L2, router=L3, NLB/firewall=L4, ALB/WAF/Envoy=L7). Three scenarios: encapsulation-decapsulation HTTP request walkthrough, L4 vs L7 load balancer comparison, troubleshooting by layer (production debugging).
«L4 vs L7 load balancer» — топ-5 networking-вопрос на интервью. «Почему ping ходит, а curl нет?» — топ-5 production-incident. Оба требуют одного — mental model слоёв. Без неё непонятно где живут load balancers, firewalls, gateways, application proxies.
OSI/TCP-IP — словарь, на котором написана документация AWS, Cloudflare, Envoy, iptables и каждый incident-постмортем. «У нас L7 retry на ALB не отрабатывает» — экономит пять минут объяснений. «L3-L4 ACL разрешает, L7 WAF режет» — точно описывает где DROP.
Где знание окупается за минуту:
ping (L3) ходит, nc -zv host 443 (L4) — connection refused. Это не firewall L7, это L4: port закрыт, security group, или service не listen.SSL_ERROR_BAD_CERT. Это L6, не «сеть упала», не перезагружай router.Главный takeaway: encapsulation сверху вниз (каждый слой добавляет header), troubleshooting снизу вверх (cable → IP → TCP → TLS → HTTP). Эта пара правил решает 80% повседневного debugging.
Каждый слой думает только о своих обязанностях и не заглядывает выше. Application говорит про content, Transport — про reliable delivery, Network — про routing, Data Link — про physical hop, Physical — про сигналы. Соседи общаются через хорошо определённый интерфейс.
Семь слоёв OSI — академическая модель. На практике TCP/IP схлопывает 5/6/7 в один «Application»:
| OSI | TCP/IP | Кто здесь | Примеры |
|---|---|---|---|
| 7 Application | Application | HTTP, gRPC, DNS, SMTP | curl, browser |
| 6 Presentation | (Application) | TLS, encoding, compression | openssl, JSON |
| 5 Session | (Application) | Сессии (редко выделяют) | — |
| 4 Transport | Transport | TCP, UDP, QUIC | sockets, ports |
| 3 Network | Internet | IP, ICMP, BGP | routers, ping |
| 2 Data Link | Link | Ethernet, Wi-Fi MAC, ARP | switches, NIC |
| 1 Physical | (Link) | электроны/радиоволны | cables, Wi-Fi |
Где живёт что:
| Компонент | Слой | Что видит |
|---|---|---|
| Switch | L2 | MAC адреса |
| Router | L3 | IP адреса, routing tables |
| NLB / L4 firewall / IPVS | L4 | 5-tuple: src/dst IP+port, protocol |
| ALB / Nginx / WAF / Envoy | L7 | HTTP host, path, headers, cookies, body |
| TLS termination | L6 | encrypted bytes → plaintext |
Три железных правила:
«Каждый слой знает только соседей» позволило интернету масштабироваться. Поменять Ethernet на Wi-Fi на 5G, IPv4 на IPv6, TCP на QUIC — HTTP-приложение не заметит.
Три группы — путь HTTP-запроса от sender'а до receiver'а:
Edges подписаны тем, что именно едет по проводу: «HTTP body», «TLS record», «TCP segment». Визуально объясняет почему wireshark на L3 показывает «TCP» как payload, а не «HTTP» — HTTP лежит на два слоя выше, внутри TLS внутри TCP.
Полный путь HTTP-запроса по семи слоям. App пишет GET /index.html. TLS шифрует. TCP оборачивает: src port 54321, dst 443, seq=42. IP оборачивает: src 10.0.1.5, dst 93.184.x.x. Ethernet: dst MAC = next-hop router, не endpoint. NIC модулирует bits.
Switch (L2) видит только MAC, forward'ит. Router (L3) читает dst IP, decrement'ит TTL, переписывает Ethernet header (новый dst MAC) — ключевой момент: MAC переписывается на каждом hop'е, IP — нет. L4 Firewall смотрит на 5-tuple, ACCEPT/DROP без чтения payload. L7 LB терминирует TLS, читает HTTP Host + path, выбирает backend.
На receiver'е симметрично: L1 ловит bits, L2 проверяет MAC, L3 проверяет IP, L4 собирает TCP stream, L6 расшифровывает, L7 handler видит чистый GET /index.html.
Клиент шлёт два запроса: GET /api/users и GET /static/logo.png на api.example.com.
L4 NLB видит для обоих одно: src 10.0.1.5
→ dst 93.184.x.x, TCP. Payload TLS-encrypted — для L4 это just bytes. Выбирает backend по hash от 5-tuple.L7 ALB терминирует TLS, читает HTTP. /api/* → api-cluster, /static/* → static-cluster (CDN). Один IP+port, разные backends.
Что не может L4: path routing, sticky sessions по cookie, WAF, JWT validation, header rewriting, retries по HTTP-кодам. Что может L4: любой протокол (gRPC raw, MQTT, mTLS passthrough), миллионы коннектов на µs latency, без сертификатов на LB.
Правило: L7 — если трафик HTTP/gRPC и нужны фичи; L4 — иначе или если важна скорость.
Методика: снизу вверх, исключая слои.
Симптом 1: curl https://api.example.com/health зависает. L1 cable UP, L2 ARP REACHABLE, L3 ping отвечает. L4 nc -vz host 443 → connection refused. SYN уходит, SYN-ACK нет. Это L4: port закрыт, firewall DROP, или service не listen. ICMP разрешён, TCP 443 — нет. Fix: security group / iptables / ss -tlnp на сервере.
Симптом 2: TCP connect'ится, curl → SSL_ERROR_BAD_CERT. Слои ниже OK. L6 (TLS): openssl s_client -connect host:443 показывает expired cert / wrong SAN / incomplete chain. Fix: обновить cert. Не перезагружай router.
Симптом 3: HTTPS connects, GET /api/x → 502. L1-L6 OK (есть HTTP-ответ). L7 LB не достучался до upstream. Backend down / connection refused. Fix: kubectl logs, /health endpoint, target group health.
90% инцидентов диагностируются за 5 минут такой пробежкой.
ADR на ноде L7 Application фиксирует: учить TCP/IP 4-layer practical stack как working model + знать 7-layer OSI mapping для интервью и vendor docs.
Контекст. OSI разработан в 1980-х как academic reference. Интернет работает на TCP/IP, где OSI 5/6/7 схлопнуты в «Application». В реальном коде ты редко скажешь «это L5» — но cisco/juniper-документация, Tanenbaum и security-литература говорят на семислойном языке. Игнорировать OSI — не понимать половину vendor-доков; учить только OSI — не понимать как реально работает TLS over TCP over IP.
Решение. Working model = TCP/IP 4-layer. Mapping в OSI 7-layer для устных собеседований и старых доков. Главное — «где живёт что»: switch=L2, router=L3, NLB/firewall=L4, ALB/WAF/Envoy/API gateway=L7. Encapsulation сверху вниз, troubleshooting снизу вверх. «Если ping идёт, а curl нет — проблема выше L3».
Что получаем:
Что платим:
Альтернативы:
| Подход | Плюсы | Минусы |
|---|---|---|
| Только TCP/IP 4-layer | Прагматично | Не читать vendor docs, проваливать интервью |
| Только OSI 7-layer | Покрывает academic literature | Не отражает реальный стек |
| Знать оба | Покрывает всё | День на запоминание |
| «По необходимости» | Минимум усилий | Часами тупишь на инцидентах |
Цена — день. Выгода — каждый incident, интервью, design review.
mode tcp (L4) или mode http (L7), переключается.ipvs mode.tcpdump без понимания слоёв. tcpdump 'port 443' покажет TCP+TLS — payload encrypted, HTTP не видно. Нужен SSLKEYLOGFILE или L7 access log.ping как proof of life сервиса. ICMP разрешён, TCP закрыт. Используй nc -zv или curl /health.Знание OSI не использовать нельзя — это базовый словарь. Но не каждая задача требует семислойного анализа:
Где сам OSI как 7-слойная модель уступает TCP/IP:
Для большинства дискуссий про микросервисы / API / observability — TCP/IP 4-layer и фокус на L7 хватает с головой.
Книги:
Production docs:
RFC:
Связанные темы:
Инструменты:
tcpdump, wireshark — encapsulation своими глазами.mtr, traceroute — L3 hop'ы.nc -zv, nmap — L4 reachability.openssl s_client — debug L6 TLS.curl -v — debug L7 HTTP.Визуализации: