网络时间协议NTP(Network Time Protocol)是用于互联网中时间同步的标准互联网协议。NTP的用途是把计算机的时间同步到某些时间标准。目前采用的时间标准是世界协调时UTC(Universal Time Coordinated)。NTP的主要开发者是美国特拉华大学的David L. Mills教授。
NTP时间服务器是针对自动化系统中的计算机、控制装置等进行校时的高科技产品,NTP时间服务器产品它从GPS卫星上获取标准的时间信号,将这些信息通过各种接口类型来传输给自动化系统中需要时间信息的设备(计算机、保护装置、故障录波器、事件顺序记录装置、安全自动装置、远动RTU),这样就可以达到整个系统的时间同步。
ntp 时间同步是一个复杂的时间同步机制,已经经过 20 年左右的研究和改进。它考虑到了硬件信息传输的延迟误差、网络传输的延迟误差等问题,并不是简单的从ntp 服务器询问一个时间并把这个时间设知到客户端上简单的事情。
0 1 2 3 4 5 6 7 8
Server --------+---+.--------------------------------
.' `.
/ `.
.' `-.
/ `.
Client .'---------------------`.---------------------
1 2 3 4 5 6 7 8 9
并不是说只要 ntp client 连接到 ntp server ,那么 ntp client 就会获取 ntp server 的时间并且同步。 当 ntp client 向 ntp server 发送请求后, server 会返回一组数据包给 client ,如果 client 经过计算发现数据包里面的误差值超过了可接受的范围,那么就不会接受该返回值。该误差值于服务器本身、服务器的网络环境、服务器时间源层级都有关系。
如果我们发现 ntp client 并没有向 ntp server 同步时间,我们可以使用
# ntpq
进入交互界面,用命令
> ass
列出所有激活的时间服务器
[root@dhcp-0-065 ~]# ntpq
ntpq > ass
ind assID status conf reach auth condition last_event cnt
===========================================================
1 11024 9614 yes yes none sys.peer reachable 1
ntpq >
然后用命令
> rv
选择指定的 ntp 服务器的 assID 查看具体动作
ntpq > rv 11024
assID=11024 status=9614 reach, conf, sel_sys.peer, 1 event, event_reach,
srcadr=dhcp-0-098.pek.redhat.com, srcport=123, dstadr=10.66.0.65,
dstport=123, leap=00, stratum=2, precision=-20, rootdelay=306.686,
rootdispersion=37.537, refid=10.5.26.10, reach=377, unreach=0, hmode=3,
pmode=4, hpoll=8, ppoll=8, flash=00 ok, keyid=0, ttl=0, offset=-0.014,
delay=0.312, dispersion=9.491, jitter=1.704,
reftime=ceefdf8c.e2a278cd Thu, Jan 7 2010 12:20:28.885,
org=ceefe1f8.5f74624a Thu, Jan 7 2010 12:30:48.372,
rec=ceefe1f8.5f7e5b59 Thu, Jan 7 2010 12:30:48.373,
xmt=ceefe1f8.5e570beb Thu, Jan 7 2010 12:30:48.368,
filtdelay= 4.47 0.35 4.48 0.31 2.85 4.68 0.33 2.47,
filtoffset= 2.08 -0.14 2.00 -0.01 -1.27 2.10 -0.05 1.07,
filtdisp= 0.00 3.84 7.70 11.55 15.42 19.25 23.09 26.94
ntpq >
我们取其中的 flash 值,可以通过
这个链接查看到时间服务器不被信任的原因。
附:flash=00 ok 表示 ntpd 客户端信任时间服务器。
reach=000 表示 ntpd 客户端尚未收到时间服务器发来的时间数据包。
refid=INIT 表示校时动作正在初始化。
flash=400 表示时间服务器的精准值(由时间服务器提供)过高,ntpd 客户端不信任该时间服务器。
reach=003 表示 ntpd 客户端已经收到 2 个由时间服务器发送过来的数据包。
补充:solaris上修改/etc/ntp.conf,将server设置为10.10.10.72,然后重启服务生效
用 ntpq -p
和 ntptrace 10.10.10.72观察一下当前NTP服务的状态。
暂停ntpd服务,执行ntpd -n -dddd 搜集信息约20分钟。
service ntpd stop
ntpd -n -dddd > ntpdebug收集信息再分析
查看 10.10.10.72的ntp服务状态:
a), svcs|grep ntp
b), pkginfo | grep ntp
c), netstat -an|grep 123
查看ntp状态 /etc/init.d/ntpd status