Граф знанийНастройки

Обновлено: 21 апреля 2026 г. в 16:55

Протокол TCP

средний

Надёжная доставка байтового потока: рукопожатие, подтверждения, управление потоком и перегрузкой, а также влияние сети на поведение TCP.

Глава про TCP важна тем, что показывает цену надёжной доставки: соединение, порядок байтов, контроль потока и перегрузки всегда оплачиваются задержкой, памятью и состоянием.

На практике это помогает проектировать повторные попытки, повторное использование соединений, стриминг и обратное давление с пониманием того, как транспортный слой меняет задержку и пропускную способность приложения.

В интервью и архитектурных обсуждениях материал полезен тем, что позволяет объяснять выбор транспорта и поведение системы под нагрузкой через реальные механизмы TCP, а не через общие слова о надёжности.

Практическая польза главы

Надежная доставка

Помогает понимать цену подтверждений, повторных передач и сохранения порядка для задержки и устойчивости сервиса.

Поведение при перегрузке

Учит учитывать управление перегрузкой при проектировании потоков данных и политик повторных попыток.

Жизненный цикл соединения

Показывает, как рукопожатие, поддержание соединения и очереди влияют на путь пользовательского запроса.

Глубина на интервью

Усиливает обсуждение транспортного слоя в кейсах с высокими требованиями к надежности.

RFC

RFC 9293 (TCP)

Актуальное описание TCP: формат сегмента, состояния соединения и правила работы протокола.

Перейти на сайт

Протокол TCP важен не только как «надёжный транспорт», но и как слой, который превращает качество сети в конкретные задержки, ограничения по памяти, цену соединения и поведение сервиса под нагрузкой.

Для системного дизайна полезно понимать, как строит соединение, зачем ему и почему вместе с и определяют устойчивость сервиса не меньше, чем код приложения.

На скорость передачи влияют , , , и . Именно они объясняют, почему номинальная ширина канала ещё не гарантирует высокую и низкую .

Для архитектора отсюда следуют прикладные решения: когда держать , как настраивать и , как реагировать на , где нужен и почему фаза или могут неожиданно испортить путь пользовательского запроса.

Ключевые свойства протокола TCP

Надёжная доставка

Протокол TCP упорядочивает байтовый поток, подтверждает получение сегментов и запускает повторную передачу при потерях.

Работа через соединение

Перед обменом данными стороны сначала согласуют состояние соединения и базовые параметры сеанса.

Подтверждения и повторные передачи

Подтверждения ACK помогают замечать потери без участия приложения и восстанавливать поток после сетевых сбоев.

Управление потоком

Получатель ограничивает объём данных в полёте через окно приёма, чтобы не переполнять свои буферы.

Управление перегрузкой

Отправитель меняет скорость по сигналам сети и не пытается держать максимальный темп любой ценой.

Как устроен заголовок TCP-сегмента

Поля заголовка определяют порядок доставки, подтверждения, согласование окна, контроль ошибок и реакцию на потери.

Базовый заголовок TCP-сегмента

20-60 байт

Порт источника

16 бит

Порт назначения

16 бит

Номер последовательности

32 бит

Номер подтверждения

32 бит

Длина заголовка

4 бит

Резерв

3 бит

Флаги

9 бит

Размер окна

16 бит

Контрольная сумма

16 бит

Указатель срочных данных

16 бит

Опции и выравнивание (необязательно)

32 бит

Базовый заголовок обычно занимает 20 байт. Опции вроде MSS, Window Scale, SACK Permitted и Timestamps могут расширить его до 60 байт.

Жизненный цикл TCP-соединения

Установка соединения

SYN -> SYN-ACK -> ACK, согласование начальных номеров последовательности, MSS и параметров окна.

Передача данных

Сегментация байтового потока, подтверждения ACK, обновление окна приёма и повторные передачи при потерях.

Завершение соединения

Обмен FIN/ACK в обе стороны и переход в TIME_WAIT, чтобы защититься от старых сегментов в сети.

Трёхшаговое рукопожатие TCP

Рукопожатие не просто «открывает сокет»: оно синхронизирует номера последовательности, подтверждает достижимость второй стороны и создаёт состояние соединения, за которое потом приходится платить задержкой и памятью.

Трёхшаговое рукопожатие TCP

Выберите шаг или используйте кнопки, чтобы заново пройти установку соединения.

Состояние

Нажмите «Начать», чтобы пройти все шаги установки TCP-соединения.

КлиентСервер
Клиент
-
Сервер
После трёх шагов соединение считается установленным.

После установки соединения TCP постоянно балансирует между ростом скорости и осторожностью. Именно здесь видны реальные ограничения сети, получателя и накопившихся очередей.

Контроль потока и перегрузок в динамике

Прокрутите шаги по RTT, чтобы увидеть, как меняются окно перегрузки и окно приёма.

ШагRTT 1 (1 из 8)
cwndrwnd

Окно перегрузки (cwnd)

2 MSS

Окно приёма (rwnd)

18 MSS

Эффективное окно отправки

2 MSS

Загрузка очереди

8%

Высокая заполненность очереди увеличивает хвостовую задержку даже без крупных потерь.

RTT

18 ms

Потери

0.0%

Оценка пропускной способности

1.3 Mbps

MSS = 1460B

Фаза: Медленный старт

Что происходит на этом шаге: Соединение только стартовало: отправитель быстро наращивает cwnd, а сеть пока почти не ограничивает поток.

Расшифровка обозначений

  • cwnd = окно перегрузки - Ограничение на стороне отправителя: меняется по сигналам перегрузки и задаёт объём данных в полёте.
  • rwnd = окно приёма - Ограничение на стороне получателя: передаётся в ACK и показывает доступный буфер.
  • окно отправки = min(cwnd, rwnd) - Фактический лимит отправки всегда определяется меньшим из этих двух окон.

Связанная глава

IPv4 и IPv6: эволюция IP-адресации

Как свойства IP-маршрутизации меняют пропускную способность, устойчивость и предсказуемость TCP.

Открыть главу

Как маршрутизация и сеть меняют поведение TCP

Время прохождения и BDP

Чем выше RTT и произведение пропускной способности на задержку, тем больше эффективное окно нужно для высокой скорости передачи.

Потери и рост очередей

Потери пакетов и переполнение очередей уменьшают cwnd, поднимают хвостовую задержку и замедляют восстановление потока.

Асимметрия маршрутов

Разные прямой и обратный пути могут вызывать переупорядочивание сегментов и лишние дублирующие подтверждения ACK.

MTU и фрагментация

Ошибки Path MTU Discovery приводят к фрагментации, чёрным дырам на пути и тяжёлым циклам повторной передачи.

Тайм-ауты простоя у NAT и балансировщиков

Сетевые устройства и балансировщики могут обрывать долгоживущие TCP-сеансы и маскировать проблему под сетевой инцидент.

Почему это важно для системного дизайна

  • Рукопожатие и прогрев соединений напрямую влияют на p95/p99 на входе в сервис.
  • Размер окна, RTT и управление перегрузкой определяют реальную пропускную способность, а не номинальную ширину канала.
  • Неаккуратные тайм-ауты и повторные попытки быстро запускают каскадные сбои под нагрузкой.
  • Понимание транспортного слоя помогает быстрее отличать сетевой инцидент от проблем бизнес-логики и приложения.

Частые ошибки

Считать транспортный слой стабильным по умолчанию и не учитывать хвостовую задержку на сетевых участках.

Смешивать признаки перегрузки сети и тайм-ауты приложения в одну метрику без разреза по уровням.

Игнорировать повторное использование соединений и поддержание соединения, из-за чего сервис платит за лишние рукопожатия.

Использовать одинаковые тайм-ауты и политики повторных попыток для трафика внутри дата-центра и между регионами.

Связанные главы

  • Модель OSI - показывает место TCP на транспортном уровне и помогает разбирать сетевые проблемы по слоям.
  • IPv4 и IPv6: эволюция IP-адресации - объясняет, как свойства IP-маршрутизации и адресного стека меняют поведение TCP.
  • Протокол UDP - сравнивает надёжный транспорт TCP с минималистичным транспортом без встроенных гарантий.
  • Протокол HTTP - показывает, как прикладной протокол использует TCP-соединения в реальных сервисах.
  • Протокол WebSocket - помогает увидеть ограничения и преимущества долгоживущих TCP-соединений.
  • Балансировка трафика - раскрывает влияние L4/L7-балансировки, закрепления соединений и сетевых тайм-аутов на TCP-сеансы.
  • Подходы к удалённым вызовам - добавляет прикладной слой: тайм-ауты, повторные попытки и паузы с нарастающей задержкой поверх транспорта.
  • Зачем нужны распределённые системы и консистентность - переводит разговор от механики транспорта к архитектурным компромиссам распределённой системы.

Чтобы отмечать прохождение, включи трекинг в Настройки