Открыть сервис

Протокол управления передачей

Протокол управления передачей (TCP, от англ. Transmission Control Protocol) — это один из основных протоколов транспортного уровня стека протоколов TCP/IP, обеспечивающий надёжную, упорядоченную и с установлением соединения доставку потока данных между приложениями, работающими на узлах компьютерной сети. TCP гарантирует целостность передаваемой информации, контролирует потери пакетов, дублирование и порядок их следования, а также управляет потоком данных для предотвращения перегрузки сети.

История

Протокол TCP был разработан в 1970-х годах в рамках проекта ARPANET, финансируемого Министерством обороны США. Первоначальная спецификация была описана в документе RFC 675 (1974 год) авторства Винтона Серфа, Йохана Постела и других. В 1981 году вышла версия протокола, описанная в RFC 793, которая стала основой современного TCP. В 1983 году TCP/IP стал стандартным протоколом для ARPANET, что положило начало глобальной сети Интернет. Впоследствии протокол неоднократно дополнялся и уточнялся в многочисленных RFC (например, RFC 1122, RFC 1323, RFC 2018, RFC 5681), касающихся управления перегрузкой, масштабирования окна, выборочного подтверждения и других аспектов.

Основные характеристики

TCP является протоколом с установлением соединения (connection-oriented). Это означает, что перед началом передачи данных между двумя узлами устанавливается логическое соединение, которое поддерживается на протяжении всего сеанса связи. После завершения обмена данными соединение разрывается.

Надёжность передачи

TCP обеспечивает надёжную доставку данных за счёт следующих механизмов:

  • Нумерация сегментов: каждый отправляемый байт данных имеет порядковый номер (sequence number), что позволяет получателю восстанавливать исходный порядок и обнаруживать потери.
  • Подтверждение получения (ACK): получатель отправляет отправителю подтверждение о получении данных. Если отправитель не получает ACK в течение тайм-аута, он повторно отправляет потерянные сегменты.
  • Контрольная сумма: каждый сегмент TCP содержит контрольную сумму для проверки целостности данных при передаче.
  • Управление дублированием: получатель отбрасывает дублирующиеся сегменты, если они были отправлены повторно.

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

TCP использует механизм скользящего окна (sliding window) для регулирования скорости передачи данных. Получатель сообщает отправителю размер своего буфера (окно приёма), и отправитель не может отправить больше данных, чем позволяет это окно, пока не получит подтверждение о приёме предыдущих. Это предотвращает переполнение буфера получателя.

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

Для предотвращения перегрузки сети TCP применяет несколько алгоритмов, таких как:

  • Медленный старт (slow start): после начала передачи или после тайм-аута размер окна перегрузки (congestion window) увеличивается экспоненциально, пока не будет достигнут порог или не произойдёт потеря.
  • Предотвращение перегрузки (congestion avoidance): после достижения порога размер окна увеличивается линейно.
  • Быстрая повторная передача (fast retransmit): если отправитель получает три одинаковых ACK, он немедленно повторно отправляет предполагаемый потерянный сегмент, не дожидаясь тайм-аута.
  • Быстрое восстановление (fast recovery): после быстрой повторной передачи размер окна уменьшается, но не до нуля, что позволяет избежать медленного старта.

Структура сегмента TCP

Данные в TCP передаются в виде сегментов. Каждый сегмент состоит из заголовка и поля данных. Заголовок TCP имеет минимальный размер 20 байт (без опций) и содержит следующие поля:

  • Порт источника (16 бит) — номер порта отправителя.
  • Порт назначения (16 бит) — номер порта получателя.
  • Порядковый номер (32 бита) — номер первого байта данных в сегменте.
  • Номер подтверждения (32 бита) — содержит порядковый номер следующего ожидаемого байта (если установлен флаг ACK).
  • Длина заголовка (4 бита) — указывает размер заголовка в 32-битных словах.
  • Зарезервированные биты (3 бита) — не используются.
  • Флаги (9 бит) — управляющие биты, такие как SYN (установка соединения), ACK (подтверждение), FIN (завершение соединения), RST (сброс), PSH (немедленная передача), URG (срочные данные) и другие.
  • Размер окна (16 бит) — количество байт, которое получатель готов принять.
  • Контрольная сумма (16 бит) — проверка целостности заголовка и данных.
  • Указатель срочности (16 бит) — указывает на последний байт срочных данных (если установлен флаг URG).
  • Опции (переменная длина) — дополнительные параметры, такие как максимальный размер сегмента (MSS), масштабирование окна (window scaling), выборочное подтверждение (SACK) и другие.

Установление и завершение соединения

Трёхэтапное рукопожатие

Для установления соединения TCP использует процедуру, называемую трёхэтапным рукопожатием (three-way handshake):

  1. Клиент отправляет серверу сегмент с флагом SYN и случайным начальным порядковым номером (ISN).
  2. Сервер отвечает сегментом с флагами SYN и ACK, подтверждая получение SYN и отправляя свой собственный ISN.
  3. Клиент отправляет сегмент с флагом ACK, подтверждая получение SYN от сервера. Соединение считается установленным.

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

Завершение соединения может происходить в четыре этапа (четырёхэтапное рукопожатие), так как TCP допускает полузакрытие (half-close), когда одна сторона прекращает отправку данных, но продолжает приём:

  1. Одна сторона отправляет сегмент с флагом FIN.
  2. Другая сторона подтверждает получение FIN (ACK).
  3. Вторая сторона отправляет свой собственный FIN.
  4. Первая сторона подтверждает получение FIN (ACK). После этого соединение закрывается.

Применение

TCP является основой для множества прикладных протоколов Интернета, требующих надёжной доставки данных. К ним относятся:

  • HTTP и HTTPS — для передачи веб-страниц.
  • FTP — для передачи файлов.
  • SMTP, IMAP, POP3 — для электронной почты.
  • SSH — для удалённого управления.
  • Telnet — для удалённого терминального доступа.
  • WebSocket — для двусторонней связи в реальном времени.

Ограничения и альтернативы

Несмотря на широкое распространение, TCP имеет ряд недостатков:

  • Задержки при установлении соединениятрёхэтапное рукопожатие увеличивает время начала передачи.
  • Гарантия доставки любой ценой — при потере пакетов TCP может вызывать значительные задержки, что неприемлемо для приложений реального времени (голосовая связь, видеоконференции).
  • Отсутствие поддержки многоадресной рассылки — TCP ориентирован только на одноадресную передачу.

Для приложений, где важна скорость доставки, а не надёжность, используется протокол UDP (User Datagram Protocol), который не устанавливает соединение и не гарантирует доставку. Для потокового видео и аудио часто применяются протоколы на основе UDP, такие как RTP (Real-time Transport Protocol). Также существуют протоколы, пытающиеся сочетать свойства TCP и UDP, например, QUIC (Quick UDP Internet Connections), разработанный компанией Google и стандартизированный в RFC 9000.

Интересные факты

  • Изначально TCP и IP были единым протоколом, но в 1978 году их разделили на два уровня: транспортный (TCP) и сетевой (IP).
  • Максимальный размер сегмента TCP (MSS) обычно составляет 1460 байт для Ethernet-сетей, что позволяет избежать фрагментации на канальном уровне.
  • В 2014 году протокол TCP был включён в список «Интернет-зала славы» (Internet Hall of Fame) как одна из ключевых технологий, сформировавших современный Интернет.

Источники

  • RFC 793 — Transmission Control Protocol (1981)
  • RFC 1122 — Requirements for Internet Hosts — Communication Layers (1989)
  • RFC 5681 — TCP Congestion Control (2009)
  • RFC 9000 — QUIC: A UDP-Based Multiplexed and Secure Transport (2021)
  • Стивенс, У. Р. «TCP/IP. Иллюстрированное руководство. Том 1. Протоколы» (2003)
  • Таненбаум, Э., Уэзеролл, Д. «Компьютерные сети» (5-е издание, 2012)

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →