Для некоторых служб операционной системы огромную значимость имеет точность системных часов. Связано это с тем, что неточное время на сервере повлечет за собой множество неприятностей. Пример – отсутствие синхронизации файлов. Это помешает установить точное время внесения в них изменений, что приведет к конфликту версий или полной перезаписи информации. Избежать всего этого можно при помощи налаживания синхронизации часов на устройстве и серверной части приложения/проекта. Для этого необходимо воспользоваться специальным протоколом – Network Time Protocol.

Далее необходимо познакомиться с ним более подробно. Предстоит выяснить, что он собой представляет, для каких целей используется, как настраивается и устанавливается. Эта информация пригодится как разработчикам, так и другим IT-специалистам.

Определение

NTP (или протокол сетевого времени) – это сетевой протокол, используемый для синхронизации внутренних часов компьютера/ноутбука с использованием сетей с перманентной латентностью. Он появился благодаря трудам Дэвида Л. Миллса, профессора Делавэрского университета.

NTP является одним из наиболее распространенных и старейших Интернет-протоколов. Он активно используется по сей день. NTP предназначается для синхронизации компьютеров, подключенных к сети, с точностью до нескольких миллисекунд от UTC (или «универсального координированного времени».

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

NTP, базирующийся на алгоритме Марзулло, использует для функционирования UDP-протокол и учитывает время передачи. Более простая реализация алгоритма известна как SNTP – простой протокол сетевого времени. Он встречается в:

  • пользовательских программах точного времени;
  • встраиваемых системах;
  • устройствах, не требующих повышенной степени точности.

Рекомендуется оставить программное обеспечение NTP работать в режиме системной службы. Операционные системы Microsoft Windows в качестве такого элемента предлагают W32Time, а Linux – демон Ntpd или chronyd.

Устройство протокола

NTP-протокол базируется на иерархической структуре сервера точного времени, где выделяются разнообразные уровни. К нулевому уровню, на котором NTP не работает, относятся так называемые «эталонные часы». С ними синхронизируются NTP-серверы первого уровня – они выступают источниками для серверов второго уровня. Далее серверы 2 уровня синхронизируется с серверами первого уровня, а также (иногда) друг с другом. Точно также работают серверы третьего уровня и ниже. Всего предусматривается 256 уровней.

Иерархическая структура NTP-протокола обладает высоким уровнем избыточности и отказоустойчивостью. Резервные серверы осуществляют синхронизацию, если система отказывается от соединения с вышестоящими серверами. Для расчета точного времени NTP будет использовать данные, поступающие от всех источников, предварительно поддерживая связь с несколькими серверами.

Установка и настройка сервера

Теперь, когда стало понятно, что собой представляет NTP-сервер, предстоит научиться работать с ним. В качестве примера все операции будут реализованы на операционных системах Linux. Для синхронизации времени используется демон ntpd. Он может выступать в качестве:

  • сервера, принимающего время из удаленных хостов;
  • клиента, раздающего время сторонним хостам.

Демон ntpd напрямую зависит от записанных в файле конфигурации параметров (настроек). Для инициализации NTP-server требуется воспользоваться стандартным менеджером пакетов:

$ sudo apt-get install ntp

После установки все параметры NTP будут расположены в документе /etc/ntp.conf. первая конфигурационная строка – driftfile/var/lib/ntp/ntp.drift. Он включает в себя файл, в котором размещается информация о частоте смещения времени. Здесь же находится значение, полученное от предыдущих временных корректировок. Если по тем или иным причинам внешние NTP-servers недоступны, сведения берутся из соответствующего файла.

После установки серверной части требуется задать документ, сохраняющий логи синхронизации. Им выступает logfile/var/log/ntp.log.

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

  • server 0.ubuntu.pool.ntp.org;
  • server 1.ubuntu.pool.ntp.org;
  • server 2.ubuntu.pool.ntp.org;
  • server 3.ubuntu.pool.ntp.org.

Представленные строки указывают на серверные группы. Они сообщают NTP server верное текущее время. При помощи опции iburst допускается увеличение точности синхронизации. Данная операция позволяет указать на то, что серверной стороне необходимо отправлять несколько пакетов, а не один:

  • server 0.ubuntu.pool.ntp.org iburst;
  • server 1.ubuntu.pool.ntp.org iburst;
  • server 2.ubuntu.pool.ntp.org iburst;
  • server 3.ubuntu.pool.ntp.org iburst.

Сведения о нужном сервере доносятся до системы при помощи опции prefer. Она пишется через пробел от iburst.

Ареалы использования

NTP встречаются по всему миру, но чаще всего синхронизация времени осуществляется с серверами того ареала, где физически расположен задействованный сервер. За счет этого конфигурационный файл /etc/ntp.conf требует указания поддомена региона для pool.ntp.org. Он указывается перед соответствующей записью.

Ориентироваться можно на следующие варианты записи:

  • ru – Россия;
  • south-america – Южная Америка;
  • africa – Африка;
  • asia – Азия;
  • north-america – Северная Америка;
  • oceania – Океания;
  • europe – Европа.

Так, если серверная часть системы физически располагается в России, нужно записать в конфигурационном файле строку: ru.pool.ntp.org.

Резервный сервер

При синхронизации времени через NTP необходимо обеспечить резервный сервер. Он пригодится, если основная серверная часть системы отключится от Интернета. За счет резервной части передача времени для системных часов все равно будет осуществляться.

Для добавления резервного сервера установки NTP времени необходимо добавить в файл конфигурации строку:

server 127.127.1.0

После этого даже разрыв соединения с Интернетом не нарушит синхронизацию системных часов.

Проверка синхронизации

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

$ service restart ntp

После – выполнить команду:

$ ntpq -p

В конечном итоге на экране появится длинная таблица. В ней указаны следующие параметры:

  • remote – адрес сервера точного времени;
  • refid – сервер;
  • st – уровень;
  • t – тип пира;
  • when – строка, указывающая на момент последней синхронизации;
  • poll – время синхронизации демона NTP с пиром (в секундах);
  • reach – доступность серверной стороны;
  • delay – время задержки ответа от NTP;
  • offset – разница во времени между сервером и сервером синхронизации;
  • jitter – временное смещение на удаленной серверной стороне системы.

Слева от основного серверного адреса могут быть указаны дополнительные служебные символы. А именно:

  • «*» – сервер, выбранный для синхронизации времени;
  • «+» – пригодный для синхронизации времени сервер;
  • «-» – рекомендуется избегать синхронизации;
  • «x» – недоступный сервер.

Для проверки NTP-servers на пригодность синхронизации необходимо использовать команду: ntpdate –q.

Установка локальных данных

При работе с клиент-серверными моделями каждый разработчик должен знать, как при помощи рассматриваемого протокола настроить локальные дату и время. Для данной операции используется команда ntpdate. Вместе с ней формируется и отправляется запрос на серверную часть:

NTP: описание и реализация

Если нужно проверить статус ntdp, предстоит задействовать команду:

NTP: описание и реализация

Больше никаких дополнительных настроек и операций выполнять не придется.

Нестандартное использование

NTP время может быть использовано для усиления трафика в DDoS-атаках. Для борьбы со злоумышленниками рекомендуется ограничить доступ для внешних клиентов. Эта информация тоже хранится в конфигурационном документе. По умолчанию там выставлены следующие параметры:

NTP: описание и реализация

Опции noquery, notrap, nopeer и nomodify не дают внешним клиентам менять конфигурации на серверной стороне. Параметр kod используется для обеспечения дополнительного уровня защиты. При его использовании клиент, часто отправляющий запросы, будет получать в первую очередь kod-пакет, выступающий предупреждением об отказе в дальнейшем обслуживании, а затем – отключаться от сервера.

Для установки синхронизации машин из локальной сети с NTP в файле конфигурации указывается строка:

NTP: описание и реализация

А вот неограниченный доступ к NTP для локального хоста:

NTP: описание и реализация.

Теперь понятно, для чего нужен NTP, а также как с ним работать в случае с Linux OS. Лучше разобраться с клиент-серверными моделями, а также научиться ими управлять помогут дистанционные компьютерные курсы. Они рассчитаны на срок от пары месяцев до года и позволяют освоить любое IT-направление в сжатые сроки. В конце каждого успешно завершенного курса пользователю будет выдан электронный сертификат, подтверждающий приобретенные знания и навыки.

Хотите освоить современную IT-специальность? Огромный выбор курсов по востребованным IT-направлениям есть в Otus!