Кратко
- Главная историческая причина трёхэтапного рукопожатия — не позволить старому дубликату SYN выдать себя за открытие нового соединения.
- Каждая сторона выбирает начальный номер. Ответчик совмещает подтверждение чужого номера со своим SYN; третье сообщение доказывает, что инициатор увидел именно нынешний ответ.
- Quiet Time, TIME-WAIT, секретные ISN и SYN cookies решают разные задачи памяти, старых пакетов, угадывания и расхода ресурсов. Это не проверка личности.
Сегмент из прежнего разговора
Интернет задерживает, дублирует и переставляет пакеты. После закрытия те же два адреса и порта могут быть использованы снова, пока прежний SYN ещё блуждает по сети. По одному заголовку получатель не узнает его возраст.
RFC 761 в январе 1980 года описал два независимо выбранных пространства последовательности. Каждый TCP назначает начальный номер отправки и узнаёт номер партнёра. Лишь после этого байты можно отнести к правильному воплощению соединения.
Четыре факта в трёх сообщениях
A сообщает X, B подтверждает X, B сообщает Y, A подтверждает Y. Два действия B объединяются: SYN X; SYN Y, ACK X+1; ACK Y+1.
SYN занимает одно место последовательности, поэтому ожидается X+1. Чистый ACK места не занимает, иначе подтверждения пришлось бы подтверждать бесконечно. RFC 793 закрепил обмен и состояния в 1981 году.
Глобального регистра соединений нет. Локальные выборы становятся общей проверяемой реальностью через взаимные сообщения.
Третий шаг подтверждает настоящее
Отправив SYN-ACK, B знает только, что получил SYN. Он ещё не знает, помнит ли нынешний A этот запрос: пакет мог остаться от старого соединения. Финальный ACK называет текущий Y и показывает, что состояние A увидело ответ B.
RFC 761 называл это обменом памяти на сообщения. Вместо хранения полной истории номеров для каждой пары принимающая сторона требует ещё одно подтверждение.
Доказательство узкое: оно относится к состоянию TCP, а не к личности пользователя, полномочиям приложения или отсутствию наблюдателя на пути.
Старым номерам нужен срок
Рукопожатие отсекает старый SYN, но данные и ACK закрытого соединения могут выжить. Ранние спецификации приняли две минуты как максимальную жизнь сегмента. Потеряв память номеров после сбоя, хост должен был молчать один MSL; сохранив память — продолжить выше недавнего диапазона.
TIME-WAIT удерживает четверку два MSL после нормального закрытия. Дубликаты успевают исчезнуть, а последний ACK закрытия можно повторить. Ожидание хранит смысл, не позволяя старому пакету стать новой информацией.
Современный RFC 9293 сохраняет модель, но считает стартовое молчание обычно ненужным. Случайные порты и ISN, более короткая фактическая жизнь пакетов и длительность перезагрузки снизили риск. На высоких скоростях timestamps и PAWS защищают от быстрого оборота 32 бит.
Убийство TIME-WAIT
RFC 1337 показал, как старый сегмент вызывает ACK, удаливший состояние партнер отвечает RST, а принятие RST преждевременно уничтожает TIME-WAIT. Немедленно открытая заново четверка оказывается доступна старым данным и подтверждениям.
Документ продемонстрировал ошибочные байты, рассинхронизацию и отказ соединения. Рукопожатие защищает начало, окно — живое соединение, TIME-WAIT — границу поколений. Это не взаимозаменяемые проверки.
Свежий номер не означает проверенную личность
Предсказуемые ISN позволяли удалённо угадать нужный ACK. RFC 6528 складывает временной счётчик с секретной функцией двух адресов и портов. Разные четверки получают внешне несвязанные смещения, сохраняя движение во времени.
Слепое угадывание усложняется, но наблюдатель на пути видит обмен. Подлинность партнёра требует отдельной криптографической проверки.
Состояние внутри вызова
Сервер часто выделяет память после первого SYN, ещё не получив ответа клиента. Поддельные SYN заполняют очередь. RFC 4987 описывает публичную историю SYN flood с 1996 года и распространённые меры.
SYN cookie кодирует четверку, номер клиента, время, часть параметров и секрет в номере SYN-ACK. Полное состояние не хранится. Вернувшийся финальный ACK позволяет проверить cookie и восстановить нужные данные.
Расход откладывается до получения доказательства. Ограниченные биты сокращают возможности согласования, а реализации выбирают разные компромиссы.
За тремя пакетами стоит разделение функций: сеть доставляет, конечные узлы выбирают, ACK синхронизируют, время погашает старое, секрет мешает угадывать, cookie откладывает память. Ни одна функция не удостоверяет реальную личность партнёра.
Источники и пределы доказательств
- https://www.rfc-editor.org/rfc/rfc761.html
- https://www.rfc-editor.org/rfc/rfc793.html
- https://www.rfc-editor.org/rfc/rfc1337.html
- https://www.rfc-editor.org/rfc/rfc4987.html
- https://www.rfc-editor.org/rfc/rfc6528.html
- https://www.rfc-editor.org/rfc/rfc9293.html
RFC подтверждают спецификации и ограниченные анализы сбоев, но не единую дату внедрения. Формула о взаимном доказательстве, превращающем локальный выбор в общее состояние, — архитектурный вывод из механизмов.
Обзор для участников
Подробный контекст профиля
Войдите с подходящим уровнем подписки, чтобы открыть полный обзор и примечания к источникам.
Только для Стратегического сообщества
Стратегическое сообщество
Открыто всем читателям. Вступите и войдите, чтобы открыть обзоры профилей.
Вступить в Стратегическое сообществоТолько для Альянса лидеров
Альянс лидеров
Для проверенных владельцев IP-активов и руководителей. Войдите, чтобы открыть обзоры Альянса.
Вступить в Альянс лидеров
