Как компьютер узнаёт точное время и чем здесь интересен 2038 год
Ваш браузер узнаёт актуальное время от компьютера. А как узнаёт время компьютер? Через батарейку в материнской плате. А откуда берётся время там? А кто отвечает за то, чтобы время у всех было точное? В этом посте мы проследим, как отсчитывается время, на которое ориентируется современная техника, и рассмотрим, какие потенциальные проблемы сулит такой расклад.
На нижнем уровне в архитектуре времени находятся часы. Атомные часы традиционно считаются самыми точными, но существуют и масштабные проекты, связанные, например, с механическими часами. Один из них, Clock of the Long Now, спонсирует Джефф Безос.
Но собственные аналоговые часы в каждое устройство не вставишь, поэтому они используют время цифровое. И как аналоговое время конвертируется в цифровое? Cloudflare, например, использует фотографии стеллажей с лавовыми лампами, чтобы добиться степени случайности, недоступной в цифровом мире. Может, и здесь используются какие-нибудь технологичные фотографии?
Эталоны времени
Большинство устройств, соединенных с интернетом, используют протокол NTP (network time protocol). В основе его лежит список доверенных источников времени — RCC-часов. Точный ход времени они синхронизируют через сигнал длинноволновых станций (так что здесь у нас не фото, а радио).
Но для трансляции времени таким образом в протоколе должен быть первоисточник. В России, Беларуси и ряде других ближайших стран таковым является Государственный первичный эталон единиц времени, частоты и национальной шкалы времени, за который отвечает Всероссийский научно-исследовательский институт физико-технических и радиотехнических измерений (ВНИИФТРИ).
Для воспроизведения синхронизирующего радиосигнала на частоте 25 кГц здесь используются квантовые водородные стандарты частоты и кварцевые часы, аппаратура внутренних и внешних сличений, аппаратура формирования рабочих шкал времени, средства обеспечения эталона гарантированным электроснабжением.
Первая версия эталона, утвержденная в 1967 году, включала квантовый водородный генератор. Он состоит из нескольких элементов, помещенных в вакуумный колпак. Резонатор с накопительной колбой соединен с источником пучка атомов водорода вакуум-проводом, в котором расположено устройство двойной магнитной сортировки состояний атомов водорода. Оно включает расположенный в магнитном экране соленоид, установленный вдоль оси распространения пучка атомов водорода между первым и вторым сортирующими магнитами. Подробней об устройстве этого стандарта можно почитать в базе патентов.
Квантовый водородный генератор — это лишь один из типов средств и измерений времени и частоты, включенных в государственный реестр России. Всего реестр включает более 1700 (!) таких средств, как указано на сайте ВНИИФТРИ. Некоторые их них мы указали парой абзацев выше. Такое множество, видимо, объясняется тем, что в реестр входят не типы средств, а их конкретные реализации.
В 1975 году водородный генератор заменили на цезиевый репер частоты (цезиевые атомные часы), где секунда равна продолжительности 9 192 631 770 периодов излучения, соответствующего переходу между двумя уровнями невозмущенного основного состояния атома цезия-133. Этот эталон было принят в 1967 году на 13-й Генеральной конференции по мерам и весам (ГКМВ).
Первичный эталон единиц времени развивается по сей день; последняя его версия была утверждена в феврале 2022 года. Основные изменения в последней версии коснулись допустимых порогов точности: в два раза уменьшена относительная нестабильность частоты эталона; более чем в два раза уменьшены пределы допускаемых смещений национальной шкалы времени относительно UTC.
Первичный источник эталонного времени расположен в Москве, вторичные же эталоны имеются еще в трех городах — Иркутске, Хабаровске и Новосибирске. Каждый из них имеет сервера, предоставляющие доступ по протоколу NTPv4 IPv4 в соответствии с международным стандартом RFC-5905, фиксирующим стандарты синхронизации компьютерного времени через интернет.
В США вопросами синхронизации времени занимается NIST — Национальный институт стандартов и технологий. В качестве эталона институт использует две модели цезиевых атомных часов, NIST-F3 и NIST-F4. Первая, скорее, предназначен для референса в качестве частоты, точность которой достигает здесь 10–15 единиц фрактальной частоты. Более того, в течение задокументированного периода наблюдений длительностью 5 месяцев точность составляла 10–17, что, по заявлению NIST, в 100 раз лучше возможных реализаций на водородном генераторе.
Что касается NIST-F4, то после всех оценок и тестирований они станут основным стандартом, гарантированно обеспечивающим точность 10–16 единиц фрактальной частоты. А может, и больше, если судить по предыдущей версии.
Описанные эталоны в пределах своего региона формируют первый уровень протокола, от которого время расходится на серверы первого уровня, что синхронизируются за несколько микросекунд. Эти серверы настроены для взаимного бэкапа и сверки. Далее в протоколе располагается еще два архитектурных слоя, каждый из которых синхронизируется со своим и предыдущим. Если внутреннее время компьютера по какой-то причине рассинхронизируется — например, сядет батарейка на материнской плате — то после восстановления работы оно быстро подтянет актуальное время через NTP-протокол. Или через SNTP — облегченную версию NTP-протокола, используемую во встраиваемых устройствах.
2038 год и другие проблемы цифрового времени
Почему точное время так важно для современных компьютеров? На основе точного времени работают SSL-сертификаты, логирование и сохранение данных. Благодаря временным отметкам вы понимаете, насколько актуальны те или иные ошибки, нужно ли их исправлять. Различные серверы находятся в разных временных зонах, и это тоже нужно учитывать. Проблемы могут даже усугубиться в случае с бессерверными, облачными вычислениями. В конце концов, на переводе времени когда-то (а может, все еще) основаны взломщики различных программных продуктов. Шутка, конечно же, мы не рекомендуем использовать пиратский софт никому.
Для решения возможных проблем со временем необходима стандартизация — и она была воплощена в виде ISO 8601. Он закрепляет представление времени от более значимого к менее значимому, от года к секунде. В качестве разделителя может использоваться дефис, двоеточие или буква T (при переходе ко времени конкретного дня, time). В конце опционально добавляется разница во времени по сравнению с UTC (всемирное координированное время). Международный стандарт был принят и адаптирован многими странами мира; в России он известен как ГОСТ ИСО 8601–2001.
У цифрового времени есть свои проблемы, не свойственные аналоговому — например, проблема 2038 года. Время в UNIX и POSIX-совместимых системах измеряется в секундах, в 32-битном формате начиная с 0:00 1 января 1970 года. Самое позднее время, которое может быть представлено таким образом, — это 03:14:07 19 января 2038 года. Чтобы предотвратить эту проблему, необходимо перейти на 64-битное представление времени во всех операционных системах на всех устройствах. Даже к 2038 это может быть проблематично, учитывая, сколько девайсов нас окружает. В противном случае более позднее время может быть признано операционной системой отрицательным, то есть как время в 1970 и 1901 году, в зависимости от конкретного случая.
Проблемы с переходом к следующему году рассматривали и раньше. Пожалуй, наиболее известна здесь проблема Y2K, 2000 года. Она связана с тем, что во многих устройствах для представления текущего года использовались лишь две последние цифры, то есть 2000 год здесь стал бы нулевым. Были созданы даже специальные государственные комиссии для решения этой проблемы. В итоге значительного эффекта она не возымела, так что ажиотаж был излишним. Были сделаны соответствующие фиксы в JavaScript, Microsoft Excel, других программных продуктах, и всё в целом прошло гладко. Похожие баги предсказывали с наступлением 1975, 2010 и 2022 года, но их эффект оказался еще менее заметен. Посмотрим, что будет со временем UNIX — ждать осталось уже меньше 15 лет.