您好,登錄后才能下訂單哦!
今天小編給大家分享一下NTPD的工作原理是什么的相關知識點,內容詳細,邏輯清晰,相信大部分人都還太了解這方面的知識,所以分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后有所收獲,下面我們一起來了解一下吧。
Network Time Protocol(NTP)是用來使計算機時間同步化的一種協議,它可以使計算機對其服務器或時鐘源(如石英鐘,GPS等等)做同步化,它可以提供高精準度的時間校正(LAN上與標準間差小于1毫秒,WAN上幾十毫秒)。
ntpd 進程通過定期與NTP時鐘源服務器發送消息來獲取時間信息。在進程初始啟動時候,不論是第一次boot還是隨后啟動,nptd 會給服務器發送消息以獲取時間本設置到本地系統。為了防止網絡風暴,進程啟動后會在定義好的間隔64秒之上再加一個隨機延遲值,這個隨機值的范圍是0~16秒;因此進程啟動后需要數分鐘才會開始同步時間。
如今的計算機都帶有硬件時鐘芯片(time-of-year (TOY) chip),用于在計算機掉電過程中仍然保持正確時間,當計算機上電,操作系統從時鐘芯片中獲取時間。當操作系統啟動完成并連接到時鐘源之后,操作系統會依據時鐘源定時調整芯片時間。在服務器沒有硬件時鐘芯片或硬件時鐘芯片故障(CMOS電池沒電)或其他原因導致操作系統本地時間與時鐘源時間差別超過1000秒,nptd認為此時發生了嚴重問題,唯一可靠的處理方法是人為介入。這種情況下nptd Daemon進程會退出并在操作系統的syslog中記錄一條日志。nptd 的啟動選項 -g 選項可以忽略1000秒的檢查并強制將時鐘源時間設置為硬件時間,不過考慮到硬件時鐘芯片故障的場景(CMOS電池沒電、或時鐘計時器故障),一旦再次出現芯片時間與時鐘源超過1000秒,nptd還是會退出。
通常情況下,ntpd 以很小的步長調整時間使得時間盡量是連續的、不出現跳躍。在網絡極度擁塞的條件下,nptd 與時鐘源之間發送一個消息包來回的時延有可能達到3秒,因此會導致同步距離(半個來回時延,1.5秒)變的很大。ntpd 同步算法會丟棄時差大于128ms的包,除非在900秒內沒有時差小于128ms的包,還有就是首次啟動時候不會檢查這個時差直接同步。這種設計是為了減少誤報時鐘同步異常的告警。
上述行為的結果是每次成功設置本地時間,一般不會超過128ms,即使在網絡時延很高的情況下。有時候,特別是在ntpd首次啟動的時候,時差可能超過128ms,這種罕見場景一般是本地時間比時鐘源的時間快(未來)超過128秒,這種情況本地時間將會被往過去方向調回。這種情況下某些應用程序會有問題。如果啟動nptd時候加上了 -x 選項,那么 nptd 不會以步長方式(stepped)同步,只會以微調校正方式(slew correction)同步。
使用 -x 選項之前需要仔細考量影響。 ntpd 微調校準的最大頻率是 500 個 PPM (parts-per-million)每秒,也就是每秒校準 5/10,000 秒。因此會導致本地時間與時鐘源之間需要很長時間才能將時差同步到一個可接受的范圍,大概是2000秒同步一秒,對于依賴網絡時鐘源的應用來說這種情況不可接受。
nptd 啟動時的行為依賴頻度文件是否存在,通常是 npt.drift 。這個文件包含了最近估算出的時鐘頻度誤差值。如果文件不存在,此時 ntpd 進入一種特殊模式會快速調整時間與頻度誤差值,這個快速大概好事15分鐘,隨后在時間與頻度誤差值正常后nptd進入正常模式,時間與頻度持續與時鐘源同步。并在一個小時之后,將當前的頻度誤差值寫入 npt.drift 文件。如果文件存在,nptd從此文件讀取頻度誤差值直接進入正常模式,并沒隔一個小時將計算好的頻度誤差值寫入文件。
nptd 可以運行在多種模式下,包括對稱的 主動、被動(active/passive),客戶端、服務端(client/server),廣播、多播(broadcast/multicase/manycase),詳細參考Association Management。通常運行模式是以Daemon方式持續跟蹤同步時鐘源時間;當然也可以只運行一次,從外部時鐘源同步時間(從上次紀錄的頻度誤差文件中讀取頻度誤差值)。廣播與多播模式下客戶端能夠自動發現時鐘源服務器,并計算各個服務器的時延然后自動完成配置,這種模式使得工作站集群自動配置變為現實。
默認情況下nptd以Daemon方式持續跟蹤多個時鐘源,同步的間隔由一個復雜的狀態機決定。狀態機使用啟發式算法,根據消息包來回時延、頻度誤差來計算最優的同步間隔。通常情況下,狀態機初始以64秒為間隔并最終達到1024秒,少量的隨機數值會被增加到間隔上為了均衡服務器壓力。額外的,如果一個服務器不可達的情況下,為了減少網絡消息排隊阻塞,間隔會逐步增加到1024秒。
在某些情況下nptd不能正常持續運行,通常的規避手段時使用cron定時任務執行ntpdate命令。但是ntpdate并沒有像nptd一樣有考慮各種信號處理、錯誤檢查、連續同步算法。nptd -q 可以達到與 ntpdate同樣的效果,-q 參數使得 npt同步一次后就退出;同步的過程與Daemon模式的nptd是相同的。
如果操作系統內核支持調整時鐘頻度(Solaris,Linux,FreeBSD都已經支持),那么時鐘同步還有一種不以Daemon方式運行的可選用法。首先,nptd以Daemon方式運行,配置好時鐘源,大約一個或幾個小時后,獲取到頻度誤差npt.drift 文件;然后退出nptd進程,并以一次性模式運行(nptd -q),此時每次nptd運行都基于當前獲取到的頻度誤差與時鐘源同步時間。
當前版本的NTP包含了一個復雜的狀態機,用于減少同步時的網絡負載;同時也包含很多種提升精度的方法。使用者在修改同步間隔(64秒~1024秒)的時候需要仔細考慮影響。默認的最小同步間隔可以使用 tinker minpool 命令修改為不小于16秒,這個值會被用作所有相關的使用到同步間隔的地方,除非顯示使用minpoll 選項覆蓋。需要注意的是不少設備驅動在同步間隔小于64秒時候不能正常工作;同時廣播與多播模式也是使用的默認值,除非顯示覆蓋。
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
“md_block md_has_block_below md_has_block_below_ul”>啟動認證(默認啟用)– -A禁用認證
-b
使用NTP廣播消息同步– -c conffile指定配置文件名稱
-d
啟用調試模式– -D level指定調試級別
-f driftfile
指定頻度誤差文件的路徑– -g正常情況下,ntpd 與時鐘源的時間差超過1000秒的閾值會退出,如果閾值設置為0,則ntpd 不會檢查,任何時差都會強制同步。-g 選項就是用于設置閾值為0;但是只是一次生效,如果ntpd 運行過程中發現時差超過1000秒,還是會退出。
-k keyfile
指定NTP認證key文件的路徑– -l logfile指定日志文件路徑,默認是操作系統日志
-L
listen在虛擬IP上– -m使用NTP多播消息在多播地址224.0.1.1上同步(需要內核支持)
-n
不fork進程– -N priority指定優先級運行ntpd進程
-p
指定ntpd的pid文件– -P覆蓋操作系統的優先級限制
-q
僅同步一次后退出– -r broadcastdelay指定默認的廣播、多播延遲時間
-s statsdir
指定統計工具生成的文件所在目錄– -t key增加key到信任的key列表
-v, -V
增加系統變量; -x默認情況下,ntpd在時差小于128ms時候使用微調模式,在大于128ms時候使用步長模式。-x 選項強制nptd僅使用微調模式同步。如果步長閾值(128ms)設置為0,則強制使用步長模式,-x也不生效。不是很推薦使用此選項,會導致時間同步變的非常緩慢,對強依賴網絡時鐘的應用有影響。微調模式的同步速率是0.5ms/s,需要2000s才同步1秒。
以上就是“NTPD的工作原理是什么”這篇文章的所有內容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,小編每天都會為大家更新不同的知識,如果還想學習更多的知識,請關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。