天天看點

ntpd與ntpdate的差別

之前配置ntpd的時候搜到一句話,印象很深刻,也覺得很有标題黨的效果,就借鑒為标題了:

“我認為有幾種人是必須不招聘/裁掉的: 1 用ntpdate代替ntpd的人”

但具體原因不太懂,總覺得還是用ntpdate比較友善。

今天問了紅帽技術支援,對方的解釋是:

ntpd在實際同步時間時是一點點的校準過來時間的,最終把時間慢慢的校正對。而ntpdate不會考慮其他程式是否會陣痛,直接調整時間。

一個是校準時間,一個是調整時間。

以下是一個形象的假設:

linuxtone限制使用者注冊1小時才能發帖。

10:03分,ntpdate将資料庫時間強行改成9:35分;

然後10:05分(9:37分)我嘗試發帖,系統判斷我注冊時間是否滿一小時會使用:9:37 - 10:00

最後電腦就邏輯混亂了。。。

類似的文章網上也有很詳細的說明,貼出來給大家看看:

時鐘的躍變,有時候會導緻很嚴重的問題。許多應用程式依賴連續的時鐘??畢竟,這是一項常見的假定,即,取得的時間是線性的,一些操作,例如資料庫事務,通常會地依賴這樣的事實:時間不會往回跳躍。

不幸的是,ntpdate調整時間的方式就是我們所說的”躍變“:在獲得一個時間之後,ntpdate使用settimeofday(2)設定系統時間,這有幾個非常明顯的問題:

第一,這樣做不安全。ntpdate的設定依賴于ntp伺服器的安全性,攻擊者可以利用一些軟體設計上的缺陷,拿下ntp伺服器并令與其同步的伺服器執行某些消耗性的任務。由于ntpdate采用的方式是跳變,跟随它的伺服器無法知道是否發生了異常(時間不一樣的時候,唯一的辦法是以伺服器為準)。

第二,這樣做不精确。一旦ntp伺服器當機,跟随它的伺服器也就會無法同步時間。與此不同,ntpd不僅能夠校準計算機的時間,而且能夠校準計算機的時鐘。

第三,這樣做不夠優雅。由于是跳變,而不是使時間變快或變慢,依賴時序的程式會出錯(例如,如果ntpdate發現你的時間快了,則可能會經曆兩個相同的時刻,對某些應用而言,這是緻命的)。

因而,唯一一個可以令時間發生跳變的點,是計算機剛剛啟動,但還沒有啟動很多服務的那個時候。其餘的時候,理想的做法是使用ntpd來校準時鐘,而不是調整計算機時鐘上的時間。

ntpd 在和時間伺服器的同步過程中,會把 bios 計時器的振蕩頻率偏差??或者說 local clock 的自然漂移(drift)??記錄下來。這樣即使網絡有問題,本機仍然能維持一個相當精确的走時。

##############

最後提醒一下使用vmware的各位,因為虛拟機的時鐘不太正常,比正常速度慢好多秒,是以在虛拟機上測試ntpd很難得到理想的結果,我當年就是為這個問題耽擱了好幾天。。

如有錯誤,歡迎指正

郵箱:[email protected]

作者:czmmiao  文章出處:http://czmmiao.iteye.com/blog/2124410