Кратко

  • Когда reportAfter исчерпывался, RFC 3342 создавал временный отчёт, но всё равно передавал исходные данные следующему ретранслятору.
  • noLaterThan мог остановить доставку, а returnTrip ограничивал возвращение финального отчёта; предупреждение, блокировка, получение квитанции и результат оставались разными фактами.

Ядро APEX предоставляло немедленный сервис прикладных датаграмм без гарантий. Без опций недоступный ретранслятор мог привести к молчаливой потере. RFC 3342 добавил ожидание, контроль времени и отчётность, но не позволил любому таймеру объявлять окончательный исход.

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

Порог наблюдения не останавливал данные

dataTiming обрабатывался на каждом переходе, поэтому отправитель задавал targetHop="all" и mustUnderstand="true". Перед передачей ретранслятор вычитал из reportAfter локальное время поиска следующего узла, привязки и подготовки отправки.

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

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

Жёсткий бюджет менял исполнение

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

Разница точна: reportAfter означает «сообщи и продолжай», noLaterThan — «дальше не передавай». Единый статус timeout скрывает, остаётся ли первая попытка живой.

Даже остановка не называла единственную причину. Бюджет могли съесть локальные вычисления, медленное соединение, недоступный узел, перегрузка или неподключённая конечная точка. Квитанция доказывала событие в конкретной границе, но не пользовательский результат.

Квитанция ехала отдельным сообщением

После успешной передачи получателю ненулевой returnTrip запускал финальный отчёт. Он возвращался как новая операция данных APEX. Её dataTiming.noLaterThan равнялся исходному returnTrip.

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

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

Очередь и число переходов отвечали на другие вопросы

hold4Endpoint позволял хранить данные, пока конечная точка не подключена. Без верхней границы очередь могла жить бесконечно. RFC предупреждал об атаке отказа в обслуживании и предлагал административные ограничения, например короткий noLaterThan. Хранение не было доставкой.

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

attachOverride позволял новой программе заменить прежнюю у того же endpoint. Вопрос принадлежности поздних данных относится к RFC 3340 и отдельной статье. Временной отчёт сам по себе не назначал владельца действия.

Historic не означает причинный приговор

RFC 3342 опубликован в июле 2002 года как Standards Track, теперь имеет статус Historic; поиск RFC Editor не показывает соответствующих errata. Запись IETF от 29 июля 2012 года сообщает, что, насколько было известно IETF, реализации RFC 3340–3343 не были развёрнуты, а функции предоставлялись широко распространённым XMPP по RFC 6120 и RFC 6121.

Эта формулировка не доказывает, что временные опции стали причиной. Она не содержит измерения, инцидента или оценки реализации. Спецификация также предупреждала, что dataTiming может раскрывать частную топологию, и допускала его применение только на границах административного домена.

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

Источники