Глава про 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 bytesSource 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.
Congestion window (cwnd)
2 MSSReceive 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 трафика.
Связанные главы
- Модель OSI - позиционирует TCP на транспортном уровне и помогает диагностировать проблемы по слоям.
- IPv4 и IPv6: эволюция IP-адресации - показывает, как свойства IP-маршрутизации влияют на поведение TCP.
- UDP протокол - сравнение transport trade-offs: надёжность TCP против минимального overhead UDP.
- HTTP протокол - практика прикладного протокола поверх TCP в real-world сервисах.
- WebSocket протокол - долгоживущие TCP-соединения и особенности realtime-сценариев.
- Load Balancing - L4/L7 балансировка, connection stickiness и влияние на TCP-сессии.
- Подходы к удалённым вызовам - таймауты, retries и backoff на границе transport и application уровней.
- Зачем нужны распределённые системы и консистентность - переход от transport-механики к системным trade-offs распределённой архитектуры.
