Что такое ntp сервер
Что такое ntp сервер
Network Time Protocol — сетевой протокол для синхронизации внутренних часов компьютера с использованием сетей с переменной латентностью, основанных на коммутации пакетов.
Хотя традиционно NTP использует для своей работы протокол UDP, он также способен работать и поверх TCP. Система NTP чрезвычайно устойчива к изменениям латентности среды передачи.
Как это работает
NTP-серверы работают в иерархической сети, каждый уровень иерархии называется ярусом (stratum). Ярус 0 представлен эталонными часами. За эталон берется сигнал GPS (Global Positioning System) или службы ACTS (Automated Computer Time Service). На нулевом ярусе NTP-серверы не работают.
NTP-серверы яруса 1 получают данные о времени от эталонных часов. NTP-серверы яруса 2 синхронизируются с серверами яруса 1. Всего может быть до 15 ярусов.
NTP-серверы и NTP-клиенты получают данные о времени от серверов яруса 1, хотя на практике NTP-клиентам лучше не делать этого, поскольку тысячи индивидуальных клиентских запросов окажутся слишком большой нагрузкой для серверов яруса 1. Лучше настроить локальный NTP-сервер, который ваши клиенты будут использовать для получения информации о времени.
Иерархическая структура протокола NTP является отказоустойчивой и избыточной. Рассмотрим пример его работы. Два NTP-сервера яруса 2 синхронизируются с шестью различными серверами яруса 1, каждый — по независимому каналу. Внутренние узлы синхронизируются с внутренними NTP-серверами. Два NTP-сервера яруса 2 координируют время друг с другом. В случае отказа линии связи с сервером яруса 1 или с одним из серверов уровня 2 избыточный сервер уровня 2 берет на себя процесс синхронизации.
Аналогично узлы и устройства яруса 3 могут использовать любой из серверов яруса 2. Что еще более важно, так это то, что наличие избыточной сети серверов NTP гарантирует постоянную доступность серверов времени. Синхронизируясь с несколькими серверами точного времени, NTP использует данные всех источников, чтобы высчитать наиболее точное временя.
Стоит отметить, что протокол NTP не устанавливает время в чистом виде. Он корректирует локальные часы с использованием временного смещения, разницы между временем на NTP-сервере и локальных часах. Серверы и клиенты NTP настраивают свои часы, синхронизируясь с текущим временем постепенно либо единовременно.
Как работает синхронизация времени в интернете
Можно ли синхронизировать свой комп по атомным часам
В прошлый раз мы рассказали, какие сложности могут ждать программистов, когда они пишут код для работы со временем. Сегодня перейдём на более сложный уровень: как компьютеры и другие устройства синхронизируют время между собой.
Зачем нужна синхронизация
От того, какое на компьютере установлено время, зависит многое:
В целом единственный случай, когда не нужна синхронизация, — когда компьютер работает независимо от сети, а результаты его вычислений не связаны со временем. В остальных случаях синхронизация полезна.
Как работает синхронизация
В общем виде синхронизация времени работает так:
Это всё повторяется с какой-то периодичностью — раз в час, раз в день или с любым другим интервалом.
Что такое NTP
NTP — это сокращение от Network Time Protocol, что переводится как «протокол сетевого времени».
Протокол спроектирован так, чтобы заниматься только синхронизацией времени. Для этого используются пакеты объёмом всего 48 байт, причём 24 из них заполняет устройство, а 24 — сервер. Это значит, что для точности в 0,01 секунды достаточно один раз получить и передать 48 символов. Если размер пакета сделать слишком большим, то задержки при передаче будут больше и может пострадать точность синхронизации.
Для работы NTP нужен сервер точного времени, который ответит на наш запрос. Сервер всегда знает, какое сейчас время, и моментально реагирует на каждый запрос.
В операционной системе Windows точное время берётся с сервера time.windows.com
У компании Apple сервер точного времени — time.apple.com
Какие бывают серверы синхронизации
В протоколе NTP есть несколько классов серверов точного времени, в зависимости от точности. Эти классы называются Stratum, а цифра после названия показывает уровень сервера по отношению к самому точному времени.
Stratum 1 — самые точные серверы, которые могут учитывать время с точностью в одну триллионную долю секунды. Они получают время напрямую от атомных часов либо от сервисов GRS или «Глонасс». Для запуска и обслуживания такого сервера нужно сложное оборудование, поэтому серверов первого уровня в мире мало. Большинство из них не отвечает на запросы от обычных пользователей и обслуживает только другие серверы уровнем пониже.
Stratum 2 — серверы точного времени второго уровня. Они получают данные от серверов первого уровня и работают с погрешностью примерно 0,001 секунды. Такие серверы уже могут отвечать на большинство запросов и обслуживать серверы поменьше.
Stratum 3 получают данные от серверов второго уровня, и тут уже точность может падать до 0,05 секунды. Дальше идут уровни 4, 5 и так далее, ограничений снизу нет.
Какая точность нужна для синхронизации
Если вам просто нужно «обычное» точное время с точностью до секунды (например, на телефоне или в часах), то подойдёт любой сервер синхронизации времени. Обычно это будут сервера Stratum 3, потому что их больше всего.
Если нужно что-то обрабатывать с точностью до 0,01 секунды, то нужно найти сервер второго уровня в своей стране и подключиться к нему (так будет точнее). Например, можно использовать серверы в Саратове.
Если же вам нужна точность 0,001 секунды или выше — договаривайтесь с владельцем сервера первого уровня или создавайте свой сервер.
Как установить и настроить NTP на сервере
Работа многих служб ОС зависит от того, насколько точны системные часы. Для чего нужна эта точность? Затем, что неточное время на сервере повлечет за собой много неприятностей.
В качестве примера приведем следующий: если в локальной сети часы машин, которые совместно используют файлы, не будут синхронизированы, то нельзя будет установить время изменения файлов. Из-за этого возникнет конфликт версий или перезаписи данных. Без установки точного времени на сервере появятся и сложности с задачами Cron – непонятно, когда они запустятся. Невозможно будет проанализировать журналы системных событий, чтобы понять причины неисправностей и сбоев.
Для того чтобы эти неприятности не возникли, нужно наладить синхронизацию системных часов. Для этого используется протокол NTP (Network Time Protocol).
Как устроен протокол NTP
Протокол NTP основан на иерархической структуре сервера точного времени, где выделены разные уровни. К нулевому уровню, на котором NTP-серверы не работают, относятся так называемые эталонные часы.
С ними синхронизируются NTP серверы уровня 1, являющиеся источниками для серверов уровня 2. Серверы второго уровня синхронизируются с серверами первого уровня, но еще могут синхронизироваться между собой. Точно так же функционируют серверы третьего уровня и ниже. В целом, поддерживается порядка 256 уровней.
Иерархическая структура NTP является отказоустойчивой и избыточной. Так, резервные серверы берут синхронизацию на себя, когда речь идет об отказах соединения с вышестоящими серверами. Для расчета точного времени NTP берет данные ото всех источников, синхронизируясь с несколькими серверами.
Как установить и настроить NTP-сервер
Чтобы синхронизировать время, используют демон ntpd, который может быть как сервером, принимающим время из удаленных хостов, так и клиентом, раздающим время сторонним хостам. Демон ntpd зависит от указанных в файле конфигурации настроек.
Для установки сервера NTP используется стандартный менеджер пакетов $ sudo apt-get install ntp.
После установки все необходимые настройки NTP будут находиться в файле /etc/ntp.conf.
Первая строчка файла конфигурации – driftfile /var/lib/ntp/ntp.drift. В ней указан файл, в котором хранится информация о том, как часто смещается время. В этом же файле содержится и значение, которое было получено из предыдущих изменений времени. Если по каким-то причинам внешние NTP-серверы недоступны, знание берут из этого файла.
После этого нужно указать файл, сохраняющий логи синхронизации – logfile /var/log/ntp.log.
В файле конфигурации нужно указать перечень серверов NTP, с которыми нужно синхронизироваться. По умолчанию этот перечень выглядит вот так:
Эти строки означают группу серверов, которые сообщают серверу верное время. Через опцию iburst можно увеличить точность синхронизации, то есть указать то, что на сервер необходимо отправлять несколько пакетов вместо одного:
Еще можно донести информацию о нужном сервере через опцию prefer:
Ареал использования серверов NTP
Такие серверы есть во всем мире, но обычно синхронизация происходит с NTP-серверами именно того ареала, где физически находится ваш сервер. Таким образом, в файле конфигурации /etc/ntp.conf указывается поддомен ареала (региона) для pool.ntp.org:
Резервный сервер точного времени
NTP-сервер, по какой-либо причине отключенный от интернета, может передавать для синхронизации данные своих системных часов. Для этого в конфигурационный файл нужно добавить следующую строку:
Особые случаи использования NTP
Например, NTP могут использовать, чтобы усилить трафик в DDoS-атаках. А чтобы избежать столкновения с различными злоупотреблениями, следует ограничить доступ для внешних клиентов. Говоря об ограничениях, то по умолчанию в /etc/ntp.conf файле выставлены такие:
Такие опции, как nomodify, notrap, nopeer и noquery, не позволяют внешним клиентам менять конфигурации на сервере. Параметр kod (расшифровывается как kiss of death, «смертельный поцелуй») дает дополнительный уровень защиты: клиент, который часто отправляет запросы, получает сперва kod-пакет, являющийся предупреждением о том, что в обслуживании отказано, а потом отключается от сервера.
Для синхронизации машин из локальной сети с сервером NTP в файл конфигурации добавляется такая строчка:
А для локального хоста устанавливается неограниченный доступ к серверу NTP:
Как проверить синхронизацию
После сохранения всех изменений в файле конфигурации NTP-сервер нужно перезагрузить:
А затем выполнить команду:
На выходе получится таблица, в которой указаны следующие параметры:
Слева от адреса сервера могут быть указаны еще и такие символы:
Как установить локальные дату и время
Чтобы установить локальные дату и время на сервере, нужно использовать команду ntpdate, при этом отправив необходимый запрос к серверу NTP:
Статус ntpd проверяется при помощи команды:
О точном времени
К сервису синхронизации времени по протоколу NTP все уже привыкли — оно включено по умолчанию или легко включается для большинства популярных операционных систем. Однако какая точность при этом достигается? Какие бывают сервера точного времени, и с какими можно работать простым смертным? Какие есть подводные камни, и как выбрать «правильные» сервера времени?
Типы серверов
Сервера бывают Stratum 1 и 2, 3(выше редко).
«Простым» смертным обращаться к Stratum-1 серверам строго запрещено, т.к. нагрузка на них и так очень большая (а на многие Stratum-1 сервера вообще нет публичного доступа). Считается что вы можете подключаться к Stratum-1 серверам или просить доступ к ним, если вы держите NTP сервер, обслуживающий не менее 100 клиентов. Полный список серверов можно увидеть тут: support.ntp.org/bin/view/Servers/StratumOneTimeServers. Естественно, желательно подключатся к серверам в своей стране.
Stratum 2 — получают точное время от Stratum-1 серверов. При правильной настройке и выборе серверов-источников точного времени имеют погрешность менее 1мс. Подключатся обычно можно всем, но многие сервера регулярно умирают от нагрузки (например time.windows.com). www.pool.ntp.org поддерживает round-robin списки публичных Stratum-2 NTP серверов. Таким образом обеспечивается балансировка нагрузки, и они практически всегда доступны. Подключиться к этим серверам можно по адресам 0.ru.pool.ntp.org 1.ru.pool.ntp.org 2.ru.pool.ntp.org и 3.ru.pool.ntp.org (это для России, выбираются случайно из списка
Stratum 3 — получают время от Stratum-2 серверов, и т.д.
Практическая точность
Stratum-1
Это график разницы системного времени с временем полученным со Stratum-1 серверов (canonical.com — Stratum-2 сервер, для сравнения).
*.nist.gov — расположены в США, из-за «большого» пинга иногда случаются жуткие «выбросы». Ошибка с Российских Stratum-1 серверов обычно укладыватся в +- 1 мс.
Stratum-2
Это — разница с Stratum-2 серверами: 4 из Российского пулла, 1 из европейского, дефолтный сервер времени убунты (europium.canonical.com), и те же *.nist.gov:
Сразу бросаются в глаза сервера, имеющие постоянную ошибку до 20 мс.
Резюме
PS. Кстати, по умолчанию в Ubuntu синхронизация времени происходит один раз при загрузке системы. Если аптайм под полгода — время может сильно уехать. Устанавливаете ntpd — он корректирует время постоянно и «плавно» (без резких рывков, «размазывая» замедление/ускорение времени). В Windows синхронизация происходит раз в сутки неделю одним «скачком», что может вызвать сложности при обработке логов, если набежала большая разница.
Товарищи!
Даешь большое публичных NTP серверов в России! Особенно Stratum-1 (с ними вообще у нас напряженка, 2-3 штуки на весь exUSSR). Кстати, точное время можно брать и с Глонасс, кто возьмётся запустить первый Глонасс-powered сервер?
PPS. Не могу понять, в какой блог перенести, подскажите 🙂
Национальная библиотека им. Н. Э. Баумана
Bauman National Library
Персональные инструменты
NTP (Network Time Protocol)
Уровень (по модели OSI): | Прикладной |
---|---|
Семейство: | стек протоколов TCP/IP |
Порт/ID: | 123/UDP |
Назначение протокола: | Синхронизация часов |
Спецификация: | RFC 5905 |
Вступил в силу с: | 1985 |
NTP (англ. Network Time Protocol — протокол сетевого времени) — сетевой протокол, используемый для синхронизации внутренних системных часов компьютера с помощью сетей с переменной латентностью.
NTP использует для своей работы протокол UDP и учитывает время передачи. Система NTP чрезвычайно устойчива к изменениям латентности среды передачи. В версии 4 способен достигать точности 10 мс (1/100 с) при работе через Интернет, и до 0,2 мс (1/5000 с) и лучше внутри локальных сетей.
Более простая реализация этого алгоритма известна как SNTP — простой протокол сетевого времени. Используется во встраиваемых системах и устройствах, не требующих высокой точности, а также в пользовательских программах точного времени.
Содержание
Принцип работы
NTP-серверы работают в иерархической сети, каждый уровень иерархии называется ярусом (stratum). Ярус 0 представлен эталонными часами. За эталон берется сигнал GPS (Global Positioning System) или службы ACTS (Automated Computer Time Service). На нулевом ярусе NTP-серверы не работают.
NTP-серверы яруса 1 получают данные о времени от эталонных часов. NTP-серверы яруса 2 синхронизируются с серверами яруса 1. Всего может быть до 15 ярусов.
NTP-серверы и NTP-клиенты получают данные о времени от серверов яруса 1, хотя на практике NTP-клиентам лучше не делать этого, поскольку тысячи индивидуальных клиентских запросов окажутся слишком большой нагрузкой для серверов яруса 1. Лучше настроить локальный NTP-сервер, который ваши клиенты будут использовать для получения информации о времени.
Иерархическая структура протокола NTP является отказоустойчивой и избыточной. Рассмотрим пример его работы. Два NTP-сервера яруса 2 синхронизируются с шестью различными серверами яруса 1, каждый — по независимому каналу. Внутренние узлы синхронизируются с внутренними NTP-серверами. Два NTP-сервера яруса 2 координируют время друг с другом. В случае отказа линии связи с сервером яруса 1 или с одним из серверов уровня 2 избыточный сервер уровня 2 берет на себя процесс синхронизации.
Аналогично узлы и устройства яруса 3 могут использовать любой из серверов яруса 2. Что еще более важно, так это то, что наличие избыточной сети серверов NTP гарантирует постоянную доступность серверов времени. Синхронизируясь с несколькими серверами точного времени, NTP использует данные всех источников, чтобы высчитать наиболее точное время.
Надо отметить, что протокол NTP не устанавливает время в чистом виде. Он корректирует локальные часы с использованием временного смещения, разницы между временем на NTP-сервере и локальных часах. Серверы и клиенты NTP настраивают свои часы, синхронизируясь с текущим временем постепенно либо единовременно.
Заголовок
Отступ | Октет | 0 | 1 | 2 | 3 | ||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|Октет | Бит | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 |
0 | 0 | Индикатор коррекции | Номер версии | Режим | Часовой слой | Интервал опроса | Точность | ||||||||||||||||||||||||||
4 | 32 | Задержка | |||||||||||||||||||||||||||||||
8 | 64 | Дисперсия | |||||||||||||||||||||||||||||||
12 | 96 | Идентификатор источника | |||||||||||||||||||||||||||||||
16 | 128 | Время обновления | |||||||||||||||||||||||||||||||
20 | 160 | ||||||||||||||||||||||||||||||||
24 | 192 | Начальное время | |||||||||||||||||||||||||||||||
28 | 224 | ||||||||||||||||||||||||||||||||
32 | 256 | Время приёма | |||||||||||||||||||||||||||||||
36 | 288 | ||||||||||||||||||||||||||||||||
40 | 320 | Время отправки | |||||||||||||||||||||||||||||||
44 | 352 |
Часовой слой
Индикатор коррекции
При следующих значениях:
Номер версии
Режим
При следующих значениях:
Интервал опроса
Задержка
Точность
Идентификатор источника
Временные характеристики
Формат времени
Время представляется в системе NTP 64-битным числом (8 байт), состоящим из 32-битного счётчика секунд и 32-битного счётчика долей секунды, позволяя передавать время в диапазоне 2 32 секунд, с теоретической точностью 2 −32 секунды. Поскольку шкала времени в NTP повторяется каждые 2 32 секунды (136 лет), получатель должен хотя бы примерно знать текущее время (с точностью 68 лет). Также следует учитывать, что время отсчитывается с полуночи 1 января 1900 года, а не с 1970, поэтому из времени NTP нужно вычитать почти 70 лет (с учётом високосных годов), чтобы корректно совместить время с Windows или Unix-системами.