Флаг 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 является ключевым элементом процедуры «трёхстороннего рукопожатия», которая гарантирует, что обе стороны готовы к обмену данными и согласовали начальные порядковые номера. Процесс состоит из трёх этапов:
- SYN (клиент → сервер). Инициатор соединения (клиент) отправляет сегмент с установленным флагом SYN и случайным начальным порядковым номером (ISN — Initial Sequence Number), например,
seq=100. Этот пакет означает запрос на открытие соединения. - SYN-ACK (сервер → клиент). Сервер, получив SYN, отвечает сегментом, в котором установлены два флага: SYN (для синхронизации своего порядкового номера) и ACK (подтверждение получения предыдущего сегмента). Сервер указывает свой порядковый номер, например,
seq=200, и подтверждает номер клиента:ack=101. - 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 →