本文介绍了时间服务器常用的二种协议:SNTP和TIME,并就局域网环境下各种系统(Linux、Windows98、2000、XP)时间服务的设置分别进行了说明,最终实现整个局域网环境下所有电脑时钟的同步与校准。
! C9 u: e) R0 ?6 p
' V$ Z4 M& D5 ` _$ ^# T/ }一、什么是网络时间服务
- p! V: f0 ]4 y) h! q" |$ M( S3 u; d; o
" L9 K9 g3 h% f5 p 网络时间服务Net Time Service与网络文件下载服务FTP、网络浏览服务WWW等一样,是一种网络服务,提供网络时间服务的电脑叫网络时间服务器。当然有些时间服务器是纯硬件结构的,通过GPS卫星信息来获取时间,其外观与一台交换机相似,不在文本介绍之列。本文主要介绍一台电脑如何通过网络获取上级时间服务器提供的标准时间,再服务于本单位的局域网,使一个单位的所有电脑都能与标准时间保持同步,时间误差一般小于0.5秒。
$ u( Z0 a: l- m$ z
" e6 K+ x1 ?9 a TCP/IP协议中,用于同步时间的协议为NTP协议,它是由美国德拉瓦大学的David L. Mills教授于1985年提出,除了可以估算封包在网络上的往返延迟外,还可独立地估算计算机时钟偏差,从而实现在网络上的高精准度计算机校时,它是设计用来在Internet上使不同的机器能维持相同时间的一种通讯协议。时间服务器(time server)是利用NTP的一种服务器,通过它可以使网络中的电脑保持时间同步。
6 [9 |9 _3 B, ~ ( l$ Q5 A7 s3 P9 N
NTP是一个跨越广域网或局域网的复杂的同步时间协议,它通常可获得毫秒级的精度。SNTP(Simple Network Time Protocol)是NTP的一个子集,目的是为了那些不需要NTP实现复杂性网络时间同步的主机。通常用于局域网上的若干台主机通过互联网与其他的 NTP主机同步时钟,接着再向局域网内其他客户端提供时间同步服务。SNTP一般使用UDP的123端号,Linux系统和Windows系统都支持它,是现在架设网络时间服务器的主流协议。 - F% V7 l, _# K" e! _- @! w
* m4 h( ?! x7 a. O( \0 ]6 d" G Time Protocol (RFC-868)协议是一种较简单的协议。此协议提供了一个独立于站点的,机器可读的日期和时间信息。时间服务返回的是从1900年1月1日午夜到现在的秒数。该协议通过TCP或UDP的37端口提供服务。Linux下的TIME服务提供该服务,Windows系统中较少使用。 3 c9 S2 z4 ^$ N: P
- n( y4 q4 ~" X* g
现在网上的许多时间校准软件,有些支持SNTP协议、有些支持TIME协议,有些二者都支持,我们在选择时要特别注意。另外在Windows系统的对等网中,还有使用“net time 机器名 /set /yes”命令使用netbios协议进行时间校准,由于这种方法不支持混合网络和跨网段网络,本文也不特别介绍。 4 m5 \( {* N' u2 ]" h' D: j
9 j' R( A7 X! g" G Q0 Y* u4 ~二、时间服务器有何用
8 h* p* l* d! m1 X
0 `, t/ z, |5 N3 _2 ?2 t% G& s$ U也许有人认为电脑的时钟有点误差影响不大,其实这是非常错误的。电脑系统中的文件保存、文件传输、电子邮箱中的时间戳都是以电脑时钟为准的。如果今后我们想进行文件查找、日志查询,如果系统时钟不准,或同一网络中的电脑时间不同步,将给后续工作带有许多麻烦。现在许多备份软件、编译软件、FTP工具都是以文件保存时间为依据进行比较的,如果时间不统一,将使这些软件难以正常工作。
7 P1 p- a" O" Z# k ( B) P) ~! ~. y7 `. o8 ?1 P) e
三、如何使局域网内的所有电脑时钟同步
: `" }0 W8 p* g/ w: j. I. P9 u
* `! s T) m/ f4 b- V+ ^( \& u. J 首先要在互联网上寻找一台或几台专门提供时间服务的电脑(以下称为主时间服务器)。现在有不少机构免费提供标准时钟服务,在http: //www.ntp.org中专门介绍有不少时间服务器地址。推荐大家在平时使用pool.ntp.org这个地址,因为这个域名在DNS解析时会从一组时钟服务器的IP中随机选取,非常合适一般用户使用。大家也可以在搜索引擎中以“public time server”为关键词搜索一下,找出离你较近的时间服务器。
$ l- O; \# C. d$ \5 C( U I1 ~: b9 s# s
其次选择单位中能上网的一台电脑,让它与主时间服务器同步,这台电脑可以是Linux主机,也可以是win98、2000、XP主机。同时把这台电脑设为局域网内部的时间服务器(以下称为时间服务器),供局域网内部的所有电脑校对时间。 ; z; ], z: Y1 t; ?, M
. M3 g- J8 L$ Y& ^
再在单位内部的所有电脑上设置时间服务的客户端,如果客户机为win2000、XP或Linux系统,不需要安装任何软件。如客户机为win98系统时要根据时间服务器类型的不同而区别对待:如果时间服务器选用SNTP协议进行时钟同步,则win98机上需安装一个sntp客户端软件,如时间服务器由 windows电脑通过netbios协议提供,则win98上也不需要安装任何软件。 * Q. H4 `& C- E. }. k
9 J5 c" G( u' _" k3 t M( K四、设置时间服务器
! H l5 }4 C" k! ]
1 b" }/ \& U* a$ w3 T) h0 K" L以下分Linux、Win98、Win2000XP三种情况分别介绍,而且只介绍sntp服务的架设,timeserver服务和netbios对时服务由于应用很少,不做介绍。 ( c* [3 F: e: M! e
0 h5 v+ ~" [$ [5 \
1、Linux主机做时间服务器(以RedHat9.0为例) ! `' V) z/ I" \
0 W) M4 t( r% c! a+ M
第一步:检查是否已经安装有ntp软件包。输入“rpm -qa|grep ntp”,如果已经安装应该显示“ntp-4.1.2-0.rc1”。 # p$ a7 C/ ^! u! F# p
4 T3 L$ f9 q8 d+ S1 W& d8 j 第二步:安装ntp软件,从ftp://ftp.redhat.com下载rpm包,输入“rpm -ivh ntp-xxx.rpm”执行安装。 1 Z |0 ^( |# m) _5 k! o
/ y4 S9 p: `* p5 _6 \* X
第三步:配置ntp服务。备份原/etc/ntp.conf文件后,输入以下内容 % @1 Y0 T2 H9 K- Q7 O9 A( d
5 ~) u: T, K7 E- i% E& q4 e server pool.ntp.org
# h$ f S( C. v- [# l ( r1 o& ^/ M! N
server pool.ntp.org
- T3 i) d3 G* Q( J# k
0 l( `' j) L2 P9 }# Aserver pool.ntp.org 5 H t: n' d& C, c' @* C" C4 f
3 I1 b( d7 p& E ]8 N+ Wdriftfile /etc/ntp/drift
5 h9 M8 O* Z1 W+ E9 U2 @) F) v o8 y2 D* p' x% U7 y: C" [
三行server都设pool.ntp.org是为了提供连接冗余,当第一个地址连接失败时,后面的地址提供时间服务,注意这里的pool.ntp.org对应一组IP地址,由DNS随机分配。 0 A( m; p. w/ A% Y* j
9 f8 t3 [# E- g9 J2 x
第四步:启动ntp服务。输入“service ntp restart”。 * X3 D0 n7 s2 F+ W
! c: B8 S- ?1 S* @; i& ]- N! _ 为了保证以后Linux机启动后ntp服务能自动启动,还要输入“chkconfig ntpd on”。Linux下的ntp软件不但能自动与互联网上的时钟保持同步,同时本身已经是一台SNTP服务器了,可以供局域网内的电脑校对时间。建议启动 NTP服务后,先用date命令手工校正一下时间,以后系统会自动与互联网上的主时间服务器保持同步。ntp服务还有一个好处,如果当前系统的时间与标准时间有所误差,它不是马上把时间校正,而是逐步缩小与标准时间的误差,以免系统内部出现时间突变。 + m" g0 t2 X9 e2 d! @
1 q, X2 b8 _+ g' e2、Windows2000、XP做时间服务器
9 `% u) F/ g, ~8 h& Q6 Z/ P ! }$ w0 L- i( u6 t2 R
第一步:指定主时间服务器。在DOS方式输入“net time /setsntp:pool.ntp.org”,这里我们指定pool.ntp.org是主时间服务器,也可以是其它地址。 + g* c0 @, J7 X6 i
) x: g6 c. W* U, y 第二步:开始与主时间服务器同步。先关闭windows time服务,再开启该服务。可以在“管理工具”的“服务”界面下完成,也可以以DOS方式输入“net stop w32time”、“net start w32time”。 / U. e+ c2 ]8 {8 }* D% y X/ f
2 Z. n6 [% n2 l( O# x, q
第三步:设置电脑的Windows time服务的启动方式为自动。在“管理工具”的“服务”界面下完成。 h7 W5 f& e) t7 U7 o
- P0 L( O" v1 f8 c' z1 M
注意这台windows主机不能加入任何域,否则无法启动windows time服务。此时,这台windows电脑已经是互联上主时间服务器的客户了,以后每次电脑启动时,都会自动与主时间服务器校对时间。如果网络不通,电脑也会过45分钟后再次自动校对时间。需要注意的是电脑的时钟与标准时间误差不能超过12小时,否则不能自动校对,而要手动校正了。
. p' V( y' y, R% V+ Z# D' u, {7 T) v ; c d+ j- t4 E" }4 @; b y7 H1 o
第四步:使这台电脑成为时间服务器,供局域网内部的电脑校对时间。用“regedit”打开注册表,把 “HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesW32TimeParameters”中的 LocalNTP改为1即可。
9 ^& {) c5 d* @; U. z8 I 3 C9 A/ d2 k6 C- u8 p1 R3 H/ `
3、Windows98做时间服务器
5 E6 u, Y/ [: e# q# T 1 V! r/ f- }5 r
一般不推荐Windows98系统做时间服务器,而且win98本身也不含时间服务器功能,需要安装第三方软件。本文后面介绍的nettime软件(http://nettime.sourceforge.net/)是一个非常优秀的时间客户端软件,它可以工作在windows98、2000、XP 系统中,当选中“Allow other computers to sync to this computer”时,可以把这台电脑当做成时间服务器。
4 e8 o. ~2 q* [8 H; G
7 G: x. A2 N: h! t3 ~2 e Z五、设置时间服务器的客户端 0 l* ?4 B+ Y L' a' J5 e
8 b4 h; Q: z1 |
客户端的主要任务是连接到局域网内的时间服务器,以保持电脑的时钟与服务器同步。同样分Linux、Windows98、2000、XP几种情况介绍 ) e( ]/ a& x7 f- j. h" F P
# Z2 R1 P; b9 u' w, | R1、LINUX主机
7 `- [. G8 v2 \. s( u : q5 h: z5 e$ p" ^9 g) \
其实在上面介绍Linux系统中的ntp服务时,已经提到ntp时间服务时同时也是一个时间服务的客户端,只要把/etc/ntp.conf文件中的 “server pool.ntp.org”改为“server 内部时间服务器IP地址”即可。如不想使用ntp服务,也可使用ntp软件包中带来的ntpdate命令,只要手工执行“ntpdate 时间服务器IP地址”即可。如想每天自动对时,可以把这条命令放在cron中,注意在同一台电脑上ntp服务与ntpdate命令不能同时使用。
. D8 P6 X7 D9 I8 h+ r1 o
- ?% G9 L/ w }2 a- c( M) C2、Windows2000主机 7 |6 C$ u3 J' k: W @0 f
% Y+ R7 e/ K$ E1 D
执行设置时间服务器时的前三步即可
0 y- _5 b7 m& R9 r' Y: c/ h/ f 1 w L8 n X& }
3、WindowsXP主机 ; n0 A" U9 F2 O3 R3 O: ~4 `
0 y( N7 |6 F! \/ e: U& q 可以按Windows2000主机的方法设置,也可双击任务栏右下角的时钟图标,打开“日期时间属性”对话框,在“Internet时间”卡片上选中“自动与Internet时间服务器同步”,并在服务器上填入内部时间服务器的IP地址即可。 6 q# {) R, \0 [- C& }
7 c8 V' o4 d) f/ `# ~" @8 _4、Windows98主机
$ ]! q/ K0 S8 g4 p) K2 c/ F; K# ? 2 o1 e+ n, Z, `% u! o7 r
需要安装第三方软件,自由(free)软件nettime是个不错的软件,它支持SNTP(UDP123)、TIME(TCP37)、TIME- UDP(UDP37)三种方法进行时间同步。软件操作简单,只要在上图的“Hostname or IP Address”中输入局域网内时间服务器的IP地址,“Protocol”中选SNTP即可。 * |* w% ~" W' s
2 c$ V6 V9 x. s
当然在windows98电脑上执行“net time 机器名或IP地址 /set /yes”也可能与其它windows电脑同步时钟,前提是这些电脑在同一网段,并且安装有netbios协议。把该命令放在autoexec.bat 中,就可以做到开机自动对时了。
( X1 G7 D8 B& T* R |