最新要闻

广告

手机

iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?

iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?

警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案

警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案

家电

全球观点:(笔记)【NTP系列:05】NTP时间同步失败:Windows(W32Time)作为NTP时钟源服务端,Linux作为客户端

来源:博客园


(相关资料图)

一、问题现象使用windows(W32Time)作NTP时钟源服务端,控制板端Linux作为客户端,使用ntpd服务无法同步时间,但是ntpdate是可以同步成功。

二、问题分析

1. 从报文的角度分析ntpd是否正常工作,以及与ntpdate的报文区别

通过使用抓包工具发现,NTP虽然同步失败,但其实NTP是有一直在发送NTP报文的,如下:

推断结论:ntpd启动后,会一直定时发送请求报文,默认是64S。且报文与ntpdate无异,由此可知,ntpd服务工作是正常的,但是时间没有同步,应是由于内部某种机制判断报文时间无效造成。2. 使用“ntpq -c as”进行分析

[root@DB ~]# ntpq -c asind assid status  conf reach auth condition  last_event cnt===========================================================  1 46885  9024   yes   yes  none    reject   reachable  2[root@db~]# ntpq -c "rv 46885"associd=46885 status=9024 conf, reach, sel_reject, 2 events, reachable,srcadr=192.170.150.251, srcport=123, dstadr=192.170.150.13, dstport=123,leap=00, stratum=1, precision=-6, rootdelay=0.000, rootdisp=10742.889,refid=LOCL, reftime=db2c9fb9.07818901  Sun, Jul 10 2016 18:19:37.029,rec=db2d94e4.cabd81b8  Mon, Jul 11 2016 11:45:40.791, reach=377,unreach=0, hmode=3, pmode=4, hpoll=6, ppoll=6, headway=50,flash=400 peer_dist, keyid=0, offset=72815.578, delay=0.423,dispersion=16.529, jitter=10.969, xleave=0.029,filtdelay=     0.42    0.36    0.37    0.35    0.35    0.34    0.32    0.35,filtoffset= 72815.5 72812.7 72810.1 72808.1 72805.4 72803.5 72800.8 72798.6,filtdisp=     15.63   16.63   17.64   18.61   19.60   20.59   21.60   22.57
Rootdelay: 表示相对于同步子网根的主参考源的最大误差, 只有大于零的正值才有可能。Delay :表示对端时钟相对于本地时钟在它们之间的网络路径上的往返延迟. 请注意,此变量可以采用正值和负值,具体取决于时钟精度和偏斜误差累积Dispersion :表示对端时钟相对于它们之间网络路径上的本地时钟的最大误差。 只有大于零的正值才有可能。Root Dispersion :表示相对于同步子网根时钟源的最大误差。 只有大于零的正值才有可能。Jitter :抖动(也称为定时抖动)是指频率的短期变化。Offset:客户端与时钟源的时差。filtdelay,filtoffset和filtdisp:三个对等变量显示最后八轮测量轮次中的每一轮的延迟,偏移和抖动统计。这些统计信息及其趋势是服务器,客户端和网络的重要性能指标。例如,延迟和抖动的大幅波动表明网络拥塞。缺少时钟滤波器阶段表明网络中的数据包丢失。

推断结论:上述结果表示NTP拒绝了这个server,返回码flash=400 peer_dist(对于flash状态码的解释请查阅本文附一),表示distance(距离)超过了距离阈值,默认的距离阈值是1.5s。

distance(距离)计算公式(ms单位换算为s):distance = ((delay + rootdelay) / 2 + dispersion + rootdispersion + jitter) / 1000将上述调试结果具体值带入计算公式得到距离值distance:distance = ((0.423 + 0.000) / 2 + 16.529 + 10742.889 + 10.969) / 1000 ≈ 10.770s > 1.5s(默认距离阈值)

本例中rootdisp值较大,一般常见的是w32time时钟源场景,且该时钟源服务器windows可能未配置稳定的外部时钟源。而默认的tos maxdist距离阈值是1.5s(1500ms),超过该阈值则不会被时钟选择算法认可,客户端不会从这个时钟源进行时间同步。备注:

(1)对于同步距离,官方文档对该部分介绍的中文翻译为:同步距离(定义为延迟的一半加上色散)表示最大误差统计量。抖动表示预期的错误统计信息。从对等变量计算的最大错误和预期错误表示服务器的质量度量。从系统变量计算的最大误差和预期误差表示客户端的质量度量。如果任何服务器的根同步距离超过1.5秒(称为选择阈值),则认为该服务器无效。1.5S是linux的默认值,如果不人工配置该值,则默认值生效,可以在/etc/ntp.conf中加入tos maxdist 30将同步距离的阈值改为30。如果一次同步的同步距离大于设置的门限值,客户端会认为该时钟源不可信,不会进行同步,此时的flash状态码会返回400,说明超过最大同步距离。但是会继续发送探测报文。造成同步距离变大的原因不在少数,比较常见的是网络波动和某一端发生时间跳变。(2)距离阈值是可设置的,可以在/etc/ntp.conf中(在restrict、server行之前)修改/新增tos maxdist 30来设置距离阈值为30s,提升系统对时钟源稳定性的容忍度。三、解决方案方案一:更换linux系统作ntp时钟源(推荐)方案二:添加参数规避(规避方案,不推荐)1、使用vi编辑器,修改/etc/ntp.conf,在所有“restrict”、“server”开头的行之前添加一行tos maxdist 30;添加之后,按esc,输入:wq存盘退出。2、强制时间同步(对时间敏感的业务需停业务后执行此操作,如数据库)[root@db~]# systemctl stop ntpd[root@ db~]# ntpdate 172.16.1.200 //172.16.1.200是ntp服务器IP[root@ db~]# systemctl start ntpd

此时可使用“ntpq -p”指令查看时间同步是否恢复正常,remote列IP前面有*代表NTP服务器正常工作。

[root@DB~]# ntpq -p     remote           refid      st t when poll reach   delay   offset  jitter================================================================== *172.16.1.200       .LOCL.     1 u  3  64   1    0.210   -0.500   0.000

附一:NTP官方文档对于flash状态码的解释

NTP官方文档对于flash状态码的解释
信息描述
0000ok同步成功
0001pkt_dup重复包
0002pkt_bogus伪包
0004pkt_unsync服务器未同步
0008pkt_denied拒绝访问
0010pkt_auth验证失败
0020pkt_startum无效的跳跃或阶层
0040pkt_header标头距离超出
0080pkt_autokey自动键序列错误
0100pkt_crypto自动键协议错误
0200peer_stratum无效的标题或阶层
0400peer_dist超出距离阈值
0800peer_loop同步循环
1000peer_unreach无法访问或未选择

关键词: 同步距离 最大误差 时间同步