[原创]关于ntp时间同步理论及配置参数20170804
前言
NTP(Network Time Protocol,网络时间协议)是用来使网络中的各个计算机时间同步的一种协议。无论是平时使用的私人计算机还是在工作中搭建的服务器集群,时间的统一性和准确性是十分重要的。它是用来同步网络中各个计算机的时间的协议。
在计算机的世界里,时间非常地重要,例如对于火箭发射这种科研活动,对时间的统一性和准确性要求就非常地高,是按照A这台计算机的时间,还是按照B这台计算机的时间?NTP就是用来解决这个问题的,NTP(Network TimeProtocol,网络时间协议)是用来使网络中的各个计算机时间同步的一种协议。它的用途是把计算机的时钟同步到世界协调时UTC,其精度在局域网内可达0.1ms,在互联网上绝大多数的地方其精度可以达到1-50ms。
它可以使计算机对其服务器或时钟源(如石英钟,GPS等等)进行时间同步,它可以提供高精准度的时间校正,而且可以使用加密确认的方式来防止恶毒的协议攻击。
0层的服务器采用的是原子钟、GPS钟等物理设备,stratum 1与stratum 0 是直接相连的,往后的stratum与上一层stratum通过网络相连,同一层的server也可以交互。
1、C/S合一
ntpd对下层client来说是serviceserver,对于上层server来说它是client,也就是说新版的NTP服务程序已经不对服务端和客户端进行区分了,统一叫做ntpd。ntpd根据配置文件的参数决定是要为其他服务器提供时钟服务或者是从其他服务器同步时钟。所有的配置都在/etc/ntp.conf文件中。
2、NTP客户端同步间隔
NTP服务会间隔多长时间想时钟服务器请求一次时钟同步呢?默认最小时间间隔为64s,默认最大时间间隔是1024s(17分钟左右)。64s是比较合理的,默认间隔也是可调的(Notethat most device drivers will not operate properly if the poll interval is lessthan 64 s and that the broadcast server and manycast client associations willalso use the default, unless overridden.)。
3、容忍误差范围
NTP服务并不是在任何情况下都会进行同步的。当时钟服务器时间和本地时间相差大于1000s时,NTP服务就会认为是人为调整了时钟或出现了硬件故障,例如CMOS电池损坏等。此时,NTP服务就会退出,需要人工(ntpdate…)进行时钟同步。
采用-g选项可以让ntpd忽略1000s或更大误差,设置时钟到serversystem time, 但是ntpd还是会因此退出。
4、层次(strata)
stratum根据上层server的层次而设定(+1)。
对于提供network time service provider的主机来说,stratum的设定要尽可能准确。
而作为局域网的time service provider,通常将stratum设置为10 (Stratum 10 is conventional for unsynchronized local clocks; it ishigh enough that nobody is likely to mistake it for a desirable clock tosynchronize with.),
如下:
server 127.127.1.0 # localclockfudge 127.127.1.0 stratum 10#stratum设置为其它值也是可以的,其范围为0~15
二、设置与启动
文件路径:/etc/ntp.conf
# 1. 先处理权限方面的问题,包括放行上层服务器以及开放局域网用户来源:
restrict default kod nomodify notrap nopeernoquery <==拒绝 IPv4 的用户
restrict -6 default kod nomodify notrapnopeer noquery <==拒绝 IPv6 的用户
restrict 220.130.158.71 <==放行tock.stdtime.gov.tw 进入本 NTP 的服务器
restrict 59.124.196.83 <==放行tick.stdtime.gov.tw 进入本 NTP 的服务器
restrict 59.124.196.84 <==放行time.stdtime.gov.tw 进入本 NTP 的服务器
restrict 127.0.0.1 <==底下两个是默认值,放行本机来源
restrict -6 ::1restrict 192.168.100.0 mask255.255.255.0 nomodify <==放行局域网用户来源,或者列出单独IP
# 2. 设定主机来源,请先将原本的[0|1|2].centos.pool.ntp.org 的设定批注掉:
server 220.130.158.71 prefer <==以这部主机为最优先的server
server 59.124.196.83
server 59.124.196.84
# 3.默认的一个内部时钟数据,用在没有外部NTP 服务器时,使用它为局域网用户提供服务:
# server 127.127.1.0 # local clock#fudge 127.127.1.0 stratum 10
# 4.预设时间差异分析档案与暂不用到的 keys等,不需要更动它:
driftfile /var/lib/ntp/driftkeys /etc/ntp/keys
参数设置文件路径:/etc/sysconfig/ntpd
OPTIONS="-u ntp:ntp -p /var/run/ntpd.pid" SYNC_HWCLOCK=yes# 将他改成 yes 吧!这样 BIOS 的时间也会跟着改变的!
设置NTP服务器不难但是NTP本身是一个很复杂的协议.
1. 时间和时区
如果有人问你说现在几点? 你看了看表回答他说晚上8点了. 这样回答看上去没有什么问题,但是如果问你的这个人在欧洲的话那么你的回答就会让他很疑惑,因为他那里还太阳当空呢.
这里就有产生了一个如何定义时间的问题. 因为在地球环绕太阳旋转的24个小时中,世界各地日出日落的时间是不一样的.所以我们才有划分时区(timezone)的必要,也就是把全球划分成24个不同的时区. 所以我们可以把时间的定义理解为一个时间的值加上所在地的时区(注意这个所在地可以精确到城市)
地理课上我们都学过格林威治时间(GMT), 它也就是0时区时间. 但是我们在计算机中经常看到的是UTC.它是CoordinatedUniversal Time的简写.虽然可以认为UTC和GMT的值相等(误差相当之小),但是UTC已经被认定为是国际标准,所以我们都应该遵守标准只使用UTC
那么假如现在中国当地的时间是晚上8点的话,我们可以有下面两种表示方式
20:00 CST
12:00 UTC
这里的CST是Chinese Standard Time,也就是我们通常所说的北京时间了.因为中国处在UTC