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