Кратко
- STOP_SENDING означает, что получателю больше не нужны данные в одном входящем направлении, но не доказывает игнорирование прежних байтов.
- RESET_STREAM завершает только направление отправки у другой стороны; final size фиксирует израсходованный кредит управления потоком, а не выполненную или отменённую работу.
- Транспортные факты нужно отделять от приёма операции приложением, подтверждения отмены, устойчивых эффектов, компенсации и конечного результата.
Клиент может дождаться тайм-аута, перестать нуждаться в ответе и отправить STOP_SENDING с кодом ошибки приложения. Это точный факт транспортного уровня: он просит другую сторону прекратить передачу в одном направлении QUIC-потока. Но он не превращает запись в журнале операций в доказательство отмены удалённого заказа, задания или запроса. Состояние байтов и состояние бизнес-операции подчиняются разным автоматам.
RFC 9000 позволяет приложению, потерявшему интерес к получаемым данным потока, прекратить чтение. Если принимающая часть находится в Recv или Size Known, транспорту следует отправить STOP_SENDING, чтобы побудить закрытие противоположного направления. При этом RFC прямо оговаривает: кадр не гарантирует, что входящие данные будут проигнорированы. Прежние STREAM-байты уже могли прийти, попасть в приложение или быть обработаны. Байты STREAM, пришедшие после STOP_SENDING, всё равно учитываются в управлении потоком потока и соединения, даже если транспорт их отбросит.
Ответ другой стороны — отдельный переход состояния. Если её отправляющая часть находится в Ready или Send, она должна послать RESET_STREAM. В Data Sent она может отложить сброс, пока ожидающие данные не будут подтверждены или объявлены потерянными. При потере следует послать RESET_STREAM, а не повторять эти данные. Другой стороне следует скопировать код ошибки приложения из STOP_SENDING, но она может выбрать иной код. Поэтому оба кода нужно записывать раздельно.
Направление — ключевая граница. RESET_STREAM резко прекращает только отправляющую часть. В двунаправленном потоке противоположное направление остаётся независимым. Для прекращения обоих направлений endpoint может отправить RESET_STREAM для собственной отправки и STOP_SENDING, чтобы побудить к завершению противоположного направления. Это не закрывает соединение и не доказывает завершение пары запрос-ответ или бизнес-процесса.
final size относится к управлению потоком. Он показывает объём данных, потребивший кредит управления потоком на уровне соединения. После определения значение не меняется, независимо от нормального завершения или сброса потока. Оно не показывает объём выполненной работы, факт принятия удалённой операции или откат её эффектов. После RESET_STREAM endpoint прекращает отправку и повторную отправку STREAM-кадров в этом направлении; это правило транспорта, а не восстановление состояния приложения.
Надёжность здесь имеет узкое содержание. QUIC не повторяет потерянный пакет целиком, а при необходимости заново передаёт нужную информацию в новых кадрах. RESET_STREAM отправляется до подтверждения или до подтверждения всех данных потока. STOP_SENDING отправляется до перехода принимающей части в Data Recvd или Reset Recvd. Получение или подтверждение показывает продвижение автомата состояний QUIC. Оно не доказывает, что прежние байты не были использованы, работа отменена, эффекты откачены или компенсация завершена.
В журнале доказательств следует отдельно хранить идентификатор соединения, stream ID, инициатора, тип потока и затронутое направление. Туда же должны попасть решение прекратить чтение, отправки и повторы STOP_SENDING, коды приложения, получение RESET_STREAM и его собственный код, final size, расчёт управления потоком и последующие STREAM-байты. Для удалённого приёма или потребления, согласия или отказа в отмене, устойчивых эффектов, отката, компенсации и результата нужны самостоятельные данные приложения.
Так сохраняется отличие от соседних тем. TR-045 посвящён ACK и обработке пакетов; TR-046 — разрешению, которое даёт управление потоком; TR-052 — границам DATAGRAM и отсутствию гарантии доставки; TR-053 — CONNECTION_CLOSE и завершению состояния транспорта. STOP_SENDING — это запрос на остановку одного направления конкретного потока, пока соединение может продолжать работу.
Обзор для участников
Подробный контекст профиля
Войдите с подходящим уровнем подписки, чтобы открыть полный обзор и примечания к источникам.
Только для Стратегического сообщества
Стратегическое сообщество
Открыто всем читателям. Вступите и войдите, чтобы открыть обзоры профилей.
Вступить в Стратегическое сообществоТолько для Альянса лидеров
Альянс лидеров
Для проверенных владельцев IP-активов и руководителей. Войдите, чтобы открыть обзоры Альянса.
Вступить в Альянс лидеров

