Модель TCP/IP — 4 слоя реальной жизни
OSI — красивая академическая модель, но в реальном мире у нас работает модель TCP/IP. Она проще: всего 4 слоя. И именно её протоколы (TCP, IP, Ethernet, HTTP) построили Internet. OSI часто упоминают как «эталон», но реализованных систем по OSI не существует — слишком сложно, слишком много слоёв с размытыми границами.
В этом уроке разберём модель TCP/IP, как она соотносится с OSI, и почему именно она победила в гонке сетевых архитектур. Когда вы дальше будете изучать конкретные протоколы, мысленная модель будет именно TCP/IP, не OSI.
TCP/IP — 4 слоя
Модель TCP/IP объединяет некоторые из 7 слоёв OSI в более простые группы:
Сравнение с OSI:
- Link layer = L1 (Physical) + L2 (Data Link) OSI. Объединили, потому что в реальности «уровень физической передачи битов» и «уровень адресации в LAN» работают одной командой (Ethernet-чип, Wi-Fi-карта).
- Internet layer = L3 (Network) OSI. То же самое.
- Transport layer = L4 (Transport) OSI. То же самое.
- Application layer = L5 + L6 + L7 OSI. Объединили, потому что в TCP/IP мире нет отдельных session и presentation слоёв — их функции либо в приложении, либо в transport, либо в библиотеках.
Почему 4 слоя, а не 7
Несколько практических причин, по которым TCP/IP победила.
Историческая ирония: OSI создавалась как «правильная» модель будущего, а TCP/IP считалась «временным решением». В итоге временное решение стало стандартом, а правильное — осталось академическим. Это типичная история в IT: prototype, который работает, побеждает идеальный дизайн, которого ждут годами.
Это полезный урок для проектирования: лучше выпустить работающую версию 1, чем годами полировать идеал. Можно потом обновить (HTTP/1 -> HTTP/2 -> HTTP/3). Главное — запустить адаптацию.
Что на каком слое в TCP/IP
Конкретные протоколы по слоям TCP/IP:
В каждом слое можно поменять протокол, не меняя другие. Пример эволюции:
- Application: HTTP/1.1 -> HTTP/2 -> HTTP/3. Внизу всё то же.
- Transport: TCP стабилен 30+ лет. QUIC — альтернатива поверх UDP. Не вытесняет, а добавляет.
- Internet: IPv4 (1981) -> IPv6 (1995, ratified 2017). Сосуществуют (dual stack).
- Link: 10 Mbit -> 100 Mbit -> 1 Gbit -> 10 Gbit -> 100 Gbit Ethernet. Всё то же выше.
Где OSI всё ещё нужен
Хотя в реальной разработке вы будете думать в терминах TCP/IP, OSI-терминология остаётся в обиходе. Причины:
-
Уровневые названия (L1-L7). Когда инженер говорит «L7 LB», «L4 firewall», «L3 routing» — он использует OSI-номера. Это просто короче, чем «application layer LB».
-
Сертификации. CCNA, CompTIA Network+ — все используют OSI-модель. Если вы готовитесь к ним — придётся выучить 7 слоёв.
-
Документация vendor’ов. Cisco, Juniper, Aruba — их документация часто привязана к OSI. «Этот switch поддерживает L2 и L3 функции» — стандартная фраза.
-
Образование. Большинство учебников начинают с OSI. Это de facto педагогическая модель.
Поэтому полезно знать оба: TCP/IP для практики, OSI для коммуникации.
Hybrid модель — 5 слоёв
Существует ещё одна вариация — 5-слойная модель. Это компромисс между TCP/IP и OSI. Используется в некоторых университетских курсах (Kurose-Ross в первую очередь):
В 5-слойной модели Link разделяют обратно на физический и канальный (как в OSI), но Application остаётся одной (как в TCP/IP). Это полезно для академического обсуждения — проще обсуждать конкретные функции L1 vs L2.
В этом курсе мы будем гибко использовать обе модели:
- Когда обсуждаем конкретные протоколы (HTTP, TCP, IP) — TCP/IP, 4 слоя.
- Когда обсуждаем сетевое оборудование (L2 switch, L3 router, L7 LB) — OSI-нумерация.
Это не идеально с точки зрения чистоты, но соответствует тому, как говорят в индустрии.
Жизненный путь пакета
Лучший способ понять слои — проследить, что происходит с одним HTTP-запросом, когда он спускается через все слои и поднимается обратно.
На каждом слое к данным добавляется свой заголовок. На приёмной стороне всё разворачивается обратно — заголовки считываются и снимаются.
Это и есть encapsulation (инкапсуляция). Следующий урок посвящён этому процессу детально.
Где TCP/IP неточная
Как и OSI, у TCP/IP-модели есть слабые места:
-
TLS не имеет своего слоя. Это библиотека между transport и application. Концептуально это L5-L6, но в TCP/IP-моделях её часто упоминают как «между transport и application».
-
QUIC размывает transport и application. QUIC — это transport, но содержит multiplexing (обычно ассоциируется с application layer) и встроенный TLS. Не вписывается чисто в один слой.
-
VPN перепутывает иерархию. IPsec на L3 — это IP внутри IP. WireGuard — transport внутри UDP. Это не «честное» спускание вниз, а инкапсуляция одного уровня внутри другого того же уровня.
-
Сложные приложения многослойны сами по себе. WebSocket поверх HTTP. gRPC поверх HTTP/2. Microservices через REST + Kafka. Каждое из них — свой стэк протоколов.
Но эти неточности не делают модель бесполезной — наоборот, они показывают, что networking сложнее любой одной модели. Используйте модель как ментальный инструмент, не как догму.
Попробуй сам
Посмотрите, как все слои работают вместе на одном запросе.
# Запустите захват пакетов на 5 секунд
sudo tcpdump -i en0 -c 20 -w /tmp/capture.pcap host example.com &
sleep 2
# В отдельном окне или после небольшой паузы
curl -s https://example.com > /dev/null
# Подождите завершения capture (или Ctrl+C)
sleep 3
Откройте /tmp/capture.pcap в Wireshark. Кликните на любой пакет. В нижней панели увидите дерево:
Ethernet II, Src: ..., Dst: ... <- L2 (Link)
Internet Protocol Version 4 <- L3 (Internet)
Transmission Control Protocol <- L4 (Transport)
Transport Layer Security <- (TLS, между L4 и L7)
Hypertext Transfer Protocol <- L7 (Application) -- виден если расшифровано
Это и есть encapsulation в действии. Каждый слой добавил свой заголовок при отправке, и Wireshark показывает их в обратном порядке — от внешнего (Ethernet) к внутреннему (HTTP).
Альтернативно, через CLI:
# Посмотреть детально один пакет
tcpdump -r /tmp/capture.pcap -nn -v -X | head -50
# -X показывает payload в hex и ASCII
# Видите заголовки IP, TCP, и кусочки данных
HTTP как Application Layer: от bytes до request/response Сетевые абстракции Docker: все 4 слоя изнутри