分类: LINUX
2013-02-28 12:50:38
原文地址:NTP 工作原理详解 --摘自网络IT168 作者:jack_sir
【IT168 专稿】目前计算机中各主机和等网络设备的时间基本处于无序的状态。随着计算机网络应用的不断涌现,计算机的时间同步问题成为愈来愈重要的事情。以Unix系统为例,时间
的准确性几乎影响到所有的文件操作。
如果一台机器时间不准确,例如在从时间超前的机器上建立一个文件,用ls查看一下,以当前时间减去所显示的文件修改时间会得一个负值,这一问题对于网络文
件是一场灾难,文件的可靠性将不复存在。为避免产生本机错误,可从网络上获取时间,这个命令就是rdate,这样系统时钟便可与公共源同步了。
但是一旦这一公共时间源出现差错就将产生多米诺效应,与其同步的所有机器的时间因此全都错误。
另外当涉及到网络上的设
备时,同步问题就更为重要了。这些设备所生成的日志必须要反映出准确的时间。尤其是在处理繁忙数据的时候,如果时间不同步,几乎不可能将来自不同源的日志
关联起来。
一旦日志文件不相关连,安全相关工具就会毫无用处。不同步的网络意味着企业不得不花费大量时间手动跟踪安全事件。现在让我们来看看如何才能同步网络,并使
得安全日志能呈现出准确地时间。
Internet的发展使得电子货币,网上购物,网上证券、金融交易成为可能,顾客可以坐在家里用个人电脑进行上述活动。要保证这些活动的正常进行就要有
统一的时间。不能设想用户3点钟汇出一笔钱银行2点50分收到。个人电脑的时钟准确度很低,只有10-4、10-5,一天下来有可能差十几秒。
现在许多在线教学系统的许多功能都使用了时间记录,比如上网时间记录,递交作业时间和考试时间等等。通常在线教学系统记录的用户数据均以网站服务器时间为
准。笔者以前就曾出现过因为应用服务器时间还在23点55分,而数据库服务器已跨过24点,导致正在进行的整个批处理日切或数据归档等重要处理失败或根本
无法进行的情况,其实应用和数据库服务器时间也只是相差了几分钟而已。为了避免出现这种情况,系统管理员要经常关注服务器的时间,发现时间差距较大时可以
手工调整,但由系统管理员手工调整既不准确、并且随着服务器数量的增加也会出现遗忘,因此有必要让系统自动完成同步多个服务器的时间。
上述问题的解决方法,就是需要一个能调整时钟抖动率,建立一个即时缓和、调整时间变化,并用一群受托服务器提供准确、稳定时间的时间管理协议,这就是网络
校时协议(NTP)。如果可以你的局域网可以访问互联网,那么不必安装一台专门的ntp服务器,只需安装ntp的客户端到互联网上的公
共ntp服务器自动修正时间即可。如果不能访问互联网,而要将各个计算机时间的统一,就需要自己架设一台ntp服务器。
一、 时间服务的实现方式及其选择
NTP提供准确时间,首先要有准确的时间来源,这一时间应该是国际标准时间UTC。
NTP获得UTC的时间来源可以是原子钟、天文台、卫星,也可以从Internet上获取。这样就有了准确而可靠的时间源。
网络时间服务的实现方式主要有以下三种方式:
1) 无线时钟。系统可以通过串口连接一个无线时钟。无线时钟接收(全球卫星定位系统)的卫星发射的信号来决
定当前时间。无线时钟是一个非常精确的时间源,但是需要花一定的费用。
2) 时间。可以使用网络中NTP时间服务器,
通过这个服务器来同步网络中的系统的时钟。列
出了Internet上有效的一级时间服务器。
3)
局域网内的同步。如果只是需要在本局域网内进行系统间的时钟同步,就可以使用局域网中任何一个系统的时钟。需要选择局域网中的一个节点的时钟作“权威的”
的时间源,然后其它的节点就只需要与这个时间源进行时间同步即可。如果一个系统在一个局域网的内部,同时又不能使用无线时钟,这种方式是最好的选择。
NTP选择
如果您要求实在不高,建议您使用rdate即可,简单又方便。如果您的精确度要求在秒以下,建议您使用SNTP。如果您有一群需要同步或做较精密的时间运算,那么建议您使用NTP,最好是UNIX或者linux,其次是Win2000/xp、2003。Win95、98的NTP及时
的解析度只有55ms,又不稳定,不建议使用。
二、 NTP的体系结构和工作原理
NTP所建立起的网络基本结构是分层管理的类树形结构。网络中的节点有两种可能:时钟源或客户。每一层上的时钟源或客户可向上一层或本层的时钟源请求时间
校正。 UTC时间是使用多种不同的方法得到的,包括无线电和卫星系统。一些国家的用于高级服务的特别可以使用特别的接收机,包括。
但是,在每台计算机都安装这些接收机一是不实际,也是经济的。作为替代,指定的时间的计算机上安装这种接收机,并使用如NTP的协议来同步时间,从UTC分开的程度是被定义为层,一个无线电钏(从指定的发射机或卫星导航设备
上接收信息)是0层,直接与无线电钟连接的是1层,从1层计算机上接收时间的是2层,依次如此。
图1 ntp网络体系结构 |
三、 NTP的工作模式:
主/被动对称模式(broadcast/multicast):一对一的连接,双方均可同步对方或被对方同步,先发出申请建立连接的一方工作在主动模式
下,另一方工作在被动模式下。此方式适用于配置冗余的时间,可以提供更高的精确度给主机。
客户/模式
(client/server):与主/被动模式基本相同。唯一区别在于,客户方可被服务器同步,但服务器不能被客户同步。
广播模式:一对多的连接,服务器不论客户工作在何种模式下,主动发出时间信息,客户由此信息调整自己的时间,此时延时d2忽略,因此在准度
上有损失,但可满足秒级应用。广播模式而且配置非常的简单。但是此方式的精确度并不高,对时间精确度要求不是很高的情况下可以采用。
上述三种方式,时间信息的传输都使用UDP协议。每一个时间包内包含最近一次的事件的时间信息、包括上次事件的发送与接收时间、传递现在事件的当地时间、
及此包的接收时间。在收到上述包后即可计算出时间的偏差量与传递资料的时间延迟。时间服务器利用一个过滤演算法,及先前八个校时资料计算出时间参考值,判
断后续校时包的精确性,一个相对较高的离散程度,表示一个对时资料的可信度比较低。仅从一个时间服务器获得校时信息,不能校正通讯过程所造成的时间偏差,
而同时与许多时间服务器校时,就可利用过滤算法找出相对较可靠的时间来源,然后采用它的时间来校时。
四、 NTP选择
美国国家标准技术研究院(NIST)从90年代初开始,进行Internet网上时间发播服务,至今已经设置了7,8个时间服务专用网站,德国PTB也于
去年开通专用授时网站,在网上发播标准时间。全世界约有100多个ntp,国外主要时间服务器包括如表1:
表1国外主要时间服务器 |
我们理论上介绍了NTP 的原理、协议和工作模式。下面笔者介绍如何在Linux 异构网络中配置时间服务器、以及在Linux 、Windows
客户端的应用。
一、 配置Linux异构网络下的ntp时间服务器
1.
软件下载安装
以源代码为例
#/tmp/wget
# 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 。
表2 NTP服务的配置文件 |
说 明: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
打开iptables123端口
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
图1 使用命令查看123端口 |
图2 使用命令查看ntp系统进程 |
三、Linux NTP客户端的使用
1.Linux系统使用命令行配置:
在Linux 上面进行网络校时非常简单,执行 ntte 即可:
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 。
图3 使用图形化的时钟设置工具 |
四.Windows XP、2003、2000系统使用NTP进行时间校准:
利
用操作系统提供的校时服务(Windows XP、Windows 2003适用):
1、 双击任务栏右下角“时间”,打开 [
时间和日期 属性 ] 设置对话框,如图4。
图4打开 [ 时间和日期 属性 ] 设置对话框 |
图5 进行时间同步 |
图6 选择Windows Time的属性为自动启动 |
net time
/setsntp:xxx.xxx.xxx.xxx (时间服务器域名或者ip地址)
要想立刻与时间服务器同步需要重启时间服务,相应的命令是:
net
stop w32time
net start w32time
图7 通过命令行实现时间同步 |
五、windows 98/me/NT客户端使用工具软件Automachron实现时间同步
Windows
98/nt可以使用Automachron软件:
1. 下载achron5,链接:
2.安装软件;
3.运行:程序-->Automachron-->Automachron;
4.右键单击任务栏右
下脚选取Automachron图标-->Properties-->Host-->Network Host;
填入
ntp.sjtu.edu.cn,Sync at startup前复选框打勾,Run at startup前复选框打勾
系统每次启动后均会自
动同步时间,如需手动同步,点击Sync按钮即可,如图8 。
图8 使用工具软件Automachron实现时间同步 |
六、总结:
随着网络规模、网上应用不断扩大,网络设备与数量不断增加。网络管理员在查看众多网络设备日志时,往往发现时间不一,即使手工设置时 间,也会出现因时区或夏令时等因素造成时间误差;有些二层重启后,时钟 会还原到初始值,需要重新设置时间。对于核心网络设备和重要应用服务器而言,它们之间有时需要协同工作,因此时间的准确可靠性显得尤为重要。
NTP 服务的配置及使用都非常简单,并且占用的网络资料非常小。NTP时间服务器目前广泛应用于网络安全、在线教学、数据库备份等领域。企业采取措施同步网络和 设备的时间非常重要,但确保安全设备所产生的日志能提供精确的时间更应当得到关注。本文介绍在Linux操作系统下如何建立NTP时间服务器、利用NTP 时间服务器配置实例,供Linux 网管员参考建立。