NTP 是什么
NTP堪唐,是 Net Time Protocol
的縮寫巡语,意即網(wǎng)絡(luò)時(shí)間協(xié)議。
NTP是在分組交換淮菠、延遲時(shí)間可變的數(shù)據(jù)網(wǎng)絡(luò)上進(jìn)行時(shí)鐘同步的網(wǎng)絡(luò)協(xié)議男公。
NTP由特拉華大學(xué)(University of Delaware)的David L. Mills設(shè)計(jì)。
說起來它的歷史相當(dāng)長(zhǎng)了合陵,自1985年以來枢赔,NTP是目前仍在使用的最古老的互聯(lián)網(wǎng)協(xié)議之一澄阳。
NTP 只考慮 UTC 時(shí)間,不考慮時(shí)區(qū)踏拜,不考慮夏令時(shí)等碎赢。
NTP使用UDP,端口123速梗。
NTP 如何工作的
分層架構(gòu)
NTP使用一種樹狀的肮塞,半分層的時(shí)間源系統(tǒng)。每一層叫做 stratum
(見下圖)姻锁。每個(gè) stratum 都有一個(gè)編號(hào)峦嗤,從0開始,最大到15屋摔,16被用來標(biāo)記設(shè)備未同步烁设。
一般情況下,第 n+1 層 stratum 從第 n 層同步時(shí)間钓试。
-
stratum 0:
一般用硬件實(shí)現(xiàn)装黑,例如原子鐘(如銫、銣)弓熏、GPS時(shí)鐘或其他無線電時(shí)鐘恋谭。它們也被稱為參考(基準(zhǔn))時(shí)鐘(reference clocks)。
下圖:美國(guó)海軍天文臺(tái)的原子鐘挽鞠。圖來自 WikiPedia
image.png
-
stratum 1:
這一層是計(jì)算機(jī)疚颊,它們的系統(tǒng)時(shí)間和連接其上的 stratum 0 設(shè)備保持同步,誤差在幾個(gè)微秒信认。
本層計(jì)算機(jī)可能與其他同層的計(jì)算機(jī)對(duì)等相連材义,以進(jìn)行完整性檢查和備份。它們也被稱為主要(primary)時(shí)間服務(wù)器嫁赏。這一層對(duì)互聯(lián)網(wǎng)是不可見的其掂,雖然它們是部署在互聯(lián)網(wǎng)上的。
它們率屬于美國(guó)海軍天文臺(tái)潦蝇。 參看 https://tycho.usno.navy.mil/
stratum 2:
它們從 stratum1 機(jī)器同步時(shí)間款熬。stratum2的計(jì)算機(jī)將查詢層1服務(wù)器。層2計(jì)算機(jī)也可能與其他層2計(jì)算機(jī)對(duì)等相連攘乒,為對(duì)等組中的所有設(shè)備提供更穩(wěn)定的時(shí)間贤牛。stratum 3:
這些計(jì)算機(jī)與層2的服務(wù)器同步。它們使用與層2相同的算法進(jìn)行對(duì)等和數(shù)據(jù)采樣则酝,并可以自己作為服務(wù)器擔(dān)任階層4計(jì)算機(jī)殉簸,以此類推。
圖來自 WikiPedia
時(shí)間延遲計(jì)算
時(shí)間計(jì)算方式參考下圖,
時(shí)間偏移“θ”定義為:
往返延遲“δ”為:
其中:
t0 是請(qǐng)求數(shù)據(jù)包傳輸?shù)目蛻舳藭r(shí)間戳喂链,
t1 是請(qǐng)求數(shù)據(jù)包回復(fù)的服務(wù)器時(shí)間戳,
t2 是響應(yīng)數(shù)據(jù)包傳輸?shù)姆?wù)器時(shí)間戳妥泉,
t3 是響應(yīng)數(shù)據(jù)包回復(fù)的客戶端時(shí)間戳椭微。
圖來自 WikiPedia
別著急,下面我們看看這個(gè)值是如何計(jì)算出來的盲链,小學(xué)數(shù)學(xué)知識(shí)就夠了蝇率。
t1,t2是屬于同一個(gè)時(shí)鐘的,因此它們的差值是有意義的刽沾,同理本慕,t3,t0的差值也是有意義的。
t3 - t0
是數(shù)據(jù)包傳輸?shù)娜繒r(shí)間侧漓,服務(wù)器處理的時(shí)間是 t2 - t1
, 那么往返網(wǎng)絡(luò)傳輸時(shí)間就是
δ=(t3 - t0) - (t2 - t1)
,這個(gè)應(yīng)該沒問題吧锅尘?(有問題請(qǐng)面壁思考1分鐘 ??????)
現(xiàn)在假設(shè)網(wǎng)絡(luò)延遲是對(duì)稱的,那么單程網(wǎng)絡(luò)延時(shí)就是 δ/2
,也就是 [(t3 - t0) - (t2 - t1)]/2
布蔗。
</br>
我假設(shè)你都理解了藤违,那么現(xiàn)在計(jì)算兩個(gè)時(shí)鐘的差值。(有問題請(qǐng)面壁思考10分鐘 ??????)纵揍。
現(xiàn)在假設(shè)這個(gè)差值為 θ
考慮從 t2 => t3 的過程顿乒,從服務(wù)器t2時(shí)刻開始,經(jīng)過網(wǎng)絡(luò)延時(shí)(σ/2
,單程延時(shí))泽谨,到達(dá)t3,但是t3是客戶端的時(shí)間璧榄,t3 + θ
對(duì)應(yīng)的就是服務(wù)器的時(shí)間,那么它們應(yīng)該是相等的吧雹。
t2 + σ/2 = t3 + θ
骨杂,計(jì)算θ
,得到
這個(gè)計(jì)算就完成了。
例如上面圖中的 θ=(135 - 231 + 137 - 298)/2
=-(257/2)
,客戶端比服務(wù)器快雄卷,時(shí)間是負(fù)值腊脱。
客戶端會(huì)同時(shí)請(qǐng)求好幾個(gè)服務(wù)器,進(jìn)行統(tǒng)計(jì)分析龙亲,過濾不合理的值陕凹,并從最好的三個(gè)剩余候選中導(dǎo)出估算的時(shí)間偏移,然后調(diào)整時(shí)鐘頻率以逐漸減小偏移鳄炉。
Linux上的NTP
NTP在 CentOS上用的是 ntpd
服務(wù)杜耙,
-
以下情況表示 NTP 服務(wù)未正常同步:
$ ntpstat unsynchronised
-
以下情況表示 NTP 服務(wù)已經(jīng)正常同步:
$ ntpstat synchronised to NTP server (85.199.214.101) at stratum 2 time correct to within 91 ms polling server every 1024 s
-
或者查看服務(wù)狀態(tài)
$ sudo systemctl status ntpd.service ● ntpd.service - Network Time Service Loaded: loaded (/usr/lib/systemd/system/ntpd.service; disabled; vendor preset: disabled) Active: active (running) since 一 2017-12-18 13:13:19 CST; 3s ago
-
如何讓NTP 盡快同步
$ sudo systemctl stop ntpd.service $ sudo ntpdate pool.ntp.org $ sudo systemctl start ntpd.service
ntpdate
使用的時(shí)候一定要先停止 ntpd.service
服務(wù),它們不兼容拂盯,可以多次執(zhí)行ntpdate
佑女,以盡快同步
每個(gè)NTP Client同時(shí)也可以作為 NTP Server,這樣的話,就可以在一個(gè)局域網(wǎng)內(nèi)团驱,用2到3臺(tái)機(jī)器同步外網(wǎng)摸吠,其他的機(jī)器就從這些機(jī)器上同步。
-
其他常用命令
ntpq -p
,其中加星號(hào)的是現(xiàn)在正在使用的嚎花。st 指的就是 stratum
ntpq -p remote refid st t when poll reach delay offset jitter ============================================================================== 202.120.2.101.d .XFAC. 16 u - 64 0 0.000 0.000 0.000 +biisoni.miuku.n 207.224.49.219 2 u 454 1024 357 173.259 -1.247 0.103 61-216-153-104. 118.163.81.63 3 u 30d 1024 0 78.465 34.438 0.000 *85.199.214.100 .GPS. 1 u 7 64 377 166.829 0.220 0.123 correo.poashost 128.227.205.3 2 u 58d 1024 0 350.541 34.771 0.000
FAQ
-
假如我的時(shí)間比服務(wù)器快寸痢,NTP 會(huì)導(dǎo)致我的時(shí)鐘往后調(diào)整嗎?
不會(huì)的紊选,NTP使用一種相對(duì)平滑的方式來調(diào)整啼止,它會(huì)讓時(shí)鐘的頻率變慢,并最終和服務(wù)器保持同步兵罢。
-
NTP什么時(shí)候會(huì)失效献烦?
如果你的時(shí)間和服務(wù)器相差太多,超過17分鐘卖词,那么NTP認(rèn)為你的時(shí)鐘有問題巩那,可能會(huì)拒絕同步。因此開啟NTP之前此蜈,請(qǐng)手工調(diào)整下時(shí)鐘(或者用
ntpdate
手工同步一次拢操,記得要關(guān)閉ntpd
服務(wù)),保證相差不會(huì)太多舶替。
參考
YouTube視頻 Linux Network Time Protocol
我同事的總結(jié) NTP 配置
請(qǐng)聯(lián)系我
微信: sunfriend
如果你覺得文章有用令境,請(qǐng)打賞,多少不限顾瞪。家里還有兒子需要我養(yǎng)活……