文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>NTP时间服务器

NTP时间服务器

时间:2010-10-03  来源:fzguon

一、 概念

在正式介绍NTP服务器之前,先将有关时区、系统时间、硬件时间等概念介绍一下。

时区:地球是圆的,所以同一个时刻,在地球的一边是白天一边是黑夜。而人类使用一天24小时的制度,所以在地球对角的两边就应该差了 12 的小时。由于同一个时间点上面,整个地球的时间都不一样,为了解决这个问题,所以地球就被分成 24 个时区。

GMT: 这 24 个时区是依据“经纬度”来进行定位,而经度为零的地点在英国“格林威治”这个城市所在纵剖面上,(注:所谓的纵剖面就是由南极切到北极的直线,而横切面就是与赤道平行的切线)。在格林威治以东的区域时间是比较快的(+小时),而以西的地方当然就是较慢(-小时)。

     以北京为例,因为北京在格林威治的东方 (大概120东经),因此北京时间会比 GMT 时间快 8 小时 (GMT + 8)。当格林威治时间为零点,北京就已经是早上八点了。

系统时间:表示系统内运行的时间

硬件时间:指硬件设备中,如BIOS的时间。系统时间由硬件时间和系统时区进行设置。系统在启动的时候,会从硬件设备中读取硬件时间,并根据系统时区进行修改,然后写入到系统时间内。同样,系统关闭时,也会读取系统时间,然后写入硬件时间。

UTC(协和标准时间):在计算时间时,最准确的计算应该是使用“原子震动周期”所计算的物理时间(Atomic Clock),也被称为原子钟,由原子钟计算的时间被定义为标准时间(Interational Atomic Time)。而UTC时间就是利用这种物理时钟为基准所定义出来的正确时间。

二、NTP通信协议

计算机主要是以 BIOS 内部的时间为主要的时间依据,而偏偏这个时间可能因为 BIOS 内部芯片本身的问题,而导致 BIOS 时间与标准时间 (UTC) 有一点点的差异存在。所以,为了避免主机时间因为长期运作下所导致的时间偏差,进行时间同步(synchronize)的工作就显的很重要了。

那么怎么让时间同步化?如果我们选择几部主要主机(Primary server) 调校时间,让这些Primary Servers的时间同步之后,再开放网络服务来让 Client 端联机,并且提供Client端调整Client自己的时间,就可以达到全部的计算机时间同步化的运作。

NTP协议是通过Server和Client的方式进行的,通讯的过程是:

1.  首先,主机需要启动这个NTP服务

2.  Client 会向 NTP Server发送出调校时间的message

3.  然后 NTP Server 会送出目前的标准时间给Client

4.  Client 接收了来自Server的时间后,会据以调整自己的时间,以实现网络校时。

    虽然网络上有很多公开的NTP服务器,但在使用的时候需要注意。由于网络传输是有延时的,当Client对一个延时比较厉害的服务器发送请求后,直到最后Client获得时间,期间可能会出现一个由于网络延时导致的的时间差。所以,建议大家选择离自己最近的NTP服务器作为校验的标准。

三、NTP服务器设置文件

1.       /etc/ntp.conf:这个是NTP daemon的主要设文件,也是 NTP 唯一的设定文件。

2.       /usr/share/zoneinfo/:在这个目录下的文件其实是规定了各主要时区的时间设定文件,例如北京地区的时区设定文件在 /usr/share/zoneinfo/Asia/Beijing 就是了。这个目录里面的文件与底下要谈的两个文件(clock 与localtime)是有关系的。

3.       /etc/sysconfig/clock:这个文件其实也不包含在NTP 的 daemon 当中,因为这个是 linux 的主要时区设定文件。每次开机后,Linux 会自动的读取这个文件来设定自己系统所默认要显示的时间。

4.       /etc/localtime:这个文件就是“本地端的时间配置文件”。刚刚那个clock 文件里面规定了使用的时间设置文件(ZONE) 为 /usr/share/zoneinfo/Asia/Beijing ,所以说,这就是本地端的时间了,此时, Linux系统就会将Beijing那个文件另存为一份 /etc/localtime文件,所以未来我们的时间显示就会以Beijing那个时间设定文件为准。

5.       /etc/timezone:系统时区文件

6.       /bin/date:这个是 Linux 系统上面常见的日期与时间输出指令,用途很广。除了输出时间外,也可以修改时间

7.       /sbin/hwclock:这是一个 root 才能执行的指令,因为 Linux 系统上面 BIOS 时间与 Linux 系统时间是分开的,所以使用date指令调整了时间之后,还需要使用 hwclock 才能将修改过后的时间写入 BIOS 当中。

8.       /usr/sbin/ntpd:这就是 NTP 的主要 daemon 文件。得要启动他才能提供 NTP 服务。注意,这个指令默认会参考/etc/ntp.conf 里面的设定。

9.       /usr/sbin/ntpdate:这个就是Client 端用来连接NTP Server 的主要执行文件。如果您没有要启用NTP 而仅想要使用NTP Client功能的话,那么只会用到这个指令。

10.    /usr/sbin/ntptrace:这个指令可以用来追踪某台时间服务器的时间对应关系。

四、系统时间自动变更的问题

有时候会发现服务器在每次重启后,时间会自动的变更,以至带来很多的麻烦。(例如日志记录混乱,OA系统登记信息错误等)导致这样的问题基本上有两个:

1.         服务器硬件造成的,如电池电量不够;

2.         系统问题,通常是因为时区错误。

让我们以一个实际例子为例:

 系统:红旗 DC Server 5.0 for x86

通常,由于我们所在的时区是GMT +8(中国),所以,出现问题会发现这样的情况:

[root@linux ~] # date 042519302006

Tue Apr 25 19:31:00 CST 2006

[root@linux ~] # hwclock –r

Tue Apr 25 11:31:36 2006  -0.432139 seconds

也就是,系统时间比硬件时间增加了8小时。
首先,查看并修改时区配置:

[root@linux ~] #  cat /etc/timezone

Asia/Beijing

接下来,查看系统时间的配置文件

[root@linux ~] # cat /etc/sysconfig/clock

ZONE="Asia/Beijing"

UTC=false

ARC=false

要保证上述的Zone环境配置是对应的。然后修改本地时间文件:

[root@linux ~] #  cd /usr/share/zoneinfo/Asia/

[root@linux ~] # cp Beijing /etc/localtime

拷贝正确的本地时间文件(或链接)

最后,把硬件时间重新设置为系统时间,然后重新启动,以生效:

[root@linux ~] # hwclock --hctosys

如果现在我这部主机搬到日本东京去了,那么应该如何调整时间呢?

[root@linux ~] # rm /etc/localtime

[root@linux ~] # cp –a /usr/share/zoneinfo/Asia/Tokyo /etc/localtime

[root@linux ~] # vi /etc/sysconfig/clock

ZONE=“Asia/Tokyo”

UTC=false

ARC=false

五、搭架NTP服务器

在 NTP Server 的设定上面,其实最好不要对 Internet 无限制的开放,尽量仅提供您自己内部的 Client 端联机进行网络校时就好。此外, NTP Server 总也是需要网络上面较为准确的主机来自行更新自己的时间啊,所以在我们的 NTP Server 上面也要找一部最靠近自己的 Time Server 来进行自我校正。事实上, NTP 这个服务也是 Server/Client 的一种模式。

接下来,谈一谈如何在ntp.conf里设置权限控制。

[root@linux ~]# vi /etc/ntp.conf 
# 1. 关于权限设定部分 
#   权限的设定主要以 restrict 这个参数来设定,主要的语法为: 
#   restrict IP mask netmask_IP parameter 
#   其中 IP 可以是软件地址,也可以是 default ,default 就类似 0.0.0.0 
#   至于 paramter 则有: 
#   ignore :关闭所有的 NTP 联机服务 
#   nomodify:表示 Client 端不能更改 Server 端的时间参数,不过,

#   Client 端仍然可以透过 Server 端来进行网络校时。 
#   notrust :该 Client 除非通过认证,否则该 Client 来源将被视为不信任网域 
#   noquery :不提供 Client 端的时间查询

#   notrap :不提供trap这个远程事件登入

#  如果 paramter 完全没有设定,那就表示该 IP (或网域)“没有任何限制”

restrict default nomodify notrap noquery # 关闭所有的 NTP 要求封包 
restrict 127.0.0.1    #这是允许本级查询
restrict 192.168.0.1 mask 255.255.255.0 nomodify 
#在192.168.0.1/24网段内的服务器就可以通过这台NTP Server进行时间同步了 
# 2. 上层主机的设定 
#  要设定上层主机主要以 server 这个参数来设定,语法为:
#  server [IP|HOST Name] [prefer]
#  Server 后面接的就是我们上层 Time Server 啰!而如果 Server 参数 
#  后面加上 perfer 的话,那表示我们的 NTP 主机主要以该部主机来作为 
#  时间校正的对应。另外,为了解决更新时间封包的传送延迟动作, 
#  所以可以使用 driftfile 来规定我们的主机 
#  在与 Time Server 沟通时所花费的时间,可以记录在 driftfile  
#  后面接的文件内,例如下面的范例中,我们的 NTP server 与  
#  cn.pool.ntp.org联机时所花费的时间会记录在 /etc/ntp/drift文件内 
server 0.pool.ntp.org

server 1.pool.ntp.org

server 2.pool.ntp.org

server cn.pool.ntp.org prefer

#其他设置值,以系统默认值即可

server  127.127.1.0     # local clock

fudge   127.127.1.0 stratum 10

driftfile /var/lib/ntp/drift
broadcastdelay  0.008
keys /etc/ntp/keys

然后修改一下/etc/sysconfig/ntpd

OPTIONS=“-u ntp:ntp –p /var/run/ntpd.pid”

SYNC_HWCLOCK=yes

#将它改成yes,这样BIOS的时间也会跟着改变的

六、NTP的启动与观察

在启动NTP服务前,先对提供服务的这台主机手动的校正一次时间咯。(因为启动服务器,端口会被服务端占用,就不能手动同步时间了)

[root@linux ~] # ntpdate cn.pool.ntp.org

25 Apr 14:33:51 ntpdate[8310]: step time server 80.85.129.2 offset 6.655976 sec

 然后,启动ntpd服务:

 [root@linux ~] # service ntpd start

或 [root@linux ~] # /etc/init.d/ntpd start

 查看端口:

[root@linux ~] # netstat -ln|grep 123

udp        0      0 192.168.228.153:123        0.0.0.0:*

udp        0      0 127.0.0.1:123               0.0.0.0:*

udp        0      0 0.0.0.0:123                  0.0.0.0:*

udp        0      0 :::123                       :::*

  如何确认我们的NTP服务器已经更新了自己的时间呢?

[root@linux ~] # ntpstat

synchronized to NTP server(127.127.1.0) at stratum 11

time correct to within 950ms

polling server every 64 s

#改指令可列出NTP服务器是否与上层联机。由上述输出结果可知,时间校正约

#为950*10(-6)秒。且每隔64秒会主动更新时间。

  常见的错误:

  25 Apr 15:30:17 ntpdate[11520]: no server suitable for synchronization found

  其实,这不是一个错误。而是由于每次重启NTP服务器之后大约要3-5分钟客户端才能与server建立正常的通讯连接。当此时用客户端连接服务端就会报这样的信息。一般等待几分钟就可以了。

[root@linux ~] # ntptrace –n 127.0.0.1

127.0.0.1:stratum 11, offset 0.000000,synch distance 0.950951

222.73.214.125:stratum 2,offset –0.000787,synch distance 0.108575

209.81.9.7:stratum 1,offset 0.000028,synch distance 0.00436,refid ‘GPS’

#这个指令可以列出目前NTP服务器(第一层)与上层NTP服务器(第二层)彼此之间的

#关系

[root@linux ~] # ntpq –p

相关阅读 更多 +
排行榜 更多 +
雷电觉醒安卓版

雷电觉醒安卓版

飞行射击 下载
3D幻影飞车最新版

3D幻影飞车最新版

飞行射击 下载
星河一号战队

星河一号战队

飞行射击 下载