NTP
Network Time Protocol (NTP) — сетевой протокол для синхронизации внутренних часов компьютера с использованием сетей с переменной латентностью.
NTP использует для своей работы протокол UDP. Система NTP чрезвычайно устойчива к изменениям латентности среды передачи.
NTP использует алгоритм Марзулло (предложен Кейтом Марзулло (Keith Marzullo) из Университета Калифорнии, Сан-Диего), включая такую особенность, как учёт времени передачи. В версии 4 способен достигать точности 10 мс (1/100 с) при работе через Интернет, и до 0,2 мс (1/5000 с) и лучше внутри локальных сетей.
NTP — один из старейших используемых протоколов. NTP разработан Дэвидом Л. Миллсом (David L. Mills) из университета Дэлавера в 1985 году и в настоящее время продолжает совершенствоваться. Текущая версия — NTP 4.
NTP использует иерархическую систему «часовых уровней» (stratum). Уровень 1 синхронизован с высокоточными часами, например, с системой GPS, ГЛОНАСС (Единая Государственная шкала времени РФ) или атомным эталоном времени. Уровень 2 синхронизируется с одной из машин уровня 1, и так далее.
Рис.1 Иерархия NTP-серверов.
Время представляется в системе NTP 64-битным числом (8 байт), состоящим из 32-битного счётчика секунд и 32-битного счётчика долей секунды, позволяя передавать время в диапазоне 232 секунд, с теоретической точностью 2−32 секунды. Поскольку шкала времени в NTP повторяется каждые 232 секунды (136 лет), получатель должен хотя бы примерно знать текущее время (с точностью 50 лет).
Наиболее широкое применение протокол NTP находит для реализации серверов точного времени. Для достижения максимальной точности предпочтительна постоянная работа программного обеспечения NTP в режиме системной службы. В семействе операционных систем Microsoft Windows, — это служба W32Time (модуль w32time.dll, выполняющийся в svchost.exe), Linux - сервис Ntpd.
Более простая реализация этого алгоритма известна как SNTP — простой синхронизирующий сетевой протокол. Используется во встраиваемых системах и устройствах, не требующих высокой точности, а также в пользовательских программах точного времени.
NTP в Linux
Система Linux, как и большинство других современных операционных систем, фактически имеет двое часов. Первые часы — аппаратные, иногда называемые Real Time Clock, сокращенно (RTC), или часы BIOS, обычно они связаны с колеблющимся кварцевым кристаллом, имеющим точность хода до нескольких секунд в день. Точность зависит от различных колебаний, например, окружающей температуры. Вторые часы — внутренние программные часы, которые идут непрерывно, в том числе и при перерывах в работе системы. Они подвержены отклонениям, связанным с большой системной нагрузкой и задержкой прерываний. Однако система обычно считывает показания аппаратных часов при загрузке и потом использует системные часы. Команда date, устанавливает не аппаратные, а системные часы.
Если используется NTP, можно установить аппаратные часы в ходе первой инсталляции системы и больше никогда не беспокоиться о них.
Микросхема часов реального времени (ЧРВ), используемая на материнских платах, не особенно точна и обычно отстает, или забегает вперед на определенное время каждый день.
Можно синхронизировать аппаратные часы с системными при помощи команды hwclock с опцией -w или –systohc и синхронизировать системные часы с аппаратными при помощи команды hwclock с опцией -s или –hctosys.
Быстро синхронизируем время
Сначала нам бы однократно синхронизировать часы, а уж потом думать о том, как это свалить на компьютер. В Debian GNU/Linux это делается (как и всё прочее) очень просто. Ставим пакеты:
#apt-get install ntp ntpdate
Теперь выбираем сервер точного времени, поближе к вам и не очень загруженный. Список таких серверов можно посмотреть здесь:
- Public NTP Pool Time Servers
- Public NTP Secondary (stratum 2) Time Servers
- Public NTP Primary (stratum 1) Time Servers
или можно выбрать из таблицы:
Таблица 1. Российские NTP cерверы точного времени второго уровня.
ntp1.kangran.su | OpenAccess | Yes | Sergey Ptashnick (root@kangran.ru) | 2009-07-10T14:42:16Z | |
ntp21.vniiftri.ru | OpenAccess | Yes | Andrey Bertcov (noc@vniiftri.ru) | 2010-12-08T20:51:11Z | |
ticktock.net.ru | OpenAccess | No | www.ticktock.net.ru | 2010-08-13T07:36:02Z | |
ntp2.aas.ru | OpenAccess | No | Network Operations (noc at aas dot ru) | 2011-10-16T10:17:32Z | |
ntp.xland.ru | OpenAccess | No | Boris Gribovsky (ntp@xland.ru) | 2004-12-25T17:55:01Z | |
ntp.sirius-p.ru | OpenAccess | Yes | noc@sirius-p.ru | 2012-01-19T19:51:51Z | |
ntp.psn.ru | OpenAccess | Yes | clockmaster@psn.ru | 2006-11-23T15:57:06Z | |
ntp3.ntp-servers.net | OpenAccess | Yes | HSDN Project - http://www.hsdn.org (info@hsdn.org) | 2010-11-16T14:12:25Z | |
ntp.vld.ru | OpenAccess | No | ntpboss_-_-_vld.ru | 2006-06-19T03:36:48Z | |
ntp4.ntp-servers.net | OpenAccess | Yes | HSDN Project - http://www.hsdn.org (info@hsdn.org) | 2010-11-16T14:12:37Z | |
d0012.colocat.ru | OpenAccess | Yes | 2011-12-07T17:25:29Z | ||
ntp5.ntp-servers.net | OpenAccess | Yes | HSDN Project - http://www.hsdn.org (info@hsdn.org) | 2010-11-21T11:41:55Z | |
rtr.firmacem.ru | OpenAccess | Yes | Michael Korotin (michael.korotin@gmail.com) | 2007-11-01T08:00:42Z | |
ntp6.ntp-servers.net | OpenAccess | Yes | HSDN Project - http://www.hsdn.org (info@hsdn.org) | 2010-11-23T01:29:48Z | |
ntp2.kangran.su | OpenAccess | Yes | Sergey Ptashnick (root@kangran.ru) | 2011-01-23T14:51:10Z | |
ntp1.aas.ru | OpenAccess | No | Network Operations (noc at aas dot ru) | 2011-10-16T10:18:23Z | |
ntp.letinet.ru | OpenAccess | No | postmaster at mail dot hostname | 2009-04-02T14:27:28Z | |
ntp7.ntp-servers.net | OpenAccess | Yes | HSDN Project - http://www.hsdn.org (info@hsdn.org) | 2011-03-10T23:29:11Z | |
ntp.hws.ru | ClosedAccess | Yes | Evgeny Illyushko (hostmaster@hws.ru) | 2011-09-15T19:41:14Z |
После чего сервер времени (вместо указанного сервера можно выбрать другой из списка) не мешало бы пощупать:
# ntpdate ntp.remco.org
На что он ответит примерно следующее:
21 Jan 00:56:29 ntpdate[17180]: the NTP socket is in use, exiting
Можно сравнить с правильно настроенными часами и увидеть правильно идут часы на компьютере или нет.
Если есть разница, то это мы сейчас устраним. Теперь однократно синхронизируемся с часами на NTP сервере точного времени:
# ntpdate -bs ntp.remco.org
Всё, ваши часы теперь идут точно.
Опять-таки, кроме этого сервера есть ещё куча других, выбирайте ближайший к вам (ссылки выше).
Автоматическая синхронизация времени на компьютер
В принципе, для отдельно стоящей машины можно написать простенький скрипт и запускать время от времени. Дело в том, что если ставить ntp-server на локальной машине, он будет каждый раз при загрузке пытаться связаться с сервером точного времени. Это чревато увеличением времени загрузки на минуту, а то и более. Если уж так хочется - ищем в районе прямой видимости UNIX-машину, постоянно подключенную к Интернету, и ставим сервер туда, а потом используем её как локальное зеркало точного времени.
Ставим пакет:
#apt-get install ntp-server
После этого лезем в конфиг /etc/ntp.conf и прописываем там правильное зеркало точного времени, например:
server 0.debian.pool.ntp.org iburst server 1.debian.pool.ntp.org iburst server 2.debian.pool.ntp.org iburst server 3.debian.pool.ntp.org iburst
А можно не лазить, настройки по умолчанию (в Debian, по крайней мере) разумны. При следующей перезагрузке / перезапуске ntp ваши часы снова синхронизируются.
На этом настройку NTP в Debian можно считать законченной.
Операции с документом