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

TCP-сегмент

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

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

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

Заголовок TCP-сегмента

Заголовок включает следующие поля (в порядке следования):

  • Порт источника (Source Port) — 16 бит. Указывает номер порта приложения-отправителя.
  • Порт назначения (Destination Port) — 16 бит. Указывает номер порта приложения-получателя.
  • Порядковый номер (Sequence Number) — 32 бита. Номер первого байта данных в данном сегменте (или начальный номер соединения, если установлен флаг SYN).
  • Номер подтверждения (Acknowledgment Number) — 32 бита. Указывает номер следующего байта, который ожидает получить отправитель (подтверждение успешного приёма данных до этого номера). Актуально только при установленном флаге ACK.
  • Длина заголовка (Data Offset) — 4 бита. Указывает длину заголовка TCP в 32-битных словах. Минимальное значение — 5 (20 байт), максимальное — 15 (60 байт).
  • Резерв (Reserved) — 3 бита. Зарезервировано для будущего использования. Должно быть равно нулю.
  • Флаги (Flags) — 9 бит. Набор управляющих битов, каждый из которых выполняет определённую функцию. Основные флаги:
  • URG — флаг срочности. Указывает, что поле «Указатель срочности» содержит значимые данные.
  • ACK — флаг подтверждения. Указывает, что поле «Номер подтверждения» содержит валидное значение.
  • PSH — флаг проталкивания. Указывает, что данные следует немедленно передать приложению без буферизации.
  • RST — флаг сброса соединения. Используется для аварийного разрыва соединения или отказа от него.
  • SYN — флаг синхронизации. Используется для установления соединения (трёхстороннее рукопожатие).
  • FIN — флаг завершения. Указывает, что отправитель закончил передачу данных.
  • Размер окна (Window Size) — 16 бит. Указывает количество байт, которое отправитель готов принять (размер буфера приёма). Используется для управления потоком.
  • Контрольная сумма (Checksum) — 16 бит. Вычисляется для всего сегмента (заголовок + данные) и псевдозаголовка (IP-адреса отправителя и получателя, протокол, длина TCP-сегмента). Используется для обнаружения ошибок при передаче.
  • Указатель срочности (Urgent Pointer) — 16 бит. Указывает смещение от порядкового номера до последнего байта срочных данных. Актуально только при установленном флаге URG.
  • Опции (Options) — переменная длина (от 0 до 40 байт). Могут включать, например, максимальный размер сегмента (MSS), масштабирование окна (Window Scale), временную метку (Timestamp), подтверждение выборочного повтора (SACK). Опции должны быть кратны 4 байтам, при необходимости добавляется выравнивание.
  • Заполнение (Padding) — переменная длина. Добавляется для выравнивания заголовка до границы 32-битного слова.

Поле данных

Поле данных содержит полезную нагрузку — данные, переданные с прикладного уровня. Его длина определяется как общая длина IP-дейтаграммы минус длина IP-заголовка и длина TCP-заголовка. Максимальный размер данных в одном сегменте ограничен значением MSS (Maximum Segment Size), которое согласовывается при установлении соединения.

Формирование и передача TCP-сегмента

Процесс формирования TCP-сегмента включает несколько этапов:

  1. Приём данных от приложения: Прикладной уровень передаёт поток байт транспортному уровню.
  2. Буферизация и сегментация: TCP-модуль разбивает поток байт на сегменты. Размер каждого сегмента обычно выбирается так, чтобы он не превышал MSS и помещался в IP-пакет без фрагментации.
  3. Добавление заголовка: К каждому сегменту добавляется TCP-заголовок с соответствующими полями (порты, порядковый номер, флаги, контрольная сумма и т.д.).
  4. Передача на IP-уровень: Сформированный TCP-сегмент передаётся протоколу IP для инкапсуляции в IP-дейтаграмму и дальнейшей отправки по сети.

Управление соединением с помощью TCP-сегментов

TCP-сегменты играют центральную роль в установлении, поддержании и завершении соединения.

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

Для установления соединения используется обмен сегментами с флагами SYN и ACK:

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

Поддержание соединения и передача данных

В процессе передачи данных каждый отправленный сегмент (кроме повторных передач) имеет свой порядковый номер. Получатель подтверждает приём данных, отправляя сегмент с флагом ACK и номером подтверждения, равным следующему ожидаемому байту. При потере сегмента или получении повреждённого сегмента отправитель повторяет передачу (механизм тайм-аута и повторной передачи). Для повышения эффективности используется скользящее окно (sliding window), размер которого регулируется через поле «Размер окна».

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

Завершение соединения обычно происходит в четыре этапа (четырёхстороннее рукопожатие):

  1. Сторона А → Сторона Б: Отправляется сегмент с флагом FIN.
  2. Сторона Б → Сторона А: Отправляется сегмент с флагом ACK, подтверждающий приём FIN.
  3. Сторона Б → Сторона А: После завершения передачи своих данных сторона Б отправляет сегмент с флагом FIN.
  4. Сторона А → Сторона Б: Отправляется сегмент с флагом ACK, подтверждающий приём FIN. После этого соединение закрывается.

Контроль ошибок и управление потоком

TCP-сегменты обеспечивают надёжность передачи данных через несколько механизмов:

  • Контрольная сумма: Позволяет обнаружить ошибки, возникшие при передаче. Если контрольная сумма не совпадает, сегмент отбрасывается, и отправитель получает уведомление (через тайм-аут или повторное подтверждение).
  • Порядковый номер и подтверждение: Каждый байт данных имеет порядковый номер. Получатель подтверждает успешный приём, отправляя номер следующего ожидаемого байта. Это позволяет обнаружить потерю или дублирование сегментов.
  • Тайм-аут повторной передачи (RTO): Если отправитель не получает подтверждение в течение определённого времени, он повторно отправляет сегмент.
  • Управление потоком: Поле «Размер окна» позволяет получателю регулировать скорость отправки данных, предотвращая переполнение своего буфера.
  • Выборочное подтверждение (SACK): Опция TCP, позволяющая получателю сообщить отправителю о нескольких потерянных сегментах, что ускоряет их повторную передачу.

Применение и значение

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

Протокол TCP, использующий сегменты, гарантирует, что данные будут доставлены в правильном порядке, без потерь и дублирования, что критически важно для приложений, работающих с целостностью данных.

Отличие от других единиц данных

TCP-сегмент следует отличать от других единиц данных в стеке протоколов TCP/IP:

  • IP-пакет (дейтаграмма) — единица данных сетевого уровня. TCP-сегмент инкапсулируется в IP-пакет.
  • Кадр (frame) — единица данных канального уровня (например, Ethernet-кадр). IP-пакет инкапсулируется в кадр.
  • UDP-дейтаграмма — единица данных протокола UDP, который, в отличие от TCP, не гарантирует надёжную доставку.

Источники

  • Postel, J. (1981). Transmission Control Protocol. RFC 793. Internet Engineering Task Force.
  • Stevens, W. R. (1994). TCP/IP Illustrated, Volume 1: The Protocols. Addison-Wesley.
  • Fall, K. R., & Stevens, W. R. (2011). TCP/IP Illustrated, Volume 1: The Protocols (2nd ed.). Addison-Wesley.
  • Куроуз, Дж., Росс, К. (2017). Компьютерные сети: нисходящий подход (6-е изд.). Эксмо.
  • Олифер, В. Г., Олифер, Н. А. (2016). Компьютерные сети. Принципы, технологии, протоколы (5-е изд.). Питер.

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

На главную BFOmetr →