hostprofi.ru
Подобрать хостинг
Термин·буква T

TCP

краткое определение

TCP (Transmission Control Protocol) — протокол транспортного уровня (L4), обеспечивающий надёжную, упорядоченную и без потерь передачу данных между приложениями через IP-сеть. Основа HTTP, SMTP, SSH, FTP и большинства интернет-сервисов.

TCP — один из двух основных транспортных протоколов интернета (второй — UDP). TCP устанавливает соединение перед передачей данных (connection-oriented), гарантирует доставку всех сегментов в правильном порядке, контролирует перегрузку и управляет потоком данных. Цена надёжности — дополнительные задержки и накладные расходы по сравнению с UDP.

Как работает

TCP-соединение устанавливается трёхэтапным рукопожатием (three-way handshake): SYN → SYN-ACK → ACK. После установки данные передаются сегментами с порядковыми номерами (sequence numbers). Получатель подтверждает приём через ACK. Потерянные сегменты переотправляются. Алгоритм медленного старта (slow start) и контроль перегрузки (AIMD — additive increase multiplicative decrease) регулируют скорость передачи.

HTTP/2 и QUIC (HTTP/3) работают поверх TCP и UDP соответственно. Проблема TCP-Head-of-Line Blocking: если один сегмент потерян, все последующие ждут его переотправки. QUIC решает это проблему через независимые потоки данных в UDP.

Параметры TCP

  • MSS — Maximum Segment Size, размер данных в сегменте (MTU - 40 = 1460 байт обычно)
  • Window size — размер окна приёма (буфер получателя)
  • RTT — Round-Trip Time, время туда-обратно, определяет производительность TCP
  • TIME_WAIT — состояние закрытого соединения, ждёт 2×MSL для надёжного закрытия

История

TCP/IP создан Винтоном Серфом (Vint Cerf) и Робертом Каном (Bob Kahn) в 1974 году. RFC 675 (1974) — первая спецификация. RFC 793 (1981) — действующий стандарт TCP. ARPANET перешёл с NCP на TCP/IP 1 января 1983 года — этот день считается днём рождения интернета. TCP CUBIC (алгоритм перегрузки) стал стандартом в Linux в 2005 году, BBR от Google — в 2016.

На что обращать внимание

Производительность TCP сильно зависит от задержки: при RTT 100 мс максимальная скорость TCP ограничена window_size / RTT. Для высокоскоростных длинных соединений (large bandwidth-delay product) нужен большой TCP window size (TCP Window Scaling, RFC 1323). Потеря пакетов 1% снижает пропускную способность TCP в 10 раз.

TCP в контексте хостинга и веб-сервисов

TCP — основной транспортный протокол для веб (HTTP, HTTPS), SSH, MySQL, email. Трёхстороннее рукопожатие (SYN, SYN-ACK, ACK) добавляет задержку в 1 RTT перед началом передачи данных. Для HTTPS с TLS 1.3 общая задержка до первого байта: 1 RTT для TCP + 1 RTT для TLS = 2 RTT. HTTP/2 мультиплексирует несколько потоков в одном TCP-соединении. QUIC (HTTP/3) заменяет TCP на UDP с рукопожатием за 0--1 RTT, что снижает TTFB на 20--30%. Keep-alive позволяет повторно использовать TCP-соединение для нескольких HTTP-запросов.

TCP и производительность сервера

Настройка ядра Linux для высоконагруженных серверов включает: увеличение net.core.somaxconn (очередь соединений до 65535), включение TCP Fast Open (RFC 7413), тюнинг буферов (net.core.rmem_max, net.core.wmem_max). Алгоритмы контроля перегрузки: Cubic (по умолчанию в Linux), BBR (от Google, 2016) — BBR обеспечивает до 10x лучшую пропускную способность в сетях с потерями. Latency TCP-соединения напрямую зависит от географии: Москва--Лондон ~50 мс, Москва--Нью-Йорк ~120 мс.

История TCP

TCP/IP разработан Винтоном Серфом (Vint Cerf) и Робертом Каном (Robert Kahn) в 1974 году. RFC 793 (1981) зафиксировал TCP стандарт. Стек TCP/IP заменил NCP в ARPANET 1 января 1983 года. TCP версия Cubic введена в ядро Linux в 2006 году. Google представил QUIC в 2012 году как ответ на ограничения TCP, IETF стандартизировал HTTP/3 в RFC 9114 (2022).

Другие термины