Кратко

  • Пустой транспортный параметр reset_stream_at должен прийти от другой стороны раньше кадра RESET_STREAM_AT. Это разрешение на синтаксис, а не согласие о смысле первых байтов.
  • Reliable Size задаёт минимум, а не точную границу. Он может только уменьшаться; старое большее значение, пришедшее позже, не восстанавливает прежнее обещание.
  • WebTransport отдельным требованием сохраняет в надёжном префиксе идентификатор сессии. Именно прикладное правило позволяет отнести аварийно завершённый поток к владельцу.

Одобрение ещё не означает публикацию RFC

6 сентября 2026 года Marten Seemann и Kazuho Oku представили редакцию 11 QUIC Stream Resets with Partial Delivery. Datatracker называет её рабочим документом Standards Track группы QUIC. Текущие состояния включают передачу в IESG, «IANA OK — Actions Needed» и «Approved-announcement to be sent». Решение IESG принято, но официальное сообщение, редакционная обработка и номер RFC ещё не завершены. Поэтому здесь речь идёт о проекте.

Версия вышла после заседания IESG 3 сентября и содержит содержательные ответы на замечания. Добавлены запрет неоговорённого использования, слово «minimum» в определении Reliable Size, точное описание повторной передачи текущей информации, раздельные проверки полей, ясное правило для переупорядоченных пакетов и рекомендация нулевого значения после STOP_SENDING.

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

Право на кадр создаёт другая сторона

Поддержка объявляется параметром reset_stream_at со значением типа 0x1d; тело параметра пустое. Непустое тело приводит к TRANSPORT_PARAMETER_ERROR. Новая норма запрещает endpoint отправлять кадр 0x24, если peer не объявил возможность.

Наличие кода, сведения о версии продукта или удачный опыт прошлой связи разрешением не являются. Источник полномочия — состояние текущего handshake, созданное адресатом. Умение сериализовать кадр не даёт контроля над чужим анализатором.

При 0-RTT стороны помнят, объявлял ли сервер расширение. Если сервер принимает ранние данные, он не может отключить его в возобновлённом соединении. Отказать в 0-RTT можно; принять старый контекст и одновременно отозвать его предпосылку — нельзя.

Даже успешное согласование подтверждает лишь способность разобрать кадр. Оно не определяет обязательный заголовок и не замораживает первый положительный минимум.

Порог доставки движется только вниз

В RESET_STREAM_AT входят Stream ID, Application Protocol Error Code, Final Size и Reliable Size. Final Size сохраняет полную учётную длину потока. Reliable Size обозначает минимальный префикс, который приложение получит несмотря на сброс. Значение выше Final Size вызывает FRAME_ENCODING_ERROR.

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

Последующий кадр может снизить минимум. Обычный RESET_STREAM по эффекту доставки равен нулю. Повышение запрещено. Информация о текущем пороге и данные под ним повторяются до подтверждения.

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

Переупорядочение не оживляет старое решение

Пусть сначала заявлены 72 байта, затем 14. Кадр с 14 может прийти раньше. Поздний кадр с 72 не повышает порог: остаётся 14. Иначе порядок сети отменял бы монотонность решения.

В версии 10 предлагалось игнорировать кадр, повышающий Reliable Size. Это можно было понять как пропуск проверки Error Code и Final Size. Версия 11 велит игнорировать только повышение. Код ошибки сохраняется между сбросами, а Final Size — между сбросами и STREAM с FIN. Несоответствие даёт STREAM_STATE_ERROR либо FINAL_SIZE_ERROR.

Поля находятся рядом, но несут разные утверждения. Устаревший минимум не лишает остальные поля доказательного значения. Проверка по полям сохраняет конфликт, который грубая метка «старый кадр» скрыла бы.

Несокращаемый префикс задаёт приложение

Проект QUIC разрешает прикладному протоколу установить порог, ниже которого Reliable Size опускать нельзя. Транспорт знает номера байтов, но не знает, где лежит идентификатор сессии, подписки или семейства объектов.

WebTransport over HTTP/3 версии 16 требует при сбросе потока данных использовать RESET_STREAM_AT с минимумом не короче заголовка WebTransport. Его ID связывает поток с сессией. Потеря ID оставляет ошибку без ясного владельца и мешает освободить правильное состояние.

Проект Media over QUIC Transport версии 17 формулирует близкое, но более мягкое правило: Reliable Size следует покрывать заголовок subgroup stream, чтобы определить подписку и учесть сброс в PUBLISH_DONE. Недостаточный префикс может удерживать подписку до timeout.

MUST и SHOULD выражают разные прикладные решения. QUIC предлагает механизм уменьшающегося минимума; верхний протокол определяет цену потери идентичности и допустимый момент выхода.

STOP_SENDING меняет смысл оставшейся обязанности

STOP_SENDING сообщает, что принимающее приложение больше не хочет поток. Версия 11 рекомендует отвечать RESET_STREAM_AT с Reliable Size ноль. Продолжение передачи положительного префикса расходовало бы окно перегрузки, кредит flow control, память и время ради стороны, отказавшейся обрабатывать данные.

Ноль даёт определённый путь к обычному сбросу и показывает, что первый порог не является бессрочным долгом. Если посреднику всё же нужен заголовок для передачи ошибки на следующий hop, прикладной протокол обязан назвать исключение, длину, срок и плательщика за сохранённое состояние.

Надёжность — ограниченная обязанность, не право игнорировать отмену. Без владельца и условия окончания она превращается в удержание чужих ресурсов.

После слова «сброс» ресурсы не исчезают

Final Size остаётся под stream- и connection-level flow control. При нехватке кредита отправитель может отложить сам RESET_STREAM_AT; превышение лимита вызывает FLOW_CONTROL_ERROR. Кадр требует ACK, а его информация и байты под минимумом повторяются при потере.

Сторона отправителя достигает Data Recvd только после подтверждения текущего минимума и данных. Получатель ждёт их поступления. До этого сохраняется риск фиксации и исчерпания ресурсов.

Наблюдение должно связывать объявление поддержки, первое и наименьшее значение, Final Size, повторные байты, блокировку, момент STOP_SENDING, время до финального состояния и данные, живущие до timeout. Счётчик отправленных reset не показывает оставшийся долг.

Границы исследования

Источники подтверждают текст, историю редакций и логику рецензентов. Они не подтверждают внедрение, производительность, совместимость или реальный инцидент. Браузеры, CDN, реле, библиотеки QUIC и медиасервисы не тестировались. Статус IANA говорит о предстоящих действиях, а не доказывает окончательность всех записей.

Упомянутые версии WebTransport и MoQ тоже остаются проектами. Их нормы показывают способ использования механизма, но могут измениться. Версия 11 также проходит публикационный процесс.

Устойчивый вывод узок: разрешение кадра, текущая минимальная доставка, незаменимый прикладной заголовок и просьба остановиться принадлежат разным властям. Running code должен хранить эти факты отдельно и проверяемо.

Источники