先思考一个问题:当一个客户端配置向多个NTP时间服务器校时,此时客户端优先向哪个时间服务器同步时间呢?
一个完整的NTP校时请求分四步:
1、客户端向服务器发起校时请求
2、服务器收到客户端发送的校时请求
3、服务器处理客户端的校时请求并发送(响应)给客户端
4、客户端收到服务器响应的信息并修正自身时间
下面我们从服务器与客户端两个方向来分析:
先来了解一下NTP协议中的stratum(层次):
NTP时间服务器有层次(stratum)之分,取值范围1~15,顶层的参考时钟编号为0。NTP官网对stratum的解释:
“层是同步距离的衡量标准。与抖动或延迟相反,分层是一种更静态的测量方法。基本上,从客户端的角度来看,它是服务器到参考时钟的数量。因此,参考时钟本身位于层 0,而最近的服务器位于层 1。在网络上,没有任何有效的 NTP 信息是分层 0 的。
与第 n 层服务器同步的服务器将在第 n + 1 层运行。层的上限是 15。分层的目的是通过优先选择分层较低的服务器来避免同步循环。”
根据官网解释,NTP时间服务器的层次结构如下图所示:
另根据RFC5905(NTPv4)协议和算法规范中对于stratum的描述得知
“随着分层号的增加,其精确度也会降低,这取决于特定的网络路径和系统时钟稳定性。 以同步距离衡量的平均误差,与分层数和衡量的往返延迟大致成正比增加。”
根据NTP的stratum可知,第1层服务器在NTP层次结构中具有最高的优先级。层数越大距离参考时钟距离越远,其精度越差。
当有多个NTP服务器时,可以通过修改其层数来调整它们的优先级。例如,可以将某个NTP服务器的层数设置为1,而将另一个服务器的层数设置为2。这样,层数较低的服务器将具有更高的优先级,因为它离参考时间源更近。在设置多个NTP时钟源的优先级时,需要根据网络环境和需求进行合理的调整。通过选择合适的层数和可能的配置选项,可以确保网络中的设备能够准确地同步时间。
附:Stratum取值范围:
Ø 0表示未指定或无效
Ø 1表示主服务器(例如,配备GPS/BD卫星或CDMA/5G基站的时间服务器)
Ø 2-15表示二级服务器,通过NTP协议实现的二级服务器
Ø 16表示不同步的
Ø 17-255保留
客户端系统种类繁多,下面以Linux(centos)和Windows两个系统来举例设置同步优先级。
Linux系统有两个时间同步守护进程:ntpd和chronyd,centos6.5及之前的版本使用的是ntpd,centos7及之后的版本使用的是chrony。两者在配置上基本一样,下面以chrony举例:
从官网可知,chrony.conf配置文件中,可配置多个时钟源,如下图所示:
可通过设置[option]为“prefer”选项来设置优先同步哪一台时钟源
“首选
与不带 prefer 选项的信息源相比,优先选择此信息源。”
Microsoft官方给出了配置多个时间服务器的方法,如下图
Windows命令提示符:
w32tm /config /manualpeerlist:"ntpserver.contoso.com clock.adatum.com" /syncfromflags:manual /update
优先级设置
优先级设置命令
w32tm /config /manualpeerlist:"ntpserver.contoso.com,0x8 clock.adatum.com,0x2" /syncfromflags:manual /update
查询配置参数命令
reg query HKLMSYSTEMCurrentControlSetServicesW32TimeParameters
end.
--------------------------
原创声明:
作者:yxj
出处:http://www.qinghong.net.cn/nts/index.php/content/285
版权:本文版权归作者和北京昕辰清虹科技有限公司共有
转载:未经作者同意,不得转载;否则必究法律责任