Стек TCP/IP — это набор сетевых протоколов, разбитый на четыре уровня, где каждый уровень решает свою задачу и добавляет к данным свой заголовок. Название дали два ключевых протокола: IP отвечает за адресацию и маршрутизацию, TCP — за надежную доставку. Ниже разберу, какие бывают уровни, как они соотносятся с моделью OSI, что происходит с данными при инкапсуляции и как пакет проходит путь от клика в браузере до готовой страницы.
Содержание
Тему IP-адресов, подсетей и масок я тут только упоминаю: адресация — отдельный большой разговор, а здесь фокус на самом стеке и его уровнях.
Четыре уровня стека TCP/IP
Классическая модель (RFC 1122) выделяет четыре уровня. Это упрощение: часть авторов дробит нижний уровень на физический и канальный и получает пять уровней. Для понимания логики достаточно четырех.
- Канальный уровень (link, сетевой доступ) — передача между соседними устройствами в одном сегменте сети по кабелю или радио. Здесь работают Ethernet и Wi-Fi, адресация идет по MAC-адресам, единица данных — кадр (frame).
- Сетевой уровень (internet) — адресация и маршрутизация между разными сетями. Главный протокол — IP, единица данных — пакет. Сюда же относится ICMP (диагностика, его использует
ping). - Транспортный уровень (transport) — логическая связь между приложениями на двух хостах. Протоколы TCP (надежный) и UDP (быстрый), единица данных — сегмент у TCP и датаграмма у UDP.
- Прикладной уровень (application) — протоколы, с которыми работают программы: HTTP, DNS, SMTP, FTP. Единица данных — сообщение.
TCP/IP и OSI: таблица соответствия
OSI — эталонная модель из семи уровней, ее удобно использовать как «линейку». TCP/IP — практическая модель, на которой реально построен интернет. Соответствие приблизительное: один уровень TCP/IP часто закрывает несколько уровней OSI.
| Уровень TCP/IP | Уровни OSI | За что отвечает | Примеры протоколов и единица данных |
|---|---|---|---|
| Прикладной | Прикладной, представления, сеансовый | Формат данных приложений, сеансы, интерфейсы | HTTP, DNS, SMTP, FTP; сообщение |
| Транспортный | Транспортный | Доставка между приложениями, порты | TCP, UDP; сегмент / датаграмма |
| Сетевой | Сетевой | Адресация и маршрутизация между сетями | IP, ICMP; пакет |
| Канальный | Канальный, физический | Передача внутри одного сегмента сети | Ethernet, Wi-Fi; кадр |
Инкапсуляция: как данные обрастают заголовками
Когда приложение отправляет данные, они проходят стек сверху вниз, и на каждом уровне добавляется свой заголовок. Это и есть инкапсуляция. На приемной стороне заголовки снимаются в обратном порядке — это деинкапсуляция.
Проследим одну и ту же порцию данных через уровни на примере запроса страницы:
- прикладной: браузер формирует HTTP-запрос
GET / HTTP/1.1— это сообщение; - транспортный: TCP оборачивает его в сегмент, добавляя порт отправителя и получателя (для HTTPS — обычно 443);
- сетевой: IP оборачивает сегмент в пакет, добавляя IP-адреса источника и назначения;
- канальный: Ethernet оборачивает пакет в кадр, добавляя MAC-адреса и контрольную сумму.
Дальше кадр уходит в физическую среду как последовательность сигналов. На каждом маршрутизаторе по пути канальный заголовок снимается и создается заново (MAC-адреса меняются от участка к участку), а IP-адреса источника и назначения остаются неизменными до конца.
Важный момент про размеры. IP-пакет теоретически может быть до 65535 байт, но реально его ограничивает MTU канала — для Ethernet это обычно 1500 байт. Поэтому TCP заранее режет поток на сегменты подходящего размера, а не шлет один гигантский блок. Это уточняет частый миф, будто «пакет равен всему файлу».
Ключевые протоколы стека
- IP (сетевой уровень) — адресация и поиск маршрута. Он не гарантирует доставку и не хранит состояние соединения: его дело — довести пакет до нужного адреса «как получится». Существуют IPv4 и IPv6.
- TCP (транспортный) — надежное соединение с подтверждениями. Перед передачей данных стороны проходят «тройное рукопожатие»: SYN, затем SYN-ACK, затем ACK. Потерянные сегменты отправляются повторно, порядок восстанавливается по номерам. Подходит для страниц, файлов, почты.
- UDP (транспортный) — без установки соединения и без гарантий доставки. Зато без задержек на подтверждения, поэтому его берут для видео, голоса и игр, где важнее скорость, чем целостность каждого пакета.
- ICMP (сетевой) — служебные сообщения и диагностика. На нем работают
pingиtraceroute; ICMP не переносит пользовательские данные. - DNS (прикладной) — перевод имени
otus.ruв IP-адрес. Обычно работает поверх UDP на порту 53, при больших ответах — поверх TCP. - HTTP (прикладной) — обмен веб-страницами и API-запросами, поверх TCP (порт 80), в защищенном варианте HTTPS — через TLS (порт 443).
Порт — это 16-битное число от 0 до 65535, которое на транспортном уровне указывает, какому приложению на хосте адресован сегмент. IP приводит данные на нужный компьютер, порт — на нужную программу внутри него.
Как проходит пакет: от клика до страницы
Соберем уровни в один сценарий. Пользователь открывает https://otus.ru.
- DNS. Браузеру нужен IP-адрес. Он шлет DNS-запрос (прикладной уровень, поверх UDP), получает адрес сервера.
- TCP-соединение. Клиент и сервер проходят тройное рукопожатие на транспортном уровне и договариваются о параметрах.
- HTTP-запрос. Браузер формирует запрос страницы; TCP режет его на сегменты, IP упаковывает в пакеты, канальный уровень — в кадры.
- Маршрутизация. Пакеты идут через маршрутизаторы к серверу, IP-адреса назначения остаются неизменными, MAC-адреса меняются на каждом участке.
- Ответ и сборка. Сервер шлет HTTP-ответ теми же уровнями обратно. TCP на стороне клиента восстанавливает порядок сегментов и запрашивает потерянные, браузер собирает и рендерит страницу.
Диагностику этого пути видно инструментами командной строки. ping проверяет доступность узла через ICMP на сетевом уровне:
$ ping example.com
PING example.com (93.184.216.34): 56 data bytes
64 bytes from 93.184.216.34: icmp_seq=0 ttl=54 time=12.3 ms
64 bytes from 93.184.216.34: icmp_seq=1 ttl=54 time=11.8 ms
Поле ttl (time to live) уменьшается на каждом маршрутизаторе — это защита от зацикливания пакетов. time — время оборота.
Команда curl -v показывает сразу несколько уровней в одном запросе: разрешение имени, установку TCP-соединения и обмен HTTP-сообщениями.
$ curl -v https://example.com
* Host example.com:443 was resolved.
* Connected to example.com (93.184.216.34) port 443
> GET / HTTP/2
> Host: example.com
< HTTP/2 200
< content-type: text/html
Строки со * — служебные (DNS и TCP-соединение), > — отправленный HTTP-запрос, < — заголовки ответа сервера. Так на практике видно, как прикладной, транспортный и сетевой уровни работают вместе.
Выводы
- Стек TCP/IP — это четыре уровня: канальный, сетевой, транспортный и прикладной; на каждом свои протоколы и своя единица данных.
- TCP/IP соотносится с семиуровневой OSI приблизительно: один уровень TCP/IP закрывает несколько уровней OSI.
- Инкапсуляция — это добавление заголовка на каждом уровне при спуске вниз; на приеме заголовки снимаются в обратном порядке.
- IP отвечает за адресацию без гарантий, TCP добавляет надежность через подтверждения и рукопожатие, UDP жертвует гарантиями ради скорости, порт указывает приложение внутри хоста.
- Реальный размер пакета ограничен MTU канала (обычно 1500 байт для Ethernet), поэтому TCP заранее режет поток на сегменты.
Где применяется / связь с практикой
Понимание уровней стека — база для сетевого администрирования и для отладки чего угодно, что ходит по сети: от медленного сайта до отвалившегося API. Когда понятно, на каком уровне искать проблему (DNS не разрешает имя, TCP не устанавливает соединение или сервер отвечает ошибкой на прикладном уровне), диагностика перестает быть гаданием.
Освойте тему на практике
Системно разложить стек, маршрутизацию, работу протоколов и настройку оборудования помогает курс Network engineer. Посмотреть формат и темы вживую можно на открытых уроках Otus — там разбирают сетевые задачи на практике и отвечают на вопросы.
FAQ
Чем модель TCP/IP отличается от OSI?
OSI — эталонная модель из семи уровней для обучения и стандартизации. TCP/IP — практическая модель из четырех уровней, на которой реально работает интернет; ее уровни укрупненно объединяют уровни OSI.
Что такое сокет?
Сокет — это программная точка соединения, заданная парой «IP-адрес плюс порт». Приложение через сокет открывает соединение и обменивается данными, не вникая в детали нижних уровней стека.
Почему при слабом соединении видео сыплется пикселями, а страница просто грузится дольше?
Видео обычно идет по UDP, который не переспрашивает потерянные пакеты, поэтому пропущенные данные превращаются в артефакты. Страница идет по TCP, который перезапрашивает потери, поэтому она приходит целой, но медленнее.



