Цели и задачи NTP
а) Синхронизация Во-первых, в компьютерных системах часто требуется иметь точно синхронизированное время (при этом не важно, какая именно величина времени будет использоваться). Примером может быть распределённая система, где есть несколько компьютеров, принимающих запросы и передающих их на центральный сервер для обработки. Чтобы запросы выполнялись точно в том порядке, в котором они были приняты, принимающие компьютеры добавляют в них отметку о времени приёма. Если часы у разных компьютеров в такой системе выставлены по-разному, то может возникнуть ситуация, когда позднее пришедшему запросу будет выставлена меньшая отметка о времени, чем пришедшему ранее, и сервер обработает их в неправильном порядке.
Привязываясь к определению времени, данному ранее, в этом примере требуется сохранять информацию о том, какое из событий – причина и какое – следствие.
Первым из применений NTP на практике действительно была синхронизация часов в центре управления полётами, где было критично, чтобы все диспетчеры имели совершенно одинаковые показания времени.
б) Точное время
Во-вторых, в компьютерных системах часто требуется точно знать текущее время. Примером может быть обсерватория, которая должна наблюдать какие-то события точно в тот момент, когда Земля будет проходить конкретную точку своей орбиты. Здесь задействовано не определение времени, а именно его привязка к астрономическим событиям (движению Земли по орбите и вокруг своей оси).
в) Централизованность
В-третьих, есть потребность и в централизованных службах точного времени, т.е. недостаточно было бы просто поставить на каждый компьютер цезиевые часы, даже если бы это было возможно. Централизованная служба может быть достоверной, тогда как системные часы отдельных компьютеров могут показывать неверное время из-за поломки, преднамеренного повреждения и т.п.
Одним из применений такой централизованной службы могло бы стать «патентное бюро будущего», куда любой может послать проект, бюро автоматически выставит на проекте точное время его принятия и свою цифровую подпись, и отошлёт назад автору. В таких условиях любой конфликт относительно приоритета в каком-нибудь изобретении будет разрешаться простым предъявлением подписанных в бюро проектов.
Кроме того, для поддержания всех часов внутри такого бюро достоверными, оно само должно пользоваться системой синхронизации времени, описанной в первом примере.
г) Цели NTP
В соответствии с тремя приведёнными примерами, области применения NTP можно разделить на три категории: -синхронизация системных часов внутри организации; -синхронизация системных часов с эталонными; -получение точного времени из достоверной службы.
д) Первые протоколы точного времени
Первые протоколы для передачи показаний времени по сети появились в 1983 г. (RFC867 и RFC868). Эти протоколы – DAYTIME и TIME – предназначались для сообщения времени человеку и компьютеру соответственно. Протокол DAYTIME крайне прост: на подключившийся к DAYTIME-серверу компьютер приходит строка наподобие «19 декабря 2004 г., 16:27:47». Формат не регламентируется строго и не предназначен для машинной обработки; предполагается лишь, что человеку, прочитавшему полученную строку, станет ясно текущее время. Оно может включать день недели, миллисекунды, фазу луны или любую другую информацию, которую сервер считает относящейся к делу. Для DAYTIME зарезервирован 13-й TCP-порт. Один из действующих DAYTIME-серверов – atomictime.net – передаёт строку в виде «Fri Dec 24 10:17:58 2004»
Протокол TIME, напротив, предназначен для обмена времени между машинами. На подключившийся к TIME-серверу компьютер приходит UDP-пакет, содержащий единственное 32-битное беззнаковое число, соответствующе числу прошедших с 1 января 1900 г. секунд по UTC. Поскольку такое число переполняется через 136 лет, этот протокол способен функционировать только до 2036 г. Для TIME зарезервирован 37-й UDP-порт.
Сервера точного времени
а) Получение точного времени
Точное время можно получить множеством способов:
- от высокоточных цезиевых часов, установленных поблизости; (Такие часы могут занимать шкаф, помещаться на столе, или быть размером со спичечную коробку – в зависимости от времени выпуска.)
- по радиосигналу, передаваемому службами точного времени: сразу на многих радиочастотах, чтобы минимизировать атмосферные помехи, передаётся сигнал заранее установленной частоты. Так можно получить сигналы точного времени от уже упомянутых USNO и NIST – двух наиболее известных служб точного времени в США, имеющих совместным проектом сервис «Официальное время США» (http://time.gov/about.html);
(Интересное замечание: выпускаются будильники и наручные часы со встроенным радиоприёмником, которые синхронизируются с сигналами точного времени какой-либо из таких служб. Вне зоны приёма их сигнала, например вне США для часов, принимающих сигнал NIST, такие часы совершенно бесполезны.)
- по телефону, позвонив на такую службу точного времени (опять же, в линию выдастся звуковой сигнал заранее установленной частоты);
- по модему, позвонив терминальной программой на службу точного времени (ответом будут показания времени в виде строки);
- от GPS- либо подобного ему спутника (они также передают радиосигнал заранее установленной частоты)
- наконец, по сети от компьютера, получившего его одним из перечисленных способов.
В России, насколько я понимаю, единственными доступными способами являются два последних.
б) NTP-сервера низких стратумов
Официальный список NTP-серверов первого стратума, т.е. непосредственно связанных с высокоточными часами, публикуется на http://ntp.isc.org/bin/view/Servers/StratumOneTimeServers. Наиболее известные из них – tick.usno.navy.mil и tock.usno.navy.mil в USNO (http://tycho.usno.navy.mil/ntp.html) – сильно перегружены, и рассчитывать на них не стоит. В основном, как легко видеть из этих списков, NTP-сервера находятся в США в государственных и академических сайтах (домены .gov и .edu); сервера, расположенные в домене .mil, также многочисленны, но доступ к ним чаще всего ограничен (т.е. нужно писать письмо администратору NTP-сервера, объяснить ему цель своего использования его сервера, и тогда он, если захочет, откроет доступ).
В России, согласно списку, располагалось два сервера второго стратума – в Пушкино и Черноголовке, и нет серверов первого стратума. Как я проверил, эти два сервера уже не отвечают на запросы. Для своих экспериментов я использовал сервер первого стратума (с RefId = «PPS », т.е. связанного с атомными часами) в Borowiec, Польше; он удивил меня крайне малыми задержками (около 100 мс). Как выяснилось, системные часы моего компьютера спешат на 10 мс/мин.
Использование NTP
а) Встроенные средства UNIX
В некоторых UNIX-системах поддержка NTP реализована на уровне ядра, способного хранить время с точностью до 1 мкс. В сети таких систем для синхронизации времени на всех компьютерах не нужно предпринимать никаких дополнительных мер.
б) Встроенные средства WinNT
В WinNT есть служба синхронизации часов в домене (синхронизация осуществляется в рамках протокола NetBEUI) При этом часы контроллера домена можно с помощью этой же службы синхронизировать с внешним сервером посредством SNTP. Далее, эту службу можно настроить как SNTP-клиент и SNTP-сервер на любом компьютере с ОС WinNT. (Служба называется w32time, и вне домена она по умолчанию остановлена; для её запуска нужно выполнить команду “net start w32time”; для задания списка NTP-серверов, с которыми будет производиться синхронизация помимо контроллера домена, нужно выполнить команду “net time /setsntp:список_серверов”.) Для управления этой службой можно использовать программу w32tm.