Кратко

  • SYN cookie кодирует проверяемое временное состояние TCP в начальном номере последовательности сервера, поэтому явную запись SYN-RECEIVED можно не создавать до возвращения третьего ACK.
  • Вернувшаяся квитанция доказывает недавний доступ к обратному пути конкретной четвёрки адресов и портов. Она не удостоверяет человека, не разрешает прикладной запрос и не гарантирует дальнейшую ёмкость.
  • В 32 битах помещается ограниченный объём сведений. Порог включения, восстановленные опции, реакцию на потери и оставшиеся узкие места надо подтверждать на реально работающем стеке.

При обычном пассивном открытии первым обязуется сервер. Получив SYN, он переходит в SYN-RECEIVED, выбирает свой номер, отправляет SYN-ACK и сохраняет сведения о незавершённой попытке. Удалённая сторона ещё не показала, что принимает ответы по заявленному адресу, но уже заняла место в конечной очереди.

SYN flood тиражирует это раннее обязательство. Начатые и не завершённые обмены ждут повторов и тайм-аутов. Когда эмбриональная очередь заполнена, законный клиент может не войти, хотя канал, приложение и установленные соединения ещё располагают запасом. RFC 4987 ограничивает классическую модель состоянием установления; из неё нельзя автоматически выводить насыщение всей полосы или каждого вычислительного ресурса.

У мер защиты разные жертвы. Больший backlog дольше удерживает попытки, но подставляет больше памяти. Короткий таймер быстрее возвращает записи, зато наказывает медленные и теряющие пакеты пути. Переработка самой старой записи делает возраст критерием отбора. SYN cache хранит уменьшенное досье. Прокси заканчивает рукопожатие в другом месте и переносит туда стоимость и смысл решения.

SYN cookie вообще отказывается от досье. Сервер формирует начальный номер так, чтобы он нёс сжатое описание попытки и проверку, зависящую от локального секрета. Исторические схемы соединяют адреса и порты, начальный номер клиента, медленно меняющийся счётчик времени, класс MSS и секреты сервера. RFC 4987 описывает семейство подходов и компромиссов, а не один обязательный алгоритм.

Клиент не знает о кодировке. Он получает обычный SYN-ACK и возвращает ACK на номер сервера плюс один. Сервер восстанавливает значение, перебирает ещё допустимые временные окна и пересчитывает секретную функцию для наблюдаемой четвёрки. Совпадение позволяет собрать состояние и перейти в ESTABLISHED. Несовпадение отбрасывается без поиска эмбриональной записи, которой никогда не было.

Cookie — это квитанция, которую носит заявитель, а не паспорт. Сервер выдаёт запечатанный им талон, не открывая счёт. Возврат означает, что кто-то недавно получил, увидел или узнал SYN-ACK, направленный по этому пути. Для локального решения выделить память этого достаточно. Имени, организации, намерения и цены будущей работы квитанция не сообщает.

Секрет мешает слепому угадыванию вне пути, но не превращает TCP в проверку личности. Наблюдатель на пути видит обмен; множество машин с настоящими адресами возвращает правильные cookies. После допуска они могут расходовать память сокетов, TLS, рабочие процессы, базы данных и бизнес-квоты. Механизм переносит одно обязательство во времени, а не отменяет последующие.

Отказ от памяти требует сжатия. Номер последовательности имеет 32 бита и продолжает выполнять основную роль TCP. Обычная запись сохранила бы точные опции первого SYN. Базовый cookie делит поле между свежестью, целостностью и необходимыми параметрами. В ранних конструкциях для MSS оставляли небольшой индекс распространённых значений. То, что не закодировано и не выводится из ACK, при восстановлении отсутствует.

Window Scale показывает практическое следствие. RFC 7323 разрешает согласовывать эту опцию только в сегментах с SYN и фиксирует коэффициент каждого направления при открытии. Если сервер забыл предложение клиента и расширение cookie не умеет его вернуть, договориться после третьего пакета уже нельзя. RFC 4987 фиксирует исторические ограничения Window Scale, SACK и другого состояния, а также описывает вариант FreeBSD, использовавший возвращаемые биты Timestamp для дополнительных данных.

Один вариант нельзя объявлять универсальным. Не все реализации теряют одни и те же опции: новые кодировки восстанавливают больше. Но и сохранность всех опций нельзя предполагать по одному удачному примеру. Настоящий контракт задают ядро, версия, аппаратный offload, балансировщик, прокси и listener на производственном пути.

Потеря третьего ACK выявляет ещё одну цену в протоколах, где первым говорит сервер. RFC 4987 приводит SMTP. Клиент отправляет последний ACK, считает открытие завершённым и ждёт приветствия. Если ACK исчез, у сервера без состояния нет записи для повторного решения и приложение ещё не уведомлено. Восстановление зависит от дальнейших повторов и конкретного стека. Экономия памяти меняет сторону, первой замечающую молчание.

Гибридный режим лучше ограничивает побочные эффекты. При обычной нагрузке backlog или SYN cache сохраняет богатое состояние согласования и нормальные повторы. Только при локальном переполнении стек переходит к cookies, не выталкивая уже сохранённую попытку. Получается аварийная политика с измеримыми входом, последствиями и выходом, а не постоянная замена установки TCP.

Текущая документация Linux проводит эту границу прямо. tcp_syncookies назван резервным режимом при переполнении SYN backlog сокета, а не способом заставить перегруженный сервер выдерживать неподъёмный законный поток. tcp_max_syn_backlog отдельно задаёт число запоминаемых запросов SYN_RECV для каждого слушающего сокета. Если обычный спрос постоянно держит резервный режим включённым, нужно исследовать ёмкость, очереди, повторы и приложение.

Даже идеальный cookie не устраняет приём и разбор SYN, вычисление ответа, передачу SYN-ACK и проверку ACK. Канал, прерывания, очереди и CPU остаются исчерпаемыми. После установления ограничены accept queue, память соединений, криптография, workers и зависимости. Перенос узкого места может быть ожидаемым успехом; невидимое узкое место без владельца — уже провал эксплуатации.

Проверка исходных адресов дополняет механизм. BCP 38 и BCP 84 затрудняют экспорт пакетов с поддельным источником и уменьшают ответы на вымышленные адреса. Они не мешают реальным ботам завершать рукопожатия и не поглощают законные пики. Исходная сеть решает, какие заявления выпускает; конечная система — когда тратит состояние. Эти полномочия различны.

Наблюдаемость должна вернуть доказательства, убранные из таблицы. RFC 4898 разделяет события эмбриональной очереди, полное выделение ресурсов и приём приложением. В системе SYN cookie закодированный SYN-RCVD не имеет явной строки. Ноль полуоткрытых записей может означать покой, а может означать, что сервер перестал запоминать.

Поэтому нужны связанные показатели: входящие SYN, SYN-ACK и повторы, занятость и переполнение, выданные cookies, верные, неверные и просроченные возвраты, установленные соединения, accept queue и приём приложением. MSS, Window Scale, SACK, Timestamp, ECN и Fast Open надо сравнивать в нормальных и восстановленных соединениях. Без счётчика перехода вместе с состоянием исчезает сигнал тревоги.

TCP Fast Open переносит прикладные данные в SYN под другим cookie и с другими допущениями о повторе. RFC 7413 не обещает, что обычный fallback SYN cookie сохранит такие данные. Фронтенд, балансировщик, offload и ядро испытываются на одном пути. Общее слово cookie не создаёт общего протокольного договора.

SCTP показывает архитектурный контраст. RFC 9260 выделяет в четырёхшаговом установлении State Cookie переменной длины с данными ассоциации, MAC, временем и сроком жизни. Это не формат TCP и не тот же компактный алгоритм. Пример показывает лишь, что отсроченное состояние легче сохранить, когда протокол предусмотрел для него контейнер, а не сжимает растущее согласование в старое поле.

Общая спецификация способна описать инварианты рукопожатия и известные компромиссы. Она не знает память, задержки, необходимые опции и стоимость приложения каждого listener. Принцип минимальной начальной спецификации Heng Lu оставляет порог и допустимую потерю оператору. Примат исполняемого кода задаёт проверку: записанная настройка — намерение, а реальные соединения показывают сохранённую услугу.

Источники