ntpd在實(shí)際同步時(shí)間時(shí)是一點(diǎn)點(diǎn)的校準(zhǔn)過來時(shí)間的,最終把時(shí)間慢慢的校正對。而ntpdate不會考慮其他程序是否會陣痛,直接調(diào)整時(shí)間。一個(gè)是校準(zhǔn)時(shí)間,一個(gè)是調(diào)整時(shí)間。
以下是一個(gè)形象的假設(shè):
linuxtone限制用戶注冊1小時(shí)才能發(fā)帖。
數(shù)據(jù)庫服務(wù)器在 10:00分接受了我的注冊邀請;
10:03分,ntpdate將數(shù)據(jù)庫時(shí)間強(qiáng)行改成9:35分;
然后10:05分(9:37分)我嘗試發(fā)帖,系統(tǒng)判斷我注冊時(shí)間是否滿一小時(shí)會使用:9:37 - 10:00
最后電腦就邏輯混亂了。。。
類似的帖子網(wǎng)上也有很詳細(xì)的說明,貼出來給大家看看:
時(shí)鐘的躍變,有時(shí)候會導(dǎo)致很嚴(yán)重的問題。許多應(yīng)用程序依賴連續(xù)的時(shí)鐘??畢竟,這是一項(xiàng)常見的假定,即,取得的時(shí)間是線性的,一些操作,例如數(shù)據(jù)庫事務(wù),通常會地依賴這樣的事實(shí):時(shí)間不會往回跳躍。
不幸的是,ntpdate調(diào)整時(shí)間的方式就是我們所說的”躍變“:在獲得一個(gè)時(shí)間之后,ntpdate使用settimeofday(2)設(shè)置系統(tǒng)時(shí)間,這有幾個(gè)非常明顯的問題:
- 第一,這樣做不安全。ntpdate的設(shè)置依賴于ntp服務(wù)器的安全性,攻擊者可以利用一些軟件設(shè)計(jì)上的缺陷,拿下ntp服務(wù)器并令與其同步的服務(wù)器執(zhí)行某些消耗性的任務(wù)。由于ntpdate采用的方式是跳變,跟隨它的服務(wù)器無法知道是否發(fā)生了異常(時(shí)間不一樣的時(shí)候,唯一的辦法是以服務(wù)器為準(zhǔn))。
- 第二,這樣做不精確。一旦ntp服務(wù)器宕機(jī),跟隨它的服務(wù)器也就會無法同步時(shí)間。與此不同,ntpd不僅能夠校準(zhǔn)計(jì)算機(jī)的時(shí)間,而且能夠校準(zhǔn)計(jì)算機(jī)的時(shí)鐘。
- 第三,這樣做不夠優(yōu)雅。由于是跳變,而不是使時(shí)間變快或變慢,依賴時(shí)序的程序會出錯(例如,如果ntpdate發(fā)現(xiàn)你的時(shí)間快了,則可能會經(jīng)歷兩個(gè)相同的時(shí)刻,對某些應(yīng)用而言,這是致命的)。
因而,唯一一個(gè)可以令時(shí)間發(fā)生跳變的點(diǎn),是計(jì)算機(jī)剛剛啟動,但還沒有啟動很多服務(wù)的那個(gè)時(shí)候。其余的時(shí)候,理想的做法是使用ntpd來校準(zhǔn)時(shí)鐘,而不是調(diào)整計(jì)算機(jī)時(shí)鐘上的時(shí)間。
NTPD 在和時(shí)間服務(wù)器的同步過程中,會把 BIOS 計(jì)時(shí)器的振蕩頻率偏差??或者說 Local Clock 的自然漂移(drift)??記錄下來。這樣即使網(wǎng)絡(luò)有問題,本機(jī)仍然能維持一個(gè)相當(dāng)精確的走時(shí)。
<b>
個(gè)人使用心得:ntpdate修改簡單粗暴,同步速度快,在開機(jī)時(shí)各種服務(wù)還沒起來時(shí)能快速同步時(shí)間,使用ntpd的話由于同步時(shí)間約3-4min,數(shù)據(jù)庫往往已經(jīng)啟動,此時(shí)同步時(shí)間后差過大可能有其他問題