NTP授时服务器工作原理详解     DATE: 2019-10-27 09:51

NTP授时服务器工作原理详解
目前计算机网络中各主机和服务器等网络设备的时间基本处于无序的状态。随着计算机网络应用的不断涌现,计算机的时间同步问题成为愈来愈重要的事情。以Unix系统为例,时间的准确性几乎影响到所有的文件操作。 如果一台机器时间不准确,例如在从时间超前的机器上建立一个文件,用ls查看一下,以当前时间减去所显示的文件修改时间会得一个负值,这一问题对于网络文件服务器是一场灾难,文件的可靠性将不复存在。为避免产生本机错误,可从网络上获取时间,这个命令就是rdate,这样系统时钟便可与公共源同步了。但是一旦这一公共时间源出现差错就将产生多米诺效应,与其同步的所有机器的时间因此全都错误。
NTP授时服务器工作原理

另外当涉及到网络上的安全设备时,同步问题就更为重要了。这些设备所生成的日志必须要反映出准确的时间。尤其是在处理繁忙数据的时候,如果时间不同步,几乎不可能将来自不同源的日志关联起来。 一旦日志文件不相关连,安全相关工具就会毫无用处。不同步的网络意味着企业不得不花费大量时间手动跟踪安全事件。现在让我们来看看如何才能同步网络,并使得安全日志能呈现出准确地时间。

Internet的发展使得电子货币,网上购物,网上证券、金融交易成为可能,顾客可以坐在家里用个人电脑进行上述活动。要保证这些活动的正常进行就要有统一的时间。不能设想用户3点钟汇出一笔钱银行2点50分收到。个人电脑的时钟准确度很低,只有10-4、10-5,一天下来有可能差十几秒。

现在许多在线教学系统的许多功能都使用了时间记录,比如上网时间记录,递交作业时间和考试时间等等。通常在线教学系统记录的用户数据均以网站服务器时间为准。笔者以前就曾出现过因为应用服务器时间还在23点55分,而数据库服务器已跨过24点,导致正在进行的整个批处理日切或数据归档等重要处理失败或根本无法进行的情况,其实应用和数据库服务器时间也只是相差了几分钟而已。为了避免出现这种情况,系统管理员要经常关注服务器的时间,发现时间差距较大时可以手工调整,但由系统管理员手工调整既不准确、并且随着服务器数量的增加也会出现遗忘,因此有必要让系统自动完成同步多个服务器的时间。

上述问题的解决方法,就是需要一个能调整时钟抖动率,建立一个即时缓和、调整时间变化,并用一群受托服务器提供准确、稳定时间的时间管理协议,这就是网络校时协议(NTP)。如果可以你的局域网可以访问互联网,那么不必安装一台专门的ntp服务器,只需安装ntp的客户端软件到互联网上的公共ntp服务器自动修正时间即可。如果不能访问互联网,而要将各个计算机时间的统一,就需要自己架设一台ntp服务器。
一、 网络时间服务的实现方式及其选择

NTP提供准确时间,首先要有准确的时间来源,这一时间应该是国际标准时间UTC。 NTP获得UTC的时间来源可以是原子钟、天文台、卫星,也可以从Internet上获取。这样就有了准确而可靠的时间源。

网络时间服务的实现方式主要有以下三种方式:

1) 无线时钟。服务器系统可以通过串口连接一个无线时钟。无线时钟接收GPS(全球卫星定位系统)的卫星发射的信号来决定当前时间。无线时钟是一个非常精确的时间源,但是需要花一定的费用。
2) 时间服务器。可以使用网络中NTP时间服务器,通过这个服务器来同步网络中的系统的时钟。http://www.eecis.udel.edu/~mills/ntp/servers.html列出了Internet上有效的一级时间服务器。
3) 局域网内的同步。如果只是需要在本局域网内进行系统间的时钟同步,就可以使用局域网中任何一个系统的时钟。需要选择局域网中的一个节点的时钟作“权威的”的时间源,然后其它的节点就只需要与这个时间源进行时间同步即可。如果一个系统在一个局域网的内部,同时又不能使用无线时钟,这种方式是最好的选择。
NTP选择

如果您要求实在不高,建议您使用rdate即可,简单又方便。如果您的精确度要求在秒以下,建议您使用SNTP。如果您有一群工作站需要同步或做较精密的时间运算,那么建议您使用NTP,操作系统最好是UNIX或者linux,其次是Win2000/xp、2003。Win95、98的NTP及时的解析度只有55ms,又不稳定,不建议使用。
二、 NTP的网络体系结构和工作原理
NTP所建立起的网络基本结构是分层管理的类树形结构。网络中的节点有两种可能:时钟源或客户。每一层上的时钟源或客户可向上一层或本层的时钟源请求时间校正。 UTC时间是使用多种不同的方法得到的,包括无线电和卫星系统。一些国家的用于高级服务的特别可以使用特别的接收机,包括GPS。但是,在每台计算机都安装这些接收机一是不实际,也是经济的。作为替代,指定的时间服务器的计算机上安装这种接收机,并使用如NTP的协议来同步时间,从UTC分开的程度是被定义为层,一个无线电钏(从指定的发射机或卫星导航设备上接收信息)是0层,直接与无线电钟连接的是1层,从1层计算机上接收时间的是2层,依次如此。

从UTC获取标准时间 ,网路校时协议,提供在互连的网路上提供校时服务和发送供给标准时间给计算机。目前已成为Internet上时间同步的标准协议。NTP提供准确时间,首先要有准确的时间来源,这一时间应是国际标准时间UTC。NTP获得UTC的时间来源可以是原子钟,天文台,卫星,也可以从Internet上获取。这样就有了准确而可靠的时间源。

NTP如何工作

NTP提供准确时间,首先要有准确的时间来源,这一时间应该是国际标准时间UTC。 NTP获得UTC的时间来源可以是原子钟、天文台、卫星,也可以从Internet上获取。这样就有了准确而可靠的时间源。时间按NTP服务器的等级传播。按照离外部UTC 源的远近将所有服务器归入不同的Stratun(层)中。Stratum-1在顶层,有外部UTC接入,而Stratum-2则从Stratum-1获取时间,Stratum-3从Stratum-2获取时间,以此类推,但Stratum层的总数限制在15以内。所有这些服务器在逻辑上形成阶梯式的架构相互连接,而Stratum-1的时间服务器是整个系统的基础。

计算机主机一般同多个时间服务器连接, 利用统计学的算法过滤来自不同服务器的时间,以选择最佳的路径和来源来校正主机时间。即使主机在长时间无法与某一时间服务器相联系的情况下,NTP服务依然有效运转。

为防止对时间服务器的恶意破坏,NTP使用了识别(Authentication)机制,检查来对时的信息是否是真正来自所宣称的服务器并检查资料的返回路径,以提供对抗干扰的保护机制。

在基本条件下,NTP客户端发出时间请求,与时间服务器交换时间,这个交换的结果是,客户端能计算出时间的延迟,它的弥补值,并调整与服务器时间同步。通常情况下,在设置的初始,在5至10分钟有内6次交换。 一旦同步后,每10分钟与服务器时间进行一次同步,通常要求单一信息交换。冗余服务器和不同的网络路径用于保证可靠性的精确度,除了客户端/服务器商的同步以外,NTP还支持同等计算机的广播同步。NTP在设计上是高度容错和可升级。时间按NTP服务器的等级传播。 
三、 NTP的工作模式:
主/被动对称模式(broadcast/multicast):一对一的连接,双方均可同步对方或被对方同步,先发出申请建立连接的一方工作在主动模式下,另一方工作在被动模式下。此方式适用于配置冗余的时间服务器,可以提供更高的精确度给主机。

客户/服务器模式(client/server):与主/被动模式基本相同。唯一区别在于,客户方可被服务器同步,但服务器不能被客户同步。

广播模式:一对多的连接,服务器不论客户工作在何种模式下,主动发出时间信息,客户由此信息调整自己的时间,此时网络延时d2忽略,因此在准度上有损失,但可满足秒级应用。广播模式而且配置非常的简单。但是此方式的精确度并不高,对时间精确度要求不是很高的情况下可以采用。

上述三种方式,时间信息的传输都使用UDP协议。每一个时间包内包含最近一次的事件的时间信息、包括上次事件的发送与接收时间、传递现在事件的当地时间、及此包的接收时间。在收到上述包后即可计算出时间的偏差量与传递资料的时间延迟。时间服务器利用一个过滤演算法,及先前八个校时资料计算出时间参考值,判断后续校时包的精确性,一个相对较高的离散程度,表示一个对时资料的可信度比较低。仅从一个时间服务器获得校时信息,不能校正通讯过程所造成的时间偏差,而同时与许多时间服务器通信校时,就可利用过滤算法找出相对较可靠的时间来源,然后采用它的时间来校时。
四、 NTP服务器选择
美国国家标准技术研究院(NIST)从90年代初开始,进行Internet网上时间发播服务,至今已经设置了7,8个时间服务专用网站,德国PTB也于去年开通专用授时网站,在网上发播标准时间。全世界约有100多个ntp服务器,国外主要时间服务器包括如表1:

详细列表:http://www.eecis.udel.edu/~mills/ntp/clock1a.html

国内NTP 服务器名称 :
time.buptnet.edu.cn 北京邮电大学
s1b.time.edu.cn 清华大学
s1c.time.edu.cn 北京大学
s1d.time.edu.cn 东南大学

注:CERNET教育网内NTP服务器列表请见:http://www.time.edu.cn/mem.htm

总结:到此为止我们理论上介绍了NTP 服务器的原理、协议和工作模式。下边笔者会介绍如何在Linux 异构网络中配置时间服务器、以及在Linux 、Windows 客户端的应用。 
我们理论上介绍了NTP 服务器的原理、协议和工作模式。下面笔者介绍如何在Linux 异构网络中配置时间服务器、以及在Linux 、Windows 客户端的应用。

一、 配置Linux异构网络下的ntp时间服务器
1. 软件下载安装

以源代码为例

#/tmp/wget http://ntp.buptnet.edu.cn/ntp_chinese/down/server/ntp-4.2.0.tar.gz
# tar -zxvf ntp-4.2.0.tar.gz –C /usr/local/src;cd /usr/local/src/ntp-4.2.0
 
2. 开始设定参数、编译与安装:
#./configure --prefix=/usr/local/ntp --enable-all-clocks --enable-parse-clocks
make clean ; make
make check
make install
安装完成。
 
 
二、理解NTP服务的配置文件
1.NTP软件包的结构和相关命令

NTP服务的配置文件包括四个文件如表2 。
与 NTP 及系统时间有关的执行文件包括几个文件如表3 。 
NTP <wbr>工作原理详解
说明:Linux 时钟类型在分类和设置上却和Windows大相径庭。和 Windows不同的是,Linux将时钟分为系统时钟(System Clock)和硬件(Real Time Clock,简称RTC)时钟两种。系统时间是指当前Linux Kernel中的时钟,而硬件时钟则是主板上由电池供电的那个主板硬件时钟,这个时钟可以在BIOS的“Standard BIOS Feture”项中进行设置。当Linux启动时,硬件时钟会去读取系统时钟的设置,然后系统时钟就会独立于硬件运作。
 
2.理解NTP服务端的设置文件/etc/ntp.conf
关于权限设定部分

权限的设定主要以 restrict 这个参数来设定,格式如下:
restrict IP地址 mask 子网掩码 参数
其中 IP 可以是IP地址,也可以是 default ,default 就是指所有的IP
参数有以下几个:
ignore :关闭所有的 NTP 联机服务
nomodify:客户端不能更改服务端的时间参数,但是客户端可以通过服务端进行网络校时。
notrust :客户端除非通过认证,否则该客户端来源将被视为不信任子网
noquery :不提供客户端的时间查询
注意:如果参数没有设定,那就表示该 IP (或子网)没有任何限制。
用server这个参数设定上级时间服务器,格式如下:
server IP地址或域名 [prefer]
IP地址或域名就是我们指定的上级时间服务器,如果 Server 参数最后加上 prefer,表示我们的 NTP 服务器主要以该部主机时间进行校准。
driftfile格式如下:
driftfile 文件名
在与上级时间服务器联系时所花费的时间,记录在driftfile参数后面的文件内。
注意: driftfile 后面接的文件需要使用完整的路径文件名,不能是链接文件,并且文件的权限需要设定成 ntpd守护进程可以写入。
3.ntp.conf配置文件实例:
 以互联网的时间服务器为时间服务器的时钟
设置要求:以time.nist.gov 为时间服务器,在ntp.conf中增加以下内容:
restrict default ignore # 关闭所有的 NTP 要求封包
restrict 192.168.1.0 mask 255.255.255.0 notrap nomodify
server time.nist.gov #设置时间服务器
server 127.127.1.1 #开启内部递归网络接口 lo
fudge 127.127.1.1 stratum 10 refid NIST # LCL 不同步
driftfile /etc/ntp.drift
logfile /var/log/ntp.log
Broadcastdelay 0.008 #广播延迟时间#
以内部ntp服务器为数据服务器时钟
设置要求:不对 Internet 提供服务,仅对内部子网 192.168.0.0/24 提供服务,内部子网的客户端不能修改NTP服务器的时间参数。

在ntp.conf中增加以下内容:
restrict default ignore # 关闭所有的 NTP 要求封包
restrict 127.0.0.1   # 开启内部递归网络接口 lo
restrict 192.168.0.0 mask 255.255.255.0 nomodify #在内部子网里面的客户端可以 进行网络校时,但不能修改NTP服务器的时间参数。
server 198.123.30.132 #198.123.30.132作为上级时间服务器参考
restrict 198.123.30.132 #开放server 访问我们ntp服务的权限
driftfile /var/lib/ntp/drift
broadcastdelay 0.008 #广播延迟时间#
4.其他设置工作:

 保存退出后。启动NTP服务service ntpd start
 如果想每次系统启动,NTP服务自动启动,请输入下面命令:
chkconfig -level 35 ntpd on
 打开iptables防火墙123端口
NTP服务的端口是123,使用的是udp协议,所以NTP服务器的防火墙必须对外开放udp 123这个端口。方法如下,使用以下规则:
#/sbin/iptables -A INPUT -p UDP -i eth0 -s 192.168.0.0/24
> --dport 123 -j ACCEPT
注意:Ntpd启动的时候通常需要一段时间进行时间同步,所以在ntpd刚刚启动的时候还不能正常提供时钟服务,最长大概有5分钟吧,如果超过了这个时间请检查一下您的配置文件。
5.查看ntp服务器工作情况

通常我们使用命令查看123端口和ntp系统进程判断ntp服务器是否工作正常。
命令如下:
netstat -unl | grep 123 #查看123端口,操作结果如图1

ps -ef|grep ntp #查看ntp进程是否启动,操作结果如图2

6.监控ntp服务器

ntpq用来监视ntpd操作,使用标准的NTP模式6控制消息模式,并与NTP服务器通信。
ntpq -p查询网络中的NTP服务器,同时显示客户端和每个服务器的关系,
例如: 执行命令: ntpq –p后,输出结果为:
ntpq -p
remote refid st t when poll reach delay offset jitter
=================================
*time-A.timefreq .ACTS. 1 u 152 1024 377 43.527 -11.093 3.982
+clock.isc.org 204.123.2.5 2 u 230 1024 377 67.958 -7.729 0.071
time-a.nist.gov .ACTS. 1 u 323 1024 377 58.705 994.866 999.084
“* ”:响应的NTP服务器和最精确的服务器。 “+”:响应这个查询请求的NTP服务器。 “blank(空格)”:没有响应的NTP服务器。 “remote” :响应这个请求的NTP服务器的名称。 “refid ”:NTP服务器使用的更高一级服务器的名称。 “st”:正在响应请求的NTP服务器的级别。 “when”:上一次成功请求之后到现在的秒数。 “poll”:当前的请求的时钟间隔的秒数。 “offset”:主机通过NTP时钟同步与所同步时间源的时间偏移量,单位为毫秒(ms)。 
 
三、Linux NTP客户端的使用
1.Linux系统使用命令行配置:

在Linux 上面进行网络校时非常简单,执行 ntpdate 即可:
ntpdate 192.168.0.1 #192.168.0.1是NTP服务器的IP
不要忘了使用hwclock命令,把时间写入bios
hwclock -w
如果想定时进行时间校准,可以使用crond服务来定时执行。
编辑 /etc/crontab 文件
加入下面一行:
30 8 * * * root /usr/sbin/ntpdate 192.168.0.1; /sbin/hwclock -w #192.168.0.1是NTP服务器的IP地址
然后重启crond服务
service crond restart
这样,每天 8:30 Linux 系统就会自动的进行网络时间校准。
2. 桌面环境下配置方法
可以使用图形化的时钟设置工具,如RHEL 4.0中的日期与时间设置工具,也可以在虚拟终端中键“redhat-config-time”命令,或者选择“K选单/系统设置/日期与时间”来启动日期时间设置工具。使用该工具不必考虑系统时间和硬件时间,只需从该对话框中设置日期时间,可同时设置、修改系统时钟和硬件时钟。如图3 。
 
 
四.Windows XP、2003、2000系统使用NTP进行时间校准:
利用操作系统提供的校时服务(Windows XP、Windows 2003适用):

1、 双击任务栏右下角“时间”,打开 [ 时间和日期 属性 ] 设置对话框,如图4。

2、 选择 [ Internet时间 ] 标签, 选中 [ 自动与Internet时间服务器同步 ] 选项,在 [ 服务器 ] 中填入时间服务器的ip地址或者域名。点击 [ 应用 ] 并按 [ 立即更新 ] 可直接同步。如图5 。

利用操作系统提供的校时服务(Windows 2000适用):

1、 在 [ 控制面板 ] 中打开 [ 管理工具 ],再打开 [ 服务 ] ,在服务中找到 [ Windows Time ]

2、 双击服务名称,在打开的“Windows Time的属性”中设置“启动类型”为“自动”,再按下启动按钮。如图6 。

3、 然后切换到命令行下在DOS命令行下让Windows使用时间服务器: 
 
net time /setsntp:xxx.xxx.xxx.xxx (时间服务器域名或者ip地址)
要想立刻与时间服务器同步需要重启时间服务,相应的命令是:
net stop w32time
net start w32time
 
以后你的机器就会有一个准确的时间。说明:W32tm.exe 是用来同步本地计算机与远程计算机或域的时间的类似命令。由于其灵活性,W32tm.exe 是时间同步的首选方法。默认情况下Windows 2000的时间服务w32time是关闭的。Windows 包含 W32Time,它是 Kerberos 身份验证协议所需的时间服务工具。Windows 时间服务的目的是确保组织中运行 Microsoft Windows 2000 或更高版本的所有计算机都使用同一个时间。 
 
 
 
五、windows 98/me/NT客户端使用工具软件Automachron实现时间同步
Windows 98/nt可以使用Automachron软件:

1. 下载achron5,链接:ftp://ftp.agri.sjtu.edu.cn/pub1/Internet/time/achron5.exe
2.安装软件;
3.运行:程序-->Automachron-->Automachron;
4.右键单击任务栏右下脚选取Automachron图标-->Properties-->Host-->Network Host;
填入ntp.sjtu.edu.cn,Sync at startup前复选框打勾,Run at startup前复选框打勾
系统每次启动后均会自动同步时间,如需手动同步,点击Sync按钮即可,如图8 。

 
六、总结:
随着网络规模、网上应用不断扩大,网络设备与服务器数量不断增加。网络管理员在查看众多网络设备日志时,往往发现时间不一,即使手工设置时间,也会出现因时区或夏令时等因素造成时间误差;有些二层交换机重启后,时钟会还原到初始值,需要重新设置时间。对于核心网络设备和重要应用服务器而言,它们之间有时需要协同工作,因此时间的准确可靠性显得尤为重要。
NTP服务的配置及使用都非常简单,并且占用的网络资料非常小。NTP时间服务器目前广泛应用于网络安全、在线教学、数据库备份等领域。企业采取措施同步网络和设备的时间非常重要,但确保安全设备所产生的日志能提供精确的时间更应当得到关注。本文介绍在Linux操作系统下如何建立NTP时间服务器、利用NTP时间服务器配置实例,供Linux 网管员参考建立。