Компьютер с Windows 2000 может поддерживать службу времени в группе клиентов NT и Windows 9x.

Часы и календарь для персональных компьютеров всегда были камнем преткновения. В эпоху ранних версий DOS время и дату приходилось вводить каждый раз при запуске системы. Так было до тех пор, пока на ПК не начали использовать батарейки питания для часов и календаря. Материнские платы со встроенными часами и календарем были запущены в производство в 1984 г.

Однако эти встроенные элементы не очень точны. Обследование нескольких дюжин компьютеров в любом офисе покажет, что время на разных машинах может отличаться более чем на час, и на всех оно не соответствует реальному времени. Поэтому разработчики стали искать более точные источники времени.

Очевидно, что таким централизованным источником времени в сети могут служить серверы. В то время как серверы Novell NetWare уже несколько лет могли автоматически синхронизировать время на всех компьютерах сети при регистрации с них на сервере, продукты Microsoft подобные функции не поддерживали. Зная несколько хитростей, о которых я расскажу позже, можно было синхронизировать время рабочих станций Windows NT со временем сервера NT, но эта методика не очень широко известна. Кроме того, нельзя синхронизировать время рабочей станции NT со временем сервера, не изменяя прав пользователя, заданных по умолчанию.

Windows 2000 упрощает процесс синхронизации времени в NT с помощью новой встроенной службы Windows Time Service. Эта системная служба почти не требует администрирования. Компьютеры, на которых установлена система Windows 2000 Professional, и серверы с любой версией Windows 2000 Server сверяют свое системное время и дату со временем и датой контроллера домена (DC), обеспечивающего аутентификацию данной рабочей станции или автономного сервера. Но компьютер или сервер синхронизирует свое время со временем DC не только в процессе аутентификации: синхронизация времени производится приблизительно каждые 8 ч или каждый раз при регистрации пользователя.

Со своей стороны, контроллеры домена синхронизируют свое время с одним конкретным контроллером в домене - мастером операций, который играет роль эмулятора PDC. По умолчанию, эмулятором PDC становится первый контроллер, устанавливаемый в домене. Но с чем каждый PDC-эмулятор домена синхронизирует свое время? С эмулятором PDC первого домена, который был создан (т. е. с тем DC, который используется в качестве эмулятора в корневом домене леса). Таким образом этот компьютер в корне леса играет роль главных часов и календаря для целого леса Active Direc-tory (AD). Кроме того, основной хронометрист различает временные зоны.

Теперь поясню, как установить синхронизацию основного компьютера времени, т. е. корневого PDC-эмулятора леса, с реальным временем. Для этого следует ввести команду

net time /setsntp:
 

Параметр /setsntp команды Net Time показывает, что используется Simple Network Time Protocol (SNTP), стандартный протокол Internet. Internet Engineering Task Force (IETF) Request for Comments (RFC-2030), датированный октябрем 1996 г., определяет SNTP. Можно указать любой сервер времени SNTP в Internet для корневого PDC-эмулятора леса и заставить его синхронизировать свое время с временем этого сервера. Многие брандмауэры включают сервер времени, так что для конкретного контроллера - эмулятора PDC - нет нужды обращаться куда-либо из своей внутренней сети для синхронизации с SNTP-сервером. Но если брандмауэр требуется настраивать, то нужно иметь в виду, что SNTP использует 123-й порт UDP.

В поисках времени

Где найти SNTP-серверы? В Соединенных Штатах существует лаборатория военно-морского флота, которая поддерживает ряд серверов времени, включая tick.usno.navy.mil и tock.usno.navy .mil. По своему опыту могу сказать, что большинство DNS-серверов провайдеров IS также могут быть SNTP-серверами. Так, если один из DNS-серверов называется ns2.bigisp.com, можно набрать команду

net time /setsntp:ns2.bigisp.com

для синхронизации мастера операций с DNS-сервером.

В документации Microsoft по команде Net Time /setsntp сказано, что в команде можно указать и список серверов. Да, но есть одна тонкость: список нужно заключить в кавычки, а имена серверов разделить пробелами. Например, для того, чтобы сервер осуществлял поиск времени сначала на www.acme.com, а затем, в случае необходимости, на www.apex.com, нужно набрать

net time /setsntp:"www.acme.com 
www.apex.com"

Если требуется использовать внешний источник времени, то нужно сначала удостовериться, что подобный сервер времени существует. В документации Microsoft сообщается, что достаточно ввести только Net Time для определения времени на SNTP-сервере, но этот способ мне не подходит. Убедиться, что Windows Time Service действительно работает, можно с помощью средства командной строки W32tm. Но для начала наберите команду

net stop w32time

чтобы остановить Windows Time Service. Затем можно проверить время источника, для чего следует ввести

w32tm -once

чтобы установить время от источника времени однократно (по умолчанию W32tm обновляет время периодически). Система выдает страницу запутанной информации; в случае успешного выполнения команды в одной из строк появится Recv`ed from server 48 Bytes. Далее необходимо набрать

net start w32time

чтобы снова запустить службу времени.

После первоначальной синхронизации с сервером времени компьютер снова сверяет с ним свое время через 45 мин. Если выясняется, что разница между показаниями часов сервера времени и системных часов компьютера не превышает 2 с, интервал ожидания следующей сверки с сервером времени удваивается. Если через полтора часа разница во времени остается в пределах 2 с, компьютер продолжает удваивать интервал синхронизации и проверять точность времени и, наконец, останавливается на интервале приблизительно 8 ч.

Если неизвестно, с каким SNTP-сервером синхронизируется система, в командной строке следует ввести:

net time /querysntp

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

Windows Time Service особенно пригодиться тем, кто использует Windows 2000, но еще не перешел к AD. Как я уже сказал, можно дать корневому PDC-эмулятору леса команду сверять свои часы с SNTP-сервером, но можно также использовать команду Net Time /setsntp, чтобы любой компьютер синхронизировал время с SNTP-источником. Если задать команду Set Time на компьютере, который не является членом домена Windows 2000, может обнаружиться, что Windows Time Service не устанавливает на нем время. Мой опыт показывает, что Windows Time Service для систем, не являющихся членами домена, запускается вручную. Поэтому если есть «одинокий» компьютер и нужно автоматически синхронизировать его системное время и дату с SNTP-источником, следует установить службу Win-dows Time Service в режим автоматического запуска.

Хранение времени на клиенте NT

А как устанавливается время на компьютерах с NT 4.0 и Windows 9x? Чтобы использовать SNTP-сервер для установки времени на одной из таких систем, необходима лишь часть программного обеспечения SNTP-клиента, чтобы сыграть роль, которую Windows Time Service выполняет в Windows 2000. Существуют различные SNTP-клиенты для систем Windows, их можно поискать на любом сайте со свободно распространяемым программным обеспечением SNTP или Tardis (Tardis - популярный SNTP-клиент для UNIX). В Microsoft Windows NT Resource Kit имеется утилита W32time, которую можно использовать в качестве клиента для NT, обеспечивающего поддержку SNTP. Его можно загрузить по адресу: ftp://ftp.microsoft.com/reskit/y2kfix.

Можно внести изменение в реестр, чтобы превратить системы Windows 2000 в SNTP-сервер. В HKEY_LOCAL_MACHINESYSTEM CurrentControlSetServicesW32 TimePara-meters найдите параметр LocalNTP типа REG_DWORD. Измените его значение с 0 на 1. После перезагрузки Windows Time Service, данный ком-пьютер с системой Windows 2000 будет функционировать как SNTP-сервер.

Таким образом, если в организации совместно используются Windows 2000, NT и Windows 9x, то можно установить одну систему Windows 2000 для синхронизации времени с Internet и для обслуживания оставшейся части машин рабочей группы. Затем следует установить программное обеспечение клиента SNTP на всех других машинах и определить систему с Windows 2000 как SNTP-сервер. Тогда все машины смогут синхронизировать время даже без использования AD.

Марк Минаси - редактор Windows NT Magazine, MCSE и автор книги «Mastering Windows NT Server 4.0» (издательство Sybex). С ним можно связаться по адресу: mark@minasi.com.