《NTPD工作原理介紹》要點(diǎn):
本文介紹了NTPD工作原理介紹,希望對(duì)您有用。如果有疑問(wèn),可以聯(lián)系我們。
ntpd
?是一個(gè)操作系統(tǒng)Daemon進(jìn)程,用于校正本地系統(tǒng)與Internet標(biāo)準(zhǔn)時(shí)鐘源之間的時(shí)間.ntpd
?完整的實(shí)現(xiàn)了?NTP?協(xié)議版本v4,但是同時(shí)兼容版本v3(RFC-1305)、版本v1與v2(分別由RFC-1059, RFC-1119定義).ntpd
?絕大多數(shù)情況下使用64位浮點(diǎn)數(shù)計(jì)算,僅在需要極高時(shí)間精度的情況下使用笨拙的64位固定長(zhǎng)度數(shù)計(jì)算,這個(gè)極高的精度是?232*1/1,000,000,000,000
?秒;要達(dá)到這個(gè)精度對(duì)CPU與網(wǎng)絡(luò)帶寬的要求已超過(guò)GHZ與GMbps的級(jí)別,當(dāng)前的大多數(shù)工作站都無(wú)法滿足.
ntpd
?進(jìn)程通過(guò)定期與NTP時(shí)鐘源服務(wù)器發(fā)送消息來(lái)獲取時(shí)間信息.在進(jìn)程初始啟動(dòng)時(shí)候,不論是第一次boot還是隨后啟動(dòng),nptd
?會(huì)給服務(wù)器發(fā)送消息以獲取時(shí)間本設(shè)置到本地系統(tǒng).為了防止網(wǎng)絡(luò)風(fēng)暴,進(jìn)程啟動(dòng)后會(huì)在定義好的間隔64秒之上再加一個(gè)隨機(jī)延遲值,這個(gè)隨機(jī)值的范圍是0~16秒;因此進(jìn)程啟動(dòng)后需要數(shù)分鐘才會(huì)開(kāi)始同步時(shí)間.
如今的計(jì)算機(jī)都帶有硬件時(shí)鐘芯片(time-of-year (TOY) chip),用于在計(jì)算機(jī)掉電過(guò)程中仍然保持正確時(shí)間,當(dāng)計(jì)算機(jī)上電,操作系統(tǒng)從時(shí)鐘芯片中獲取時(shí)間.當(dāng)操作系統(tǒng)啟動(dòng)完成并連接到時(shí)鐘源之后,操作系統(tǒng)會(huì)依據(jù)時(shí)鐘源定時(shí)調(diào)整芯片時(shí)間.在服務(wù)器沒(méi)有硬件時(shí)鐘芯片或硬件時(shí)鐘芯片故障(CMOS電池沒(méi)電)或其他原因?qū)е虏僮飨到y(tǒng)本地時(shí)間與時(shí)鐘源時(shí)間差別超過(guò)1000秒,nptd
認(rèn)為此時(shí)發(fā)生了嚴(yán)重問(wèn)題,唯一可靠的處理方法是人為介入.這種情況下nptd
?Daemon進(jìn)程會(huì)退出并在操作系統(tǒng)的syslog中記錄一條日志.nptd
?的啟動(dòng)選項(xiàng)?-g
?選項(xiàng)可以忽略1000秒的檢查并強(qiáng)制將時(shí)鐘源時(shí)間設(shè)置為硬件時(shí)間,不過(guò)考慮到硬件時(shí)鐘芯片故障的場(chǎng)景(CMOS電池沒(méi)電、或時(shí)鐘計(jì)時(shí)器故障),一旦再次出現(xiàn)芯片時(shí)間與時(shí)鐘源超過(guò)1000秒,nptd
還是會(huì)退出.
通常情況下,ntpd
?以很小的步長(zhǎng)調(diào)整時(shí)間使得時(shí)間盡量是連續(xù)的、不出現(xiàn)跳躍.在網(wǎng)絡(luò)極度擁塞的條件下,nptd
?與時(shí)鐘源之間發(fā)送一個(gè)消息包來(lái)回的時(shí)延有可能達(dá)到3秒,因此會(huì)導(dǎo)致同步距離(半個(gè)來(lái)回時(shí)延,1.5秒)變的很大.ntpd
?同步算法會(huì)丟棄時(shí)差大于128ms的包,除非在900秒內(nèi)沒(méi)有時(shí)差小于128ms的包,還有就是首次啟動(dòng)時(shí)候不會(huì)檢查這個(gè)時(shí)差直接同步.這種設(shè)計(jì)是為了減少誤報(bào)時(shí)鐘同步異常的告警.
上述行為的結(jié)果是每次成功設(shè)置本地時(shí)間,一般不會(huì)超過(guò)128ms,即使在網(wǎng)絡(luò)時(shí)延很高的情況下.有時(shí)候,特別是在ntpd
首次啟動(dòng)的時(shí)候,時(shí)差可能超過(guò)128ms,這種罕見(jiàn)場(chǎng)景一般是本地時(shí)間比時(shí)鐘源的時(shí)間快(未來(lái))超過(guò)128秒,這種情況本地時(shí)間將會(huì)被往過(guò)去方向調(diào)回.這種情況下某些應(yīng)用程序會(huì)有問(wèn)題.如果啟動(dòng)nptd
時(shí)候加上了?-x
?選項(xiàng),那么?nptd
?不會(huì)以步長(zhǎng)方式(stepped)同步,只會(huì)以微調(diào)校正方式(slew correction)同步.
使用?-x
?選項(xiàng)之前需要仔細(xì)考量影響.?ntpd
?微調(diào)校準(zhǔn)的最大頻率是 500 個(gè) PPM (parts-per-million)每秒,也就是每秒校準(zhǔn)?5/10,000
?秒.因此會(huì)導(dǎo)致本地時(shí)間與時(shí)鐘源之間需要很長(zhǎng)時(shí)間才能將時(shí)差同步到一個(gè)可接受的范圍,大概是2000秒同步一秒,對(duì)于依賴網(wǎng)絡(luò)時(shí)鐘源的應(yīng)用來(lái)說(shuō)這種情況不可接受.
nptd
?啟動(dòng)時(shí)的行為依賴頻度文件是否存在,通常是?npt.drift
?.這個(gè)文件包含了最近估算出的時(shí)鐘頻度誤差值.如果文件不存在,此時(shí)?ntpd
?進(jìn)入一種特殊模式會(huì)快速調(diào)整時(shí)間與頻度誤差值,這個(gè)快速大概好事15分鐘,隨后在時(shí)間與頻度誤差值正常后nptd
進(jìn)入正常模式,時(shí)間與頻度持續(xù)與時(shí)鐘源同步.并在一個(gè)小時(shí)之后,將當(dāng)前的頻度誤差值寫(xiě)入?npt.drift
?文件.如果文件存在,nptd
從此文件讀取頻度誤差值直接進(jìn)入正常模式,并沒(méi)隔一個(gè)小時(shí)將計(jì)算好的頻度誤差值寫(xiě)入文件.
nptd
?可以運(yùn)行在多種模式下,包括對(duì)稱的 主動(dòng)、被動(dòng)(active/passive),客戶端、服務(wù)端(client/server),廣播、多播(broadcast/multicase/manycase),詳細(xì)參考Association Management.通常運(yùn)行模式是以Daemon方式持續(xù)跟蹤同步時(shí)鐘源時(shí)間;當(dāng)然也可以只運(yùn)行一次,從外部時(shí)鐘源同步時(shí)間(從上次紀(jì)錄的頻度誤差文件中讀取頻度誤差值).廣播與多播模式下客戶端能夠自動(dòng)發(fā)現(xiàn)時(shí)鐘源服務(wù)器,并計(jì)算各個(gè)服務(wù)器的時(shí)延然后自動(dòng)完成配置,這種模式使得工作站集群自動(dòng)配置變?yōu)楝F(xiàn)實(shí).
默認(rèn)情況下nptd
以Daemon方式持續(xù)跟蹤多個(gè)時(shí)鐘源,同步的間隔由一個(gè)復(fù)雜的狀態(tài)機(jī)決定.狀態(tài)機(jī)使用啟發(fā)式算法,根據(jù)消息包來(lái)回時(shí)延、頻度誤差來(lái)計(jì)算最優(yōu)的同步間隔.通常情況下,狀態(tài)機(jī)初始以64秒為間隔并最終達(dá)到1024秒,少量的隨機(jī)數(shù)值會(huì)被增加到間隔上為了均衡服務(wù)器壓力.額外的,如果一個(gè)服務(wù)器不可達(dá)的情況下,為了減少網(wǎng)絡(luò)消息排隊(duì)阻塞,間隔會(huì)逐步增加到1024秒.
在某些情況下nptd
不能正常持續(xù)運(yùn)行,通常的規(guī)避手段時(shí)使用cron定時(shí)任務(wù)執(zhí)行ntpdate
命令.但是ntpdate
并沒(méi)有像nptd
一樣有考慮各種信號(hào)處理、錯(cuò)誤檢查、連續(xù)同步算法.nptd -q
?可以達(dá)到與?ntpdate
同樣的效果,-q
?參數(shù)使得?npt
同步一次后就退出;同步的過(guò)程與Daemon模式的nptd
是相同的.
如果操作系統(tǒng)內(nèi)核支持調(diào)整時(shí)鐘頻度(Solaris,Linux,FreeBSD都已經(jīng)支持),那么時(shí)鐘同步還有一種不以Daemon方式運(yùn)行的可選用法.首先,nptd
以Daemon方式運(yùn)行,配置好時(shí)鐘源,大約一個(gè)或幾個(gè)小時(shí)后,獲取到頻度誤差npt.drift
?文件;然后退出nptd
進(jìn)程,并以一次性模式運(yùn)行(nptd -q
),此時(shí)每次nptd
運(yùn)行都基于當(dāng)前獲取到的頻度誤差與時(shí)鐘源同步時(shí)間.
當(dāng)前版本的NTP包含了一個(gè)復(fù)雜的狀態(tài)機(jī),用于減少同步時(shí)的網(wǎng)絡(luò)負(fù)載;同時(shí)也包含很多種提升精度的方法.使用者在修改同步間隔(64秒~1024秒)的時(shí)候需要仔細(xì)考慮影響.默認(rèn)的最小同步間隔可以使用?tinker minpool
?命令修改為不小于16秒,這個(gè)值會(huì)被用作所有相關(guān)的使用到同步間隔的地方,除非顯示使用minpoll
?選項(xiàng)覆蓋.需要注意的是不少設(shè)備驅(qū)動(dòng)在同步間隔小于64秒時(shí)候不能正常工作;同時(shí)廣播與多播模式也是使用的默認(rèn)值,除非顯示覆蓋.
ntpd [ -aAbdgLmNPqx ] [ -c conffile ] [ -f driftfile ] [ -g ] [ -k keyfile ] [ -l logfile ] [ -N high ] [ -p pidfile ] [ -r broadcastdelay ] [ -s statsdir ] [ -t key ] [ -v variable ] [ -V variable ] [ -x ]
– -A
– -c?conffile
– -D?level
driftfile
– -g
keyfile
– -l?logfile
– -m
– -N?priority
pidfile
– -P
– -r?broadcastdelay
statsdir
– -t?key
– -x
轉(zhuǎn)載請(qǐng)注明本頁(yè)網(wǎng)址:
http://www.snjht.com/jiaocheng/1967.html