3.4. Протоколы времени Интернет

Протоколы времени разрабатываются в Интернет для достижения двух разных целей. Эти протоколы предназначены либо для синхронизации времени на компьютерах сети, либо для сообщения информации о времени пользователям. На сегодняшний день в Интернет используются четыре разных протокола времени: Time Protocol, Daytime Protocol, Network Time Protocol (NTP) и Simple Network Time Protocol (SNTP). Два из этих протоколов — Daytime Protocol и Time Protocol позволяют узнать текущее время из Интернет. Как мы увидим ниже, протоколы NTP и SNTP предназначены для совсем других целей.

RFC 1305 под названием «Спецификация протокола сетевого времени, версия 3» (Network Time Protocol (Version 3) Specification, Mills, 1992) определяет протокол NTP, который позволяет точно синхронизировать время на хостах Интернет. Другими словами, этот протокол помогает установить внутренние часы на двух или более компьютерах в Интернет в одно и то же значение. В RFC 1305 описаны сложные алгоритмы, используемые в NTP для точной синхронизации времени с отклонением в пределах от 1 до 50 миллисекунд от официального стандарта времени. RFC 1361 под названием «Простой протокол сетевого времени» (Simple Network Time Protocol, Mills, 1992) определяет протокол SNTP как упрощенную версию протокола NTP. Несмотря на то, что на практике SNTP дает ту же точность, что и NTP, в отличие от NTP SNTP не гарантирует этой точности. Системы, которым не нужна гарантированная точность, обеспечиваемая протоколом NTP, чаще всего пользуются протоколом SNTP.

В отличие от NTP и SNTP протоколы Daytime и Time устроены очень просто. Эти протоколы, как описывается в RFC 867 под названием «Протокол времени суток» (Daytime Protocol, Postel, 1983) и в RFC 868 под названием «Протокол времени» (Time Protocol, Postel and Harrenstien, 1983), дают текущее время с погрешностью в 1 секунду. Протокол Time Protocol возвращает 32-битное число, которое представляет время в секундах, истекшее с 1 января 1900. Протокол Daytime Protocol возвращает текстовую строку в формате, поддающемся прочтению пользователем. Протокол Daytime Protocol не позволяет указывать формат этой текстовой строки; как правило, строка эта будет иметь следующий вид («rn» означает пару символов «возврат каретки» и «перевод строки»):

Thu Jan 19 15:54:25 1995rn

Как следует из вышеизложенного, разница между двумя группами протоколов времени весьма значительна. Так, в RFC 1305 описание алгоритмов, используемых в NTP, занимает свыше 100 страниц, в то время как RFC 867 и 868 каждый умещаются на паре страниц. Разница в длине между этими RFC говорит о том, что сложность этих двух групп протоколов несопоставима. Мы будем пользоваться протоколом Time Protocol, описанном в RFC 868, для знакомства с проблемами сетевого порядка байтов.

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

В наши дни неправильные показания часов персонального компьютера могут вызвать еще более серьезные проблемы. Большинство программ для персональных компьютеров полагаются на значение времени, сообщаемое часами компьютера, и используют его в своих вычислениях. Если часы компьютера работают неправильно, то программы могут давать неверные результаты.

Если одна и та же программа работает на нескольких компьютерах и все копии этой программы пользуются одними и теми же данными, то на этих компьютерах может понадобиться синхронизировать встроенные часы. Для синхронизации часов компьютеры могут использовать узел сети, на котором работает сервер времени. Программы серверов времени, использующие Time Protocol, определенный в RFC 868, сообщают текущую дату и время с точностью до одной секунды программам-клиентам.

Протокол Time Protocol может использовать любой из транспортных протоколов в наборе TCP/IP. Другими словами, чтобы передать данные от сервера клиенту, используя протокол Time Protocol, вы можете применять как транспортный протокол (TCP), так и протокол пользовательских датаграмм (UDP). Официальным номером порта для протокола Time Protocol является 37. Программа сервера времени ждет установки TCP-соединения и прихода UDP-датаграмм с порта 37. Как TCP, так и UDP используют один и тот же порт — другими словами, порт номер 37 закреплен за протоколом Time Protocol, а не за TCP или UDP.