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

Протокол TCP

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

История

Разработка TCP началась в 1970-х годах в рамках проекта ARPANET, финансируемого Министерством обороны США. Первоначальная спецификация была предложена в 1974 году в статье Винтона Серфа и Роберта Канна «A Protocol for Packet Network Intercommunication». В 1978 году протокол был разделён на две части: TCP (отвечающий за надёжную доставку) и IP (отвечающий за маршрутизацию). В 1981 году была опубликована спецификация RFC 793, которая стала основой современного TCP. В последующие годы протокол неоднократно дополнялся — были введены алгоритмы управления перегрузкой (TCP Tahoe, Reno, Cubic), механизмы выборочного подтверждения (SACK), масштабирование окна и другие улучшения, описанные в серии RFC.

Архитектура и принципы работы

Установление соединения (тройное рукопожатие)

TCP использует процедуру тройного рукопожатия (three-way handshake) для установления соединения:

  1. Клиент отправляет серверу сегмент с флагом SYN (synchronize) и начальным порядковым номером (ISN — Initial Sequence Number).
  2. Сервер отвечает сегментом с флагами SYN и ACK (acknowledge), подтверждая получение SYN и указывая свой ISN.
  3. Клиент отправляет сегмент с флагом ACK, подтверждая получение SYN от сервера. После этого соединение считается установленным.

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

Данные передаются в виде сегментов, каждый из которых содержит порядковый номер (sequence number) и номер подтверждения (acknowledgment number). Порядковые номера позволяют получателю восстанавливать исходный порядок байтов и обнаруживать потери. Получатель отправляет подтверждения (ACK) на успешно принятые сегменты. Если отправитель не получает ACK в течение тайм-аута, он повторно передаёт сегмент.

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

Соединение завершается с помощью четырёхэтапной процедуры (four-way handshake):

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

Формат заголовка TCP

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

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

Управление потоком (Flow Control)

TCP использует механизм скользящего окна (sliding window) для предотвращения переполнения буфера получателя. Размер окна (window size) указывается получателем в каждом сегменте ACK. Отправитель не может передать больше данных, чем позволяет текущее окно.

Управление перегрузкой (Congestion Control)

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

Порты и сокеты

TCP-соединение однозначно идентифицируется четырьмя параметрами: IP-адрес источника, порт источника, IP-адрес назначения, порт назначения. Эта комбинация называется сокетом (socket). Номера портов делятся на три диапазона:

Применение

TCP используется в большинстве приложений, требующих надёжной доставки данных:

Ограничения и критика

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

Альтернативы

Для задач, где надёжность не критична или требуется минимальная задержка, используется UDP (User Datagram Protocol). Существуют также протоколы, сочетающие свойства TCP и UDP: QUIC (на базе UDP, разработан Google, используется в HTTP/3), SCTP (Stream Control Transmission Protocol) и DCCP (Datagram Congestion Control Protocol).

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

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

На главную BFOmetr →