Кратко

  • Копиям зоны требуется согласованный порядок, но не всемирное время. Серийный номер SOA даёт каждой версии 32-битную позицию, сравнимую на месте.
  • После переполнения малое число может быть новее большого. RFC 1982 определил движение по кольцу короче половины оборота, а ровно противоположную пару оставил без порядка.
  • EXPIRE и ограничение на скорость продвижения удаляют слишком старые копии до потери смысла сравнения. Номер показывает относительную последовательность, но не подлинность или право на изменение.

Серверу нужен ответ, а не дата

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

RFC 1034 задал эту процедуру в 1987 году. Вторичный сервер запрашивает запись Start of Authority, сопоставляет SERIAL со своим значением и переносит зону, если версия источника новее. Поля REFRESH, RETRY и EXPIRE задают ритм повторных проверок и предел, после которого неподтверждённая копия перестаёт быть допустимой для обслуживания.

RFC 1035 описал SERIAL как беззнаковый 32-битный номер версии исходной зоны. В документе сказано, что значение переполняется и сравнивается по арифметике пространства последовательностей. Но полной операции сравнения там не было. Разные реализации могли согласиться с цикличностью и всё же по-разному определить, что следует за максимальным значением.

Пробел был мал по объёму, но важен по власти. Правило «какая копия позже» определяет, какую конфигурацию сервер сочтёт достойной замены. Если такого правила нет в общем протоколе, оно незаметно переходит к местной реализации.

Кольцо, у которого нет верхней точки

RFC 1982, опубликованный в августе 1996 года, дал точное определение. Значения от 0 до 4 294 967 295 образуют кольцо по модулю 2^32. Разрешённое единичное прибавление не превышает 2^31−1. При сравнении двух неодинаковых значений новым считается то, до которого вперёд меньше половины полного пространства.

Поэтому после 4 294 967 295 идёт 0, а 12 может следовать за 4 294 967 290. Обычная сортировка целых чисел здесь неверна: большой числовой вид не означает более позднюю историю.

У двух точек, разделённых ровно 2^31, обе дороги по кольцу равны. Выбрать одну как движение вперёд можно было бы только произвольно. RFC 1982 не скрывает эту нехватку информации: значения различны, но ни одно не определено как большее или меньшее.

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

Время жизни удерживает значения рядом

Циклическое сравнение надёжно, только пока старые наблюдения покидают систему раньше, чем первичный сервер уйдёт от них больше чем на пол-оборота. RFC 1982 запрещает продвигать номер суммарно более чем на 2 147 483 647 в течение периода EXPIRE.

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

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

Ошибочный высокий номер нельзя просто стереть

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

RFC 2182 объясняет, почему простое уменьшение не восстанавливает систему. Требуется идти вперёд допустимыми шагами, наблюдать переход всех вторичных серверов и при необходимости повторять этап. У первичного оператора есть право редактировать свой файл, но нет права переписать уже состоявшиеся наблюдения чужих машин.

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

Дата внутри числа остаётся соглашением людей

Для удобства администраторы стали вкладывать в номер календарный вид. RFC 1912 перечислил распространённые ошибки и рекомендовал схему ГГГГММДДnn, где последние цифры считают изменения за день.

Такой формат удобен при чтении журнала. Но DNS не разбирает дату и не проверяет часы автора. На проводе это по-прежнему одно 32-битное значение, к которому применяется арифметика RFC 1982.

Автоматизация может дважды выдать красивый номер, часы могут спешить, публикация может сорваться после увеличения, а ручной ввод — перенести зону слишком далеко. Календарная форма помогает человеку предположить контекст, но не доказывает ни момент изменения, ни автора, ни одобрение.

NOTIFY и IXFR получают порядок, а не создают его

Периодический опрос использует сравнение для решения о переносе. RFC 1996 добавил DNS NOTIFY: настроенный сервер сообщает получателю о вероятном изменении, чтобы тот не ждал следующего интервала. Само уведомление лишь ускоряет проверку SOA; оно не объявляет свою версию победителем.

RFC 1995 использует серийный номер клиента как исходную точку инкрементальной передачи зоны. Если сервер хранит нужную цепочку, он возвращает последовательность удалений и добавлений. Если исходная версия недоступна, возможна полная передача.

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

Отказ от центрального арбитра

RFC 1982 не сделал номер источником всей истины. Он сделал одну операцию достаточно малой, чтобы каждый сервер исполнял её одинаково. Обычный спор о последовательности не требует обращения к регистратуре или общему времени. Стандарт определяет границу общей власти, оставляя проверку содержания и полномочий тем, у кого есть соответствующие данные и ответственность.

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

Источники и пределы доказательств

RFC 1034 и RFC 1035 задают исходную модель зон и SOA. RFC 1912 отражает эксплуатационные ошибки и читаемый формат номера. RFC 1982 определяет арифметику. RFC 2182 рассматривает работу вторичных серверов и исправление ошибочного значения. RFC 1995 и RFC 1996 показывают применение порядка в IXFR и NOTIFY.

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