Глава про 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, чтобы увидеть, как меняются окно перегрузки и окно приёма.
Окно перегрузки (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-сеансы.
- Подходы к удалённым вызовам - добавляет прикладной слой: тайм-ауты, повторные попытки и паузы с нарастающей задержкой поверх транспорта.
- Зачем нужны распределённые системы и консистентность - переводит разговор от механики транспорта к архитектурным компромиссам распределённой системы.
