Модель OSI — 7 слоёв и зачем нужны модели
Сети сложные. В одном TCP-соединении за секунду может пройти миллион пакетов через двадцать промежуточных узлов. Чтобы такая сложность вообще была управляемой, инженеры разделили её на слои. Каждый слой делает свою работу и не знает про работу других. Это позволяет специалистам по приложениям не разбираться в физике провода, а сетевым инженерам — не знать про CSS.
Модель OSI (Open Systems Interconnection) — классическая, академическая модель этого разделения. 7 слоёв, придумана ISO в 1984 году. На практике сейчас используется TCP/IP модель из 4 слоёв (об этом следующий урок), но OSI — лингва франка networking. Когда инженер говорит «Layer 7 load balancer», вы должны знать, какой слой имеется в виду. В этом уроке — именно про OSI.
Зачем вообще нужны модели
Прежде чем перечислять 7 слоёв, разберёмся, зачем они вообще нужны. Если есть HTTP, TCP, IP, Ethernet — зачем сверху ещё одна «модель»?
Главная польза модели — разделение труда. В Cisco есть инженеры, которые проектируют hardware, и инженеры, которые пишут software для маршрутизации. В компании есть network team (L1-L4) и application team (L5-L7). Они общаются на стыках, но внутри своего слоя — свобода действий.
Аналогия: представьте письмо в почтовом конверте. Вы написали текст (application data). Запечатали в конверт с адресом (transport). Положили в большой мешок с городом-получателем (network). Загрузили в самолёт (link). Самолёт летит (physical). На той стороне всё разбирается в обратном порядке. Никто из участников не должен знать всю систему — каждый знает свой слой.
7 слоёв OSI — обзор
Запоминаем порядок — от низа (физика) к верху (приложение):
Запомнить порядок помогают мнемоники:
- All People Seem To Need Data Processing (сверху вниз: Application, Presentation, Session, Transport, Network, Data link, Physical)
- Please Do Not Throw Sausage Pizza Away (снизу вверх: Physical, Data link, Network, Transport, Session, Presentation, Application)
Главное — запомнить именно номера для важных слоёв. Слышите «Layer 2 switch» — это data link, MAC-адреса. «Layer 3 routing» — network, IP. «Layer 4 load balancer» — TCP/UDP, порты. «Layer 7 application» — HTTP, gRPC.
Слои по одному
Пробежимся по слоям с примерами, что на каждом происходит.
L1: Physical
Физический слой. Это про передачу битов по проводу или эфиру. Электрические сигналы (медный кабель), световые импульсы (оптика), радиоволны (Wi-Fi, 5G).
Что определяет L1:
- Среда передачи. Cat6-кабель, single-mode fiber, частота Wi-Fi.
- Способ кодирования bits в сигналы. Например, NRZ (no return to zero), Manchester encoding, PAM4 для современных Ethernet.
- Скорость. 1 Гбит/с, 10 Гбит/с, 100 Гбит/с.
- Разъёмы. RJ-45, LC, SC, SFP+, QSFP28.
Что НЕ определяет L1: что значат эти биты. Для L1 — это просто поток. Смысл появляется на L2.
Junior DE с L1 почти не работает напрямую. Максимум — проверить, воткнут ли провод (link up / link down), или диагностировать «почему медленно» через ethtool (на Linux).
L2: Data Link
Канальный слой. Объединяет биты в кадры (frames) и передаёт их между соседними узлами внутри одной сети.
Примеры протоколов L2: Ethernet, Wi-Fi (802.11), PPP. Это самые распространённые в современных сетях.
Что определяет L2:
- Адресация. MAC-адреса (48-битные, обычно записываются как
aa:bb:cc:dd:ee:ff). Глобально уникальны. - Формат кадра. Кадр Ethernet: dst MAC + src MAC + EtherType + payload + CRC.
- Контроль ошибок. CRC в конце кадра. Если не совпало — кадр дропается.
- Доступ к среде. В Wi-Fi — CSMA/CA (carrier sense multiple access with collision avoidance). В современном Ethernet (через switches) — collision domain один на порт, тоже без проблем.
Switches работают на L2. Они принимают кадры на одном порту, смотрят dst MAC и пересылают на нужный порт.
L3: Network
Сетевой слой. Маршрутизация между разными сетями. Здесь главный протокол — IP (IPv4 и IPv6).
Что определяет L3:
- Адресация. IP-адреса (32-битные IPv4, 128-битные IPv6). Иерархические — delimitируют сеть и хост.
- Маршрутизация. Routing tables, longest prefix match, default gateway. Если получатель не в моей сети — отправлю на default gateway.
- Фрагментация. Если пакет больше MTU — разделить на куски (в IPv4 на любом router; в IPv6 только на endpoint).
- TTL. Time to live. Каждый router декрементирует TTL. При 0 — дропает.
Routers работают на L3. Они принимают пакеты, смотрят dst IP, ищут в routing table подходящий маршрут (longest prefix match), отправляют дальше.
# Посмотреть свою routing table:
ip route show 2>/dev/null || netstat -rn
# Увидите 'default' (куда идут все пакеты вне локальной сети)
# и подсети, в которые вы напрямую подключены
L4: Transport
Транспортный слой. Передача данных между процессами на разных host’ах. Главные протоколы — TCP и UDP.
Что определяет L4:
- Адресация процессов. Порты (16-битные, 0-65535). IP + порт = адрес процесса.
- Reliability (TCP). ACKs, retransmission, sequence numbers.
- Flow control (TCP). Receive window.
- Congestion control (TCP). Slow start, congestion avoidance.
- Multiplexing. Один host может иметь много соединений на разные порты.
UDP — простой: датаграмма с src port, dst port, length, checksum, payload. Без гарантий.
TCP — сложный: полное соединение с handshake’ом, гарантиями доставки. Большая часть модуля 8 будет посвящена TCP.
# Посмотреть все TCP-соединения и слушающие порты на вашей машине:
ss -tnp 2>/dev/null || netstat -an | grep tcp | head
# Увидите состояния: LISTEN (порт слушает), ESTABLISHED (есть соединение)
L5: Session
Сессионный слой. По OSI отвечает за установку, поддержание и завершение «сессий» между приложениями. На практике в реальных протоколах TCP/IP отдельно не выделен — частично делается в TCP (L4), частично в приложении (L7).
Примеры функций, которые в OSI отнесены к L5: установление dialog (кто говорит, кто слушает), checkpointing (можно ли возобновить после обрыва), termination (graceful close).
В TCP/IP мире слой L5 концептуальный, поэтому его часто пропускают. Когда инженер говорит про «session» — обычно имеется в виду application-level concept (HTTP session, login session).
L6: Presentation
Презентационный слой. Тоже довольно условный. Отвечает за формат данных:
- Кодирование. Перевод между ASCII, UTF-8, EBCDIC.
- Сжатие. gzip, brotli (на самом деле обычно на L7 в HTTP).
- Шифрование. TLS (классически относят к L6, но также к L5 или L7).
В реальных стэках L6 либо встроен в приложение (HTTP сам говорит про Content-Encoding), либо в библиотеки (TLS-библиотека между TCP и приложением).
L7: Application
Прикладной слой. Это то, что видит и потребляет пользователь или приложение. Все HTTP, SMTP, FTP, DNS, SSH, gRPC — L7.
Что определяет L7:
- Семантика данных. Что значит «получить запрос», «вернуть ответ», «отправить email».
- Формат сообщений. Как структурирован HTTP-запрос (request-line + headers + body), email (headers + body).
- Workflow. Сколько round-trips, кто инициатор, какие промежуточные шаги.
Junior DE проводит 95% времени на L7. Когда вы пишете requests.get(url) — это L7. Когда дебажите API — это L7. Когда строите архитектуру микросервисов — это L7.
Что на каком слое — реальные примеры
Сводим в одну таблицу с примерами:
Где модель полезна на практике
Несколько случаев, когда OSI-терминология делает разговор продуктивнее.
Load balancer. «Нам нужен L4 LB или L7 LB?» — стандартный вопрос. L4 — работает с TCP-соединениями, не парсит HTTP. Дешёвый, быстрый, не понимает application-логики. L7 — парсит HTTP, может направлять запросы по URL, headers, методам. Дороже, но умнее.
kube-proxy: iptables, IPVS, nftablesFirewall. «У нас L3 firewall или L7?» L3 фильтрует по IP-адресам (правила вроде «блокировать всё с 1.2.3.4»). L4 — по портам и состоянию TCP («разрешить TCP-handshake к порту 443»). L7 — по содержимому HTTP («блокировать запросы с SQL-инъекцией в параметрах»).
Network namespace в Linux. При создании container в Docker создаётся отдельный network namespace — это изоляция на L3-L4. Container имеет свой IP, свои сокеты. На L2 он подключён к виртуальному bridge.
Capabilities и namespaces — разрезаем root на кусочки Namespaces и cgroups — основа изоляции контейнераEncryption. В каком слое шифровать? VPN на L3 (IPsec), на L4 (DTLS), на L5 (SSH), на L6/L7 (TLS, application-level encryption). Выбор зависит от требований.
Когда вы дебажите сетевую проблему — идите по слоям снизу вверх. Cable connected? (L1) Link up? (L2) IP responds to ping? (L3) Port open via telnet/nc? (L4) Application responds correctly? (L7). Систематический подход экономит часы.
Где OSI неточная
Несмотря на полезность, OSI — это идеальная модель, которая не всегда отражает реальность.
-
L5-L6 концептуальны. В реальных стэках TCP/IP мира этих слоёв отдельно нет. Все их функции либо в L4 (TCP), либо в L7 (приложение и библиотеки).
-
TLS неоднозначно расположен. Где он? L5 (session keys), L6 (encryption), или L7 (вызывается из приложения)? Можно поставить аргументы за каждое. В реальности — библиотека между L4 и L7.
-
HTTP/2 размывает границы. Бинарные фреймы, header compression — это уже больше L6/L7 особенностей внутри одного протокола.
-
VPN путает иерархию. IPsec работает на L3 — но это IP внутри IP. WireGuard — transport-уровень over UDP. Не вписывается в чистые слои.
-
QUIC — gibrid. Это transport (L4), но он сам делает TLS-handshake (L5-L6) и multiplexing streams (L7-like). Слои размыты.
Поэтому в TCP/IP мире чаще используют упрощённую 4-слойную модель — разберём её в следующем уроке.
Попробуй сам
Несколько команд, которые работают на разных слоях.
# L1 -- физика. Состояние интерфейса
ip link show eth0 2>/dev/null || ifconfig en0
# UP, LOWER_UP -- link есть. NO-CARRIER -- провод не воткнут
# L2 -- MAC-адреса
ip neigh show 2>/dev/null || arp -a
# Соседи в моей локальной сети -- IP и MAC каждого
# L3 -- IP, routing
ip addr show 2>/dev/null || ifconfig | grep 'inet '
ip route show 2>/dev/null || netstat -rn
# L3 -- ping (через ICMP, тоже L3)
ping -c 3 google.com
# L4 -- слушающие порты
ss -tlnp 2>/dev/null || netstat -anp tcp | grep LISTEN
# L4 -- проверка порта (TCP handshake)
nc -vz google.com 443
# L7 -- HTTP
curl -sI https://google.com | head -5
Запустите все шесть команд по очереди. Каждая работает на своём слое и говорит свою информацию. На реальной отладке вы будете комбинировать их — начиная с L1 и поднимаясь, пока не найдёте, где проблема.