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-сегмента включает несколько этапов:
- Приём данных от приложения: Прикладной уровень передаёт поток байт транспортному уровню.
- Буферизация и сегментация: TCP-модуль разбивает поток байт на сегменты. Размер каждого сегмента обычно выбирается так, чтобы он не превышал MSS и помещался в IP-пакет без фрагментации.
- Добавление заголовка: К каждому сегменту добавляется TCP-заголовок с соответствующими полями (порты, порядковый номер, флаги, контрольная сумма и т.д.).
- Передача на IP-уровень: Сформированный TCP-сегмент передаётся протоколу IP для инкапсуляции в IP-дейтаграмму и дальнейшей отправки по сети.
Управление соединением с помощью TCP-сегментов
TCP-сегменты играют центральную роль в установлении, поддержании и завершении соединения.
Установление соединения (трёхстороннее рукопожатие)
Для установления соединения используется обмен сегментами с флагами SYN и ACK:
- Клиент → Сервер: Отправляется сегмент с флагом SYN и случайным начальным порядковым номером (ISN\_c).
- Сервер → Клиент: Отправляется сегмент с флагами SYN и ACK, содержащий собственный начальный порядковый номер (ISN\_s) и номер подтверждения, равный ISN\_c + 1.
- Клиент → Сервер: Отправляется сегмент с флагом ACK и номером подтверждения, равным ISN\_s + 1. Соединение считается установленным.
Поддержание соединения и передача данных
В процессе передачи данных каждый отправленный сегмент (кроме повторных передач) имеет свой порядковый номер. Получатель подтверждает приём данных, отправляя сегмент с флагом ACK и номером подтверждения, равным следующему ожидаемому байту. При потере сегмента или получении повреждённого сегмента отправитель повторяет передачу (механизм тайм-аута и повторной передачи). Для повышения эффективности используется скользящее окно (sliding window), размер которого регулируется через поле «Размер окна».
Завершение соединения
Завершение соединения обычно происходит в четыре этапа (четырёхстороннее рукопожатие):
- Сторона А → Сторона Б: Отправляется сегмент с флагом FIN.
- Сторона Б → Сторона А: Отправляется сегмент с флагом ACK, подтверждающий приём FIN.
- Сторона Б → Сторона А: После завершения передачи своих данных сторона Б отправляет сегмент с флагом FIN.
- Сторона А → Сторона Б: Отправляется сегмент с флагом ACK, подтверждающий приём FIN. После этого соединение закрывается.
Контроль ошибок и управление потоком
TCP-сегменты обеспечивают надёжность передачи данных через несколько механизмов:
- Контрольная сумма: Позволяет обнаружить ошибки, возникшие при передаче. Если контрольная сумма не совпадает, сегмент отбрасывается, и отправитель получает уведомление (через тайм-аут или повторное подтверждение).
- Порядковый номер и подтверждение: Каждый байт данных имеет порядковый номер. Получатель подтверждает успешный приём, отправляя номер следующего ожидаемого байта. Это позволяет обнаружить потерю или дублирование сегментов.
- Тайм-аут повторной передачи (RTO): Если отправитель не получает подтверждение в течение определённого времени, он повторно отправляет сегмент.
- Управление потоком: Поле «Размер окна» позволяет получателю регулировать скорость отправки данных, предотвращая переполнение своего буфера.
- Выборочное подтверждение (SACK): Опция TCP, позволяющая получателю сообщить отправителю о нескольких потерянных сегментах, что ускоряет их повторную передачу.
Применение и значение
TCP-сегменты являются фундаментальной единицей для работы большинства интернет-приложений, требующих надёжной доставки данных. К ним относятся:
- Веб-серфинг (HTTP/HTTPS).
- Электронная почта (SMTP, POP3, IMAP).
- Передача файлов (FTP, SFTP).
- Удалённый доступ (SSH, Telnet).
- Потоковое видео и аудио (в некоторых реализациях).
Протокол 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 →