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

Обновлено: 24 марта 2026 г. в 11:23

TCP протокол

medium

Надёжная доставка байтов: соединение, three‑way handshake, контроль потока и перегрузок.

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

На практике это помогает проектировать retry, connection pooling, streaming и backpressure с пониманием того, как transport layer влияет на latency и throughput приложения.

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

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

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

Помогает понимать механики доставки и их цену для latency, throughput и стабильности сервиса.

Congestion behavior

Учит учитывать congestion control при проектировании потоков данных и retry-политик.

Connection lifecycle

Показывает влияние handshake, keepalive и queueing на пользовательский путь запроса.

Interview depth

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

RFC

RFC 9293 (TCP)

Текущий стандарт TCP: формат сегмента, состояние соединения и поведение протокола.

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

TCP - ключевой транспортный протокол стека TCP/IP. Он обеспечивает надёжную, упорядоченную передачу байтового потока и управляет скоростью отправки с учётом состояния сети и получателя.

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

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

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

Connection-oriented

Перед передачей данных стороны устанавливают соединение через three-way handshake.

Ретрансляции и ACK

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

Контроль потока

Получатель ограничивает скорость отправителя через window size, чтобы не переполнить буферы.

Контроль перегрузок

TCP адаптирует скорость при признаках congestion и защищает сеть от перегрузки.

Визуализация содержимого TCP сегмента

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

TCP Segment Header (base)

20-60 bytes

Source Port

16 bits

Destination Port

16 bits

Sequence Number

32 bits

Acknowledgment Number

32 bits

Data Offset

4 bits

Reserved

3 bits

Flags

9 bits

Window Size

16 bits

Checksum

16 bits

Urgent Pointer

16 bits

Options + Padding (optional)

32 bits

Base header обычно 20 байт. Опции (MSS, Window Scale, SACK Permitted, Timestamps) расширяют заголовок до 60 байт.

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

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

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

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

Сегментация потока, ACK, window updates, возможные retransmit при потерях.

Завершение

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

Three-way handshake

TCP устанавливает соединение через трёхшаговое рукопожатие (SYN -> SYN-ACK -> ACK). После него стороны синхронизируют sequence space и могут передавать данные в full duplex.

TCP three-way handshake

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

Состояние

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

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

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

Используйте пошаговое проигрывание или автоплей по RTT-шагам, чтобы увидеть, как меняются cwnd/rwnd.

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

Congestion window (cwnd)

2 MSS

Receive window (rwnd)

18 MSS

Эффективное окно (min)

2 MSS

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

8%

Высокая очередь увеличивает tail latency даже при умеренных потерях.

RTT

18 ms

Потери

0.0%

Оценка throughput

1.3 Mbps

MSS = 1460B

Фаза: Slow start

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

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

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

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

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

Как свойства IP-маршрутизации отражаются на TCP throughput и стабильности.

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

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

RTT и BDP

Чем выше RTT и bandwidth-delay product, тем больше окно нужно для высокого throughput.

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

Packet loss и queue buildup напрямую бьют по cwnd и увеличивают tail latency.

Асимметрия путей

Разные forward/reverse пути могут приводить к reorder и лишним dup ACK.

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

Ошибки PMTU discovery вызывают blackhole-эффекты и тяжелые retransmit циклы.

NAT/LB idle timeout

Сетевые middleboxes могут рвать long-lived TCP-сессии и создавать ложные сетевые инциденты.

Почему это важно для System Design

  • TCP handshake и warm connections влияют на p95/p99 latency на входе в сервис.
  • Window sizing, congestion control и RTT определяют реальный throughput, а не теоретический bandwidth.
  • Неправильные timeout/retry политики быстро вызывают cascading failures под нагрузкой.
  • Диагностика transport-уровня часто позволяет быстрее найти корень инцидента, чем анализ бизнес-логики.

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

Считать, что transport всегда стабилен и не учитывать tail latency в сетевых сегментах.

Смешивать признаки congestion и application timeout в одну метрику без разреза по уровням.

Игнорировать connection pooling и keepalive, создавая лишнюю нагрузку handshake-циклом.

Переиспользовать одинаковые timeout/retry параметры для intra-DC и inter-region трафика.

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

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