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

Флаг SYN

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

История и стандартизация

Протокол TCP был разработан в 1970-х годах в рамках проекта ARPANET (предшественника современного Интернета) под руководством Винтона Серфа и Роберта Канна. Спецификация протокола была опубликована в документе RFC 793 (сентябрь 1981 года), где впервые были формально описаны управляющие флаги, включая SYN. Первоначально флаг обозначался как «SYN» и предназначался исключительно для синхронизации порядковых номеров (sequence numbers) в начале сеанса связи.

В последующих расширениях протокола, таких как RFC 1122 (1989 год) и RFC 5961 (2010 год), поведение флага SYN было уточнено в контексте безопасности и обработки аномальных пакетов. Стандарт RFC 793 остаётся базовым документом, определяющим роль SYN в установлении соединения.

Роль в установлении соединения

Флаг SYN является ключевым элементом процедуры «трёхстороннего рукопожатия», которая гарантирует, что обе стороны готовы к обмену данными и согласовали начальные порядковые номера. Процесс состоит из трёх этапов:

  1. SYN (клиент → сервер). Инициатор соединения (клиент) отправляет сегмент с установленным флагом SYN и случайным начальным порядковым номером (ISN — Initial Sequence Number), например, seq=100. Этот пакет означает запрос на открытие соединения.
  2. SYN-ACK (сервер → клиент). Сервер, получив SYN, отвечает сегментом, в котором установлены два флага: SYN (для синхронизации своего порядкового номера) и ACK (подтверждение получения предыдущего сегмента). Сервер указывает свой порядковый номер, например, seq=200, и подтверждает номер клиента: ack=101.
  3. ACK (клиент → сервер). Клиент отправляет сегмент с флагом ACK, подтверждая получение SYN-пакета от сервера. Порядковый номер клиента увеличивается на единицу (seq=101), а подтверждение сервера — ack=201. После этого соединение считается установленным, и начинается передача данных.

Если на любом из этапов пакет не получен или содержит ошибку, соединение не устанавливается, и процесс повторяется через определённое время (тайм-аут).

Структура и расположение в заголовке TCP

Флаг SYN занимает один бит во втором слове (32-битном поле) заголовка TCP, в поле «Flags» (или «Control bits»). В стандартном заголовке TCP, размер которого обычно составляет 20 байт (без опций), флаги располагаются в байте с 13-м смещением (если считать с нуля). Поле Flags содержит 9 бит (в современных реализациях), из которых флаг SYN является вторым по счёту (бит номер 1, если считать от младшего бита, где бит 0 — это флаг FIN).

В двоичной записи заголовка установленный флаг SYN соответствует значению 00000010 (в восьмибитном представлении). В шестнадцатеричной системе — 0x02. При анализе сетевого трафика с помощью снифферов (например, Wireshark или tcpdump) флаг SYN отображается как «[SYN]» в строке описания пакета.

Классификация и варианты использования

Флаг SYN используется не только для штатного установления соединения, но и в ряде специальных сценариев:

Обычный SYN (SYN-пакет)

Стандартный пакет с единственным установленным флагом SYN. Используется для начала «трёхстороннего рукопожатия».

SYN-ACK

Пакет с двумя установленными флагами — SYN и ACK. Является ответом сервера на SYN-запрос и подтверждает готовность к соединению.

SYN-фин (SYN-FIN)

Пакет, в котором одновременно установлены флаги SYN и FIN. Такая комбинация является некорректной с точки зрения протокола, поскольку FIN означает завершение соединения, а SYN — его начало. В нормальной сети такие пакеты не генерируются легитимными приложениями, но могут использоваться в атаках или при сканировании портов для обхода простых межсетевых экранов.

SYN-сканирование (SYN scan)

Метод обнаружения открытых портов на удалённом хосте, при котором злоумышленник отправляет SYN-пакеты на различные порты. Если в ответ приходит SYN-ACK, порт считается открытым. Если приходит RST (сброс) — закрытым. Преимущество метода в том, что полное соединение не устанавливается, что снижает вероятность логирования в некоторых системах.

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

Флаг SYN является основой работы всех TCP-соединений в интернете, включая веб-серфинг (HTTP/HTTPS), электронную почту (SMTP, IMAP), передачу файлов (FTP) и удалённый доступ (SSH). Без него невозможна синхронизация порядковых номеров, что привело бы к хаосу в передаче данных.

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

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

  • В ранних версиях TCP (до RFC 793) флаг SYN назывался «Synchronization flag» и имел несколько иное поведение при обработке ошибок.
  • Значение флага SYN в поле Flags (бит 1) иногда путают с битом 0 (флаг FIN) из-за особенностей нумерации в разных реализациях стека протоколов.
  • При анализе сетевого трафика пакеты с флагом SYN составляют значительную долю всего трафика в момент массовых подключений, например, при запуске веб-сервера или во время DDoS-атак.
  • В некоторых операционных системах (например, Linux) существует возможность настройки поведения ядра при обработке SYN-пакетов через параметры net.ipv4.tcp_syncookies и net.ipv4.tcp_max_syn_backlog.

Источники

  • RFC 793 — Transmission Control Protocol (1981)
  • RFC 1122 — Requirements for Internet Hosts — Communication Layers (1989)
  • RFC 5961 — Improving TCP’s Robustness to Blind In-Window Attacks (2010)
  • Стивенс У. Р. «TCP/IP. Иллюстрированное руководство», том 1 (1994)
  • Документация по сетевому анализатору Wireshark (wireshark.org)

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

На главную BFOmetr →