NTP時間同步
- 2022 年 9 月 3 日
- 筆記
NTP 同步原理
NTP最典型的授時方式是Client/Server方式,如下圖所示:

- 客戶端首先向服務端發送一個NTP請求報文,其中包含了該報文離開客戶端的時間戳t1;
- NTP請求報文到達NTP伺服器,此時NTP伺服器的時刻為t2。當服務端接收到該報文時,NTP伺服器處理之後,於t3時刻發出NTP應答報文。該應答報文中攜帶報文離開NTP客戶端時的時間戳t1、到達NTP伺服器時的時間戳t2、離開NTP伺服器時的時間戳t3;
- 客戶端在接收到響應報文時,記錄報文返回的時間戳t4。
- NTP報文從客戶端到伺服器的往返延遲delay。

- 客戶端與服務端之間的時間差offset。
根據方程組:
//download.huawei.com/mdl/image/download?uuid=a93af4e4ee98470cb6753b60d539c80e
可以解得時間差為:

NTP 工作模式
客戶/伺服器模式
-
客戶模式:運行在客戶模式的主機定期向伺服器端發送報文,不管伺服器端是否可達及伺服器端的層數。運行在這種模式的主機可以依照對方的時鐘進行同步,但不會修改對方的時鐘。
-
伺服器模式:運行在伺服器模式的主機接收並回應報文。運行在伺服器模式的主機可以向客戶端提供同步資訊,但不會修改自己的時鐘。
廣播模式
-
運行在廣播模式下,周期性向IPv4格式的廣播地址發送時鐘同步報文,不管它的對等體是否可達或層數為多少。運行在廣播模式的主機通向所有對等體提供同步資訊,但不會修改自己的時鐘。
-
客戶端偵聽來自伺服器的廣播消息包。當接收到第一個廣播消息包後,為估計網路延遲,客戶端先啟用一個短暫的伺服器/客戶端模式與遠程伺服器交換消息,之後恢復廣播模式,繼續偵聽廣播消息包的到來,根據到來的廣播消息包對本地時鐘再次進行同步。
廣播模式應用在有多台工作站、不需要準確度很高的高速區域網。典型的情況是區域網中的一台或多台時間伺服器定期向工作站發送廣播報文,廣播報文在毫秒級的延遲基礎上確定時間。
在採用多台時間伺服器的情況下,為了提高可靠性,需要改進時鐘選擇演算法。
組播模式
-
伺服器端周期性向IPv4/IPv6格式的組播地址發送時鐘同步報文。運行在組播模式的主機通常是區域網內運行高速廣播介質的時間伺服器,向所有對等體提供同步資訊,但不會修改自己的時鐘。
-
客戶端偵聽來自伺服器的組播消息包。當接收到第一個組播消息包後,為估計網路延遲,客戶端先啟用一個短暫的伺服器/客戶端模式與遠程伺服器交換消息。客戶端恢復組播模式後,繼續偵聽組播消息包的到來,根據到來的組播消息包對本地時鐘進行同步。
多播模式
-
多播模式下的客戶端周期性地向IPv4/IPv6組播地址發送請求報文,尋找連接的最小數目。該過程採用如下方式進行:TTL(time-to-live)初始為1,每次累加1,直到達到最小連接數,或者TTL值達到上限。若TTL達到上限,而客戶端調動的連接數仍不夠,則客戶端將停止一個超時周期的數據傳輸以清除所有連接,然後重複上述過程。若客戶端調動的連接數達到了最小值,則每過一個超時周期,客戶端都會傳送一個報文,以保持連接。
-
TTL域內的多播伺服器持續偵聽報文。若某個伺服器可以被同步,則伺服器將使用客戶端的單播地址返回報文(Mode欄位設置為4)
多播模式適用於伺服器分散分布在網路中的情況。客戶端可以發現與之最近的多播伺服器,並進行同步。多播模式適用於伺服器不穩定的組網環境中,伺服器的變動不會導致整網中的客戶端重新進行配置。
NTP 報文格式
-
數據報文

|欄位|長度|含義|
|:---|:---😐:---|
|LI(Leap Indicator)|2bit|表示在NTP時間標尺中將要插入的下一跳情況。
00: 無告警。
01: 最後一分鐘包含61秒。
10: 最後一分鐘含59秒。
11: 告警(時鐘無法同步)。|
|VN(Version Number)|3bit|NTP的版本號。|
|Mode|3bit|NTP的工作模式。
000: reserved,保留。
001: symmetric active,主動對等體模式。
010: symmetric passive,被動對等體模式。
011:client,客戶模式。
100: server,伺服器模式。
101: broadcast,廣播模式。
110: reserved for NTP control messages,NTP控制報文。
111: reserved for private use,內部使用預留。|
|Stratum|8bit|時鐘的層數,定義了時鐘的準確度。層數為1的時鐘準確度最高,從1到15依次遞減,層數為16的時鐘處於未同步狀態,不能作為參考時鐘。|
|Poll|8bit|輪詢時間,即發送報文的最小間隔時間。|
|Precision|8bit|時鐘的精度。|
|Root Delay|32bit|到主參考時鐘的總往返延遲時間。|
|Root Dispersion|32bit|本地時鐘相對於主參考時鐘的最大誤差。|
|Reference Identifier|32bit|標識特定參考時鐘。|
|Reference Timestamp|64bit|本地時鐘最後一次被設定或更新的時間。如果值為0表示本地時鐘從未被同步過。|
|Originate Timestamp|64bit|NTP報文離開源端時的本地時間。|
|Receive Timestamp|64bit|NTP報文到達目的端的本地時間。|
|Transmit Timestamp|64bit|目的端應答報文離開伺服器端的本地時間。|
|Authenticator|96bit|(可選)驗證資訊。| -
控制報文

|欄位|長度|含義|
|:---|:---😐:---|
|00|2bit|保留位。|
|VN(Version Number)|3bit|NTP的版本號。|
|6|3bit|NTP的工作模式,110表明是控制報文|
|REM|3bit|R:0表示命令,1表示響應。
E:0表示發送正常響應,1表示發送錯誤響應。
M:0表示最後一個分片,1表示其他。|
|Op|5bit|操作碼,表明命令的類型。|
|Sequence|16bit|發送或接受到報文的順序號。|
|Status|16bit|表明當前系統的狀態。|
|Association ID|16bit|連接標示。|
|Offset|16bit|偏移量|
|Count|16bit|數據域的長度|
|Data|≤468bit|包括發送報文或接受報文中的數據資訊。|
|Padding|16bit|填充欄位|
|Authenticator|96bit|(可選)驗證資訊。|
參考:[1]//info.support.huawei.com/info-finder/encyclopedia/zh/NTP.html





