Кратко

  • Kiss-o'-Death использовал Stratum 0 и Reference Identifier как канал статуса и контроля доступа; серверные timestamps в таком пакете не были свидетельством времени и подлежали отбрасыванию.
  • Клиент сначала связывал ответ со своим незавершённым запросом, затем выполнял лишь действие конкретного кода. Поскольку KoD часто не имел аутентификации, предел послушания оставался у клиента.

От перегрузки к отрицательному ответу

RFC 4330 объясняет KoD эксплуатационным эпизодом. Множество домашних и офисных маршрутизаторов настроили на один университетский сервер времени. При некоторых ошибках значительная их доля стала отправлять по пакету в секунду. Всплеск оказался резким, а поиск причины и ограничение потока потребовали чрезвычайных мер.

Сервер мог молча отбрасывать запросы. Для клиента молчание не отличало перегрузку от потери, запрета или временной неисправности; тайм-аут мог породить следующую попытку. Нужен был короткий отрицательный ответ на том же пути, по которому уже возвращался NTP.

Место оставила старая спецификация. RFC 1305 называл Stratum 0 неопределённым, но не назначал Reference Identifier в таком состоянии роль сообщения. RFC 4330 связал поля: нулевой stratum лишал пакет статуса времени, а четыре ASCII-символа Reference ID несли kiss code. Формат назвали Kiss-o'-Death, KoD.

Новый порт не потребовался. Но совпадение оболочки сделало особенно важным различие между измерением и управлением.

Временные поля теряли доказательную силу

В нормальном ответе Receive и Transmit Timestamp сервера вместе с отметками клиента участвуют в оценке offset и round-trip delay. KoD сохраняет расположение полей, но не обещает, что они измеряют обмен.

RFC 5905 определяет Stratum 0 как unspecified или invalid. Reference Identifier тогда может передавать статус и контроль доступа. Серверные Receive и Transmit Timestamp не определены: полагаться на них нельзя, их необходимо отбросить.

Следовательно, RATE — не плохой образец времени. Он не проходит в фильтр, выбор источников или дисциплинирование часов. Его допустимый результат — изменение поведения запроса. Сначала меняется класс сообщения, лишь затем читается код.

Ответ доказывал связь с запросом

В режиме клиент-сервер Origin Timestamp ответа повторяет Transmit Timestamp запроса. RFC 5905 использует совпадение против ложных и повторных пакетов. RFC 8633 требует принимать KoD только при действительном Origin Timestamp.

Порядок обработки таков: найти соответствующий незавершённый запрос; распознать Stratum 0; исключить неопределённые timestamps; применить только переход, назначенный коду.

Это привязка запроса, а не криптографическая личность сервера. Она не даёт произвольной UDP-датаграмме власти лишь за знакомый порт, но не доказывает правдивость причины и не устраняет угрозы от того, кто может видеть ожидаемое состояние.

Разные коды меняли разное состояние

DENY означает отказ удалённого сервера, RSTR — запрет из-за локальной политики. В обоих случаях RFC 5905 требует демобилизовать association и прекратить отправку этому серверу. RATE сообщает о превышении порога: клиент немедленно уменьшает частоту и отступает дальше при повторении.

RATE сохраняет возможность измерения позднее. DENY и RSTR закрывают связь. Ни один код не корректирует часы. Значения с X зарезервированы для частных экспериментов, а неизвестная строка не образует язык неограниченных удалённых команд.

Текущий реестр параметров NTP IANA включает DENY, RSTR, RATE и более поздний NTSN. Реестр закрепляет документированное значение байтов, но не аутентифицирует конкретный пакет и не подтверждает заявленное сервером состояние.

Отступление нельзя отдавать отправителю целиком

RFC 8633 рекомендует уважать KoD, особенно встроенным устройствам без доступной панели управления. Для RATE клиенту следует увеличивать poll interval до разумного предела реализации; показатель 13, то есть два часа, превышать не рекомендуется.

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

Механизм зависит и от качества клиента. Некоторые игнорируют RATE, другие реализации способны по ошибке увеличить поток. Сервер сохраняет внепротокольные средства: dropping, rate limiting, фильтрацию и наблюдение. KoD делает сотрудничество возможным, а не обязательным.

NTS усилил связь отрицательного ответа

RFC 8915 задаёт Network Time Security для режима клиент-сервер. Защищённый ответ обязан содержать Unique Identifier незавершённого запроса и пройти аутентификацию соответствующим ключом server-to-client. Иначе пакет отбрасывается без дальнейшей обработки.

Если сервер не может проверить cookie или аутентифицировать запрос, он может вернуть KoD NTSN — NTS negative acknowledgment. Поскольку защищённое состояние не восстановлено, пакет не содержит обычных NTS Cookie и Authenticator.

Исключение не становится свободным выключателем. После подлинных NTS-ответов следующий KoD должен иметь Unique Identifier открытого запроса. Повторный NTS-KE после принудительного разрыва ограничивается по частоте, чтобы не создать цикл. Автоматический переход на незащищённый NTP также не разрешён.

NTS отвечает сильнее на вопрос о принадлежности пакета. Он не возвращает KoD свойства измерения и не расширяет действие кода.

Реестр управляет словарём

RFC 5905 создал реестры Reference Identifier и KoD. RFC 9748 сменил процедуру на Specification Required, ограничил новые ASCII-значения заглавными буквами и цифрами с нулевым заполнением справа, оставил X для экспериментов и потребовал согласия двух из трёх назначенных экспертов.

Четыре байта способны остаться в устройствах на годы. Публичная спецификация и экспертиза уменьшают конфликт смыслов. Однако IANA не наблюдает пакет в работе, не оценивает политику сервера и не выбирает безопасный предел клиента.

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

Источники и границы

Старый пробел описан в RFC 1305, инцидент и явный KoD — в RFC 4330. Действия и отбрасывание timestamps задаёт RFC 5905, эксплуатационные пределы — RFC 8633, NTS — RFC 8915, реестры — RFC 9748 и IANA. Они не измеряют внедрение, соблюдение или частоту атак в 2026 году.