NTP(網(wǎng)絡時間協(xié)議)和 SNTP(簡單網(wǎng)絡時間協(xié)議)是類似的 TCP/IP 協(xié)議,因為它們使用來自時間服務器消息的相同時間包來計算準確時間。時間服務器用于組裝和發(fā)送時間戳的過程與使用 NTP(即完全實現(xiàn) NTP)或使用 SNTP 完全相同
時間同步程序,無論是像 W32Time(使用 SNTP 協(xié)議)這樣的 Windows 內置程序還是第三方附加程序,都決定了正在使用的協(xié)議——而不是時間服務器。時間服務器不在乎。NTP 和 SNTP 之間的區(qū)別在于錯誤檢查和對時間本身進行實際更正的算法。
NTP 算法比 SNTP
算法復雜得多。NTP 通常使用多個時間服務器來驗證時間,然后控制系統(tǒng)的轉換速率。該算法使用多種方法確定這些值是否準確,包括捏造因素和識別與其他時間服務器不一致的時間服務器。然后它會加快或減慢系統(tǒng)時鐘的漂移率,以便 (1) 系統(tǒng)時間始終正確,以及 (2) 在初始校正后不會有任何后續(xù)時間跳躍。
與 NTP 不同,SNTP 通常只使用一個時間服務器來計算時間,然后將系統(tǒng)時間“跳轉”到計算出的時間。但是,它可以有備用時間服務器,以防萬一。在每個間隔期間,它確定時間是否足以進行更正,如果是,則應用更正。
如果這還不是很清楚,請考慮將手表與墻上的時鐘進行比較和調整的類比。手表類似于“客戶端”設備(如 PC),墻上的時鐘是時間服務器。使用 SNTP,您始終以預定的時間間隔查看時鐘。假設每小時一個。(順便說一句,比較計算機同步時間的行為稱為“輪詢”。)
當您認為現(xiàn)在是 12:00:00 時,您查看(輪詢)時鐘以查看它是 11:59:57。你快了三秒,所以你把手表調快了三秒。您在 1:00:00 之前不要做任何其他事情。您再次查看時鐘,發(fā)現(xiàn)現(xiàn)在是 12:59:57 – 再次快了三秒 –
然后您再次將手表往后撥了三秒。每小時,您將手表重置 3 秒以與墻上的時鐘同步。
從錯誤的角度來看,您在民意調查后立即準確,并且您會逐漸變得更糟。大誤差發(fā)生在輪詢之前,即發(fā)生突然調整時,例如時間從 12:59:57 到 12:59:58 到 12:59.59 到 1:00:00 到 12:59:57。
如果三秒的誤差和時間刻度的不連續(xù)性困擾您,請考慮 NTP 情況。在這里,您想知道您的手表每小時快 3 秒,因此您不必經(jīng)常更換它。
只需使用您的誤差與時間測量值來補償漂移。您不需要一直使用相同的測量周期。您只需要知道變化的速度和方向。
在您對漂移有了很好的感覺后,您可以對手表進行編程以進行實時調整。您希望進行非常小的調整,以便在任何給定時間都與墻上的時鐘同步,甚至不需要看它。
當然,漂移率可能會隨時間變化,因此您確實希望不斷輪詢時鐘,并應用您能想到的修正。有了它,你就會得到一塊似乎永遠不會失去同步的手表!
您需要哪一種?
這一切都取決于您的應用程序,但一般來說,SNTP 客戶端只應在
時間同步對您的系統(tǒng)不重要的情況下使用。對于所有其他客戶端,以及也將為其他系統(tǒng)提供時間的系統(tǒng),您應該利用完整的 NTP 實現(xiàn)來包括參考選擇和時鐘控制算法,以通過完整的計時路徑保持準確性。
查看時間服務器本身,選擇使用 SNTP 或 NTP 僅提供時間的時間服務器應關注該時間服務器是否會同步到 NTP 作為主要或次要參考——在這種情況下,只有完整的 NTP 應該是用過的。為簡化起見,SNTP 應僅在網(wǎng)絡計時路徑的開始或結束處使用,并且僅應在時間同步對您的系統(tǒng)不重要的網(wǎng)絡計時路徑的末端使用。