1. 程式人生 > >Linux基礎知識之ntpd和ntpdate的區別

Linux基礎知識之ntpd和ntpdate的區別

在Linux作業系統設定與上級NTP時鐘源同步是很基本的操作,Linux提供了ntpd和ntpdate兩種方式來實現時間同步,但它們在同步原理上則有著本質的區別:ntpd在實際同步時間時是一點點的校準時間的,也可以理解為ntpd是平滑同步;而ntpdate不會考慮其他程式是否會陣痛,就立即同步。因此在生產環境中慎用ntpdate。

我們可以結合一個應用場景來加強對ntpd和ntpdate的理解:

網站限制使用者註冊1小時後才能發帖。
資料庫伺服器在 10:00分接受了我的註冊邀請;
10:03分,ntpdate將資料庫時間強行改成9:35分;
然後10:05分(9:37分)我嘗試發帖,系統判斷我註冊時間是否滿一小時會使用:9:37 – 10:00
最後電腦就邏輯混亂了。。。

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

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

不幸的是,ntpdate調整時間的方式就是我們所說的“躍變”,這就導致了幾個非常明顯的問題:

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

2. 這樣做不精確。一旦ntp伺服器宕機,跟隨它的伺服器也就會無法同步時間。與此不同,ntpd不僅能夠校準計算機的時間,而且能夠校準計算機的時鐘。

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

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

NTPD 在和時間伺服器的同步過程中,會把 BIOS 計時器的振盪頻率偏差,或者說 Local Clock 的自然漂移(drift)記錄下來。這樣即使網路有問題,本機仍然能維持一個相當精確的走時。

所以最後的建議是:如果首次安裝作業系統還未啟動業務之前,建議先ntpdate,然後再開啟ntpd服務與時間伺服器進行實時平滑同步。