NTP時間同步

2022-09-03 18:28:56

NTP 同步原理

NTP最典型的授時方式是Client/Server方式,如下圖所示:

  • 使用者端首先向伺服器端傳送一個NTP請求報文,其中包含了該報文離開使用者端的時間戳t1;
  • NTP請求報文到達NTP伺服器,此時NTP伺服器的時刻為t2。當伺服器端接收到該報文時,NTP伺服器處理之後,於t3時刻發出NTP應答報文。該應答報文中攜帶報文離開NTP使用者端時的時間戳t1、到達NTP伺服器時的時間戳t2、離開NTP伺服器時的時間戳t3;
  • 使用者端在接收到響應報文時,記錄報文返回的時間戳t4。
  • NTP報文從使用者端到伺服器的往返延遲delay。
  • 使用者端與伺服器端之間的時間差offset。
    根據方程組:
    https://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]https://info.support.huawei.com/info-finder/encyclopedia/zh/NTP.html
[2]http://023wg.com/message/message/cd_feature_ntp_message.html