先思考一個問題:當一個客戶端配置向多個NTP時間伺服器校時,此時客戶端優先向哪個時間伺服器同步時間呢?
一個完整的NTP校時請求分四步:
1、客戶端向伺服器發起校時請求
2、伺服器收到客戶端傳送的校時請求
3、伺服器處理客戶端的校時請求併傳送(響應)給客戶端
4、客戶端收到伺服器響應的資訊並修正自身時間
下面我們從伺服器與客戶端兩個方向來分析:
1. 伺服器優先順序
先來了解一下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保留
2. 客戶端優先順序
客戶端系統種類繁多,下面以Linux(centos)和Windows兩個系統來舉例設定同步優先順序。
2.1、Linux系統(centos)
Linux系統有兩個時間同步守護程式:ntpd和chronyd,centos6.5及之前的版本使用的是ntpd,centos7及之後的版本使用的是chrony。兩者在配置上基本一樣,下面以chrony舉例:
從官網可知,chrony.conf配置檔案中,可配置多個時鐘源,如下圖所示:
可透過設定[option]為“prefer”選項來設定優先同步哪一臺時鐘源
“首選
與不帶 prefer 選項的資訊源相比,優先選擇此資訊源。”
2.2、Windows系統
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 HKLM\SYSTEM\CurrentControlSet\Services\W32Time\Parameters
end.