Кратко

  • TIME-WAIT — это временная граница целостности: после активного закрытия RFC 9293 требует сохранять состояние в течение 2xMSL, чтобы пакеты прежнего соединения не получили полномочий в следующем.
  • В цепочке из RFC 1337 неприемлемый старый сегмент вызывает ACK; уже закрывшая соединение сторона отвечает RST, а принятие этого сброса удаляет TIME-WAIT до истечения карантина.

Документ воспроизвёл три возможных последствия быстрого повторного открытия, но сделал это в специально настроенной симуляции. Это доказательство осуществимости механизма, а не оценка его современной частоты.

Карантин между двумя жизнями соединения

Для приложения разговор уже закончен, но сеть не обязана освободиться от него в ту же секунду. Сегмент данных может задержаться за перегруженным каналом, а дубликат ACK — вернуться по более длинному пути. Такой пакет не знает, что сокеты закрыты и что та же четвёрка адресов и портов вскоре может обозначать уже другое соединение.

TIME-WAIT не даёт этим двум историям смешаться. Сторона, которая активно закрывает соединение, сохраняет блок управления после последнего обмена. RFC 9293 формулирует цену прямо: состояние должно оставаться в TIME-WAIT в течение удвоенного максимального времени жизни сегмента, 2xMSL. Это не отложенная уборка. Пауза нужна, чтобы популяция старых пакетов успела вымереть до повторного использования той же идентичности.

Неприятное наблюдение RFC 1337 состоит в том, что обычная реакция TCP на устаревший трафик могла разрушить этот карантин.

Правильный ответ порождает разрушительный сброс

Цепочка начинается, когда старый сегмент данных или ACK приходит к стороне A, пока та находится в TIME-WAIT. Сегмент неприемлем: его порядковый номер или временная метка относятся к другой жизни соединения. A отвечает ACK со своими текущими значениями SND.NXT и RCV.NXT.

Сторона B уже удалила состояние соединения. Получив ACK, который невозможно сопоставить с известным соединением, она отправляет RST. Если A принимает этот сброс как основание покинуть TIME-WAIT, исчезает именно то состояние, которое должно было пережить старые пакеты. Устаревший сегмент не приказывал A закрыться. Он заставил A заговорить; точный ответ A вызвал сброс у стороны без состояния, а сброс преждевременно завершил ожидание. RFC 1337 назвал эту последовательность TIME-WAIT assassination.

Само «убийство» ещё не означает, что старые данные попали в новое приложение. Оно устраняет границу, которая должна была этому помешать. Для дальнейшего ущерба требуется быстро открыть соединение с той же идентичностью, пока дубликаты не истекли. Пространства порядковых номеров двух поколений должны достаточно пересекаться, а старый пакет — попасть в диапазон, который новое состояние сочтёт допустимым.

RFC 1337 описывает три результата. H1 — ошибочное принятие данных прежнего соединения. При H2 стороны расходятся в представлении о состоянии и, согласно рассматривавшемуся тогда поведению, могут попасть в постоянный цикл ACK. При H3 старый сегмент во время установления вызывает сброс нового соединения, хотя внешне оно уже успело успешно открыться.

Дополнительные условия объясняют, почему документ считает H1, H2 и H3 менее вероятными, чем само преждевременное удаление TIME-WAIT. Одного раннего выхода недостаточно: нужны быстрая повторная выдача той же идентичности, пересечение пространств и подходящий дубликат. Авторы воспроизвели все четыре явления на TCP из SunOS 4.1.1, но в симуляции, намеренно создававшей множество дубликатов и нужные совпадения. Опыт доказывает возможность, однако ничего не говорит о распространённости в современных сетях или о поведении конкретного нынешнего продукта.

Три исправления с разными пределами

Самое прямое предложение RFC 1337 — игнорировать RST, пока соединение находится в TIME-WAIT. При соблюдении принятого в документе двухминутного MSL этот выбор должен исключить H1, H2 и H3. Логика следует назначению состояния: если ожидание должно пережить старый неаутентифицированный трафик, этот же трафик не должен сокращать срок ожидания.

У рекомендации есть чёткая граница доказательств. RFC 1337 имеет статус Informational и просит проводить длительные производственные испытания, чтобы выявить неожиданные последствия. Он не доказывает ни повсеместное внедрение такого поведения, ни его безусловную безопасность в каждой архитектуре.

Вторая мера использует временные метки TCP и PAWS. Если TIME-WAIT сохраняется, пока часы продвигаются вперёд, SYN нового соединения может иметь более свежую метку, чем старые сегменты, и тем самым блокировать H1. Но защита неполна: старый ACK в TIME-WAIT способен вызвать новый ACK с актуальной меткой. Этот «новый старый дубликат» может пройти PAWS в следующем соединении, поэтому H2 и H3 не обязательно исчезают.

Третий вариант — 64-битные порядковые номера. Расширенное пространство сильно отдалило бы повторное использование того же диапазона, но само по себе не помешало бы RST удалить TIME-WAIT раньше срока. Поэтому RFC 1337 рассматривает его как значительное изменение протокола, которое вместе с другими параметрами могло бы предотвратить последующие эффекты, а не как самостоятельное решение убийства.

Современная базовая спецификация сохраняет напряжение

RFC 9293, действующий Internet Standard для TCP, сохраняет 2xMSL после активного закрытия. Новый SYN от той же стороны разрешается принять сразу лишь при условии, что новая ISN выше наибольшего порядкового номера прежнего соединения; если SYN окажется старым дубликатом, конечная система должна вернуться в TIME-WAIT. Для серверов с высокой частотой соединений спецификация также указывает на усовершенствованный алгоритм с временными метками.

Одновременно базовый автомат состояний сохраняет выход, из-за которого вопрос остаётся актуальным. После проверок допустимости обработка RST в TIME-WAIT переводит соединение в CLOSED и удаляет блок управления. Повторная передача удалённого FIN, напротив, подтверждается и заново запускает таймер 2xMSL. Два управляющих сегмента в одном состоянии могут по разным ветвям завершить или продлить защитный интервал.

Поэтому «сократить TIME-WAIT» — не законченная архитектурная политика: она не называет доказательство, которое заменяет время как разделитель поколений. «Хранить больше состояния» тоже недостаточно, если неизвестно, выдерживает ли оно сигналы, способные его удалить. Настоящий вопрос — какое свидетельство достаточно сильно, чтобы завершить карантин, предназначенный переживать старый неаутентифицированный трафик.

Источники пакета ограничены RFC 1337, опубликованным в мае 1992 года как Informational, и RFC 9293, выпущенным в августе 2022 года как Internet Standard. Они описывают механизм, условия и базовые правила TCP, но не устанавливают нынешнюю частоту явления и не характеризуют конкретный продукт.