ntpd、ntpdate的區別
使用之前得弄清楚一個問題,ntpd與ntpdate在更新時間時有什么區別。ntpd不僅僅是時間同步服務器,他還可以做客戶端與標準時間服務器進行同步時間,而且是平滑同步,并非ntpdate立即同步,在生產環境中慎用ntpdate,也正如此兩者不可同時運行。
時鐘的躍變,對于某些程序會導致很嚴重的問題。許多應用程序依賴連續的時鐘——畢竟,這是一項常見的假定,即,取得的時間是線性的,一些操作,例如數據庫事務,通常會地依賴這樣的事實:時間不會往回跳躍。不幸的是,ntpdate調整時間的方式就是我們所說的”躍變“:在獲得一個時間之后,ntpdate使用(2)設置系統時間,這有幾個非常明顯的問題:
第一,這樣做不安全。ntpdate的設置依賴于ntp服務器的安全性,攻擊者可以利用一些軟件設計上的缺陷,拿下ntp服務器并令與其同步的服務器執行某些消耗性的任務。由于ntpdate采用的方式是跳變,跟隨它的服務器無法知道是否發生了異常(時間不一樣的時候,唯一的辦法是以服務器為準)。
第二,這樣做不精確。一旦ntp服務器宕機,跟隨它的服務器也就會無法同步時間。與此不同,ntpd不僅能夠校準計算機的時間,而且能夠校準計算機的時鐘。
第三,這樣做不夠優雅。由于是跳變,而不是使時間變快或變慢,依賴時序的程序會出錯(例如,如果ntpdate發現你的時間快了,則可能會經歷兩個相同的時刻,對某些應用而言,這是致命的)。
因而,唯一一個可以令時間發生跳變的點,是計算機剛剛啟動,但還沒有啟動很多服務的那個時候。其余的時候,理想的做法是使用ntpd來校準時鐘,而不是調整計算機時鐘上的時間。
NTPD 在和時間服務器的同步過程中,會把 BIOS 計時器的振蕩頻率偏差——或者說 Local Clock 的自然漂移(drift)——記錄下來。這樣即使網絡有問題,本機仍然能維持一個相當精確的走時。
ntp的移植
1) ./ --prefix=RY--host=arm-linux
2) make
3) make install
ntp的使用
1)在客戶端上vi /etc/ 增加兩行:
ntp123/tcp
ntp123/udp
2)如果客戶端/etc目錄下沒有文件,將服務器上/etc目錄下的文件復制到客戶端的/etc目錄下
3)打開時間服務器(假設其IP地址為192.168.1.11)上的ntp進程
/etc/init.d/ntp start
4)客戶端開始更新時間
ntpdate 192.168.1.11
注意:
l 如果重啟ntp守護進程后,開發板有可能無法立即更新時間,提示錯誤“no server for found”,這是因為每次重啟NTP服務器之后大約要3-5分鐘客戶端才能與服務器建立正常的通訊連接,等待一會兒再更新就可以了。
l 有可能防火墻會阻礙更新時間,這時可以加上“-u”參數。
ntp的配置
這方面的文章網上有很多,講的也很詳細,主要就是修改/etc/init.d/ntp.conf文件,我稍作了修改,加了兩行:
server 210.72.145.44
server
之后我就可以同步時間了,有人加了這么一行
192.168.1.1mask 255.255.255.0
我沒有加,但依然成功,看了下配置文件有這第一行
::1
可能這一行就包含那一行的意思吧!僅僅是猜測。下面給出一個樣本加注釋,僅供參考:
# 1. 關于權限設定部分
# 權限的設定主要以 這個參數來設定,主要的語法為:
# IP mask
# 其中 IP 可以是軟件地址,也可以是 default ,default 就類似 0.0.0.0
# 至于 則有:
#ignore:關閉所有的 NTP 聯機服務
#:表示 Client 端不能更改 Server 端的時間參數,不過,
#Client 端仍然可以透過 Server 端來進行網絡校時。
#notrust :該 Client 除非通過認證,否則該 Client 來源將被視為不信任網域
#noquery :不提供 Client 端的時間查詢
#notrap :不提供trap這個遠程事件登入
#如果 完全沒有設定,那就表示該 IP (或網域)“沒有任何限制”
default notrap noquery# 關閉所有的 NTP 要求封包
127.0.0.1 #這是允許本級查詢
192.168.0.1 mask 255.255.255.0
#在192.168.0.1/24網段內的服務器就可以通過這臺NTP Server進行時間同步了
# 2. 上層主機的設定
#要設定上層主機主要以 server 這個參數來設定,語法為:
#server [IP|HOST Name] [prefer]
#Server 后面接的就是我們上層 Time Server 啰!而如果 Server 參數
#后面加上 perfer 的話,那表示我們的 NTP 主機主要以該部主機來作為
#時間校正的對應。另外,為了解決更新時間封包的傳送延遲動作,
#所以可以使用 來規定我們的主機
#在與 Time Server 溝通時所花費的時間,可以記錄在
#后面接的文件內,例如下面的范例中,我們的 NTP server 與
#聯機時所花費的時間會記錄在 /etc/ntp/drift文件內
server
server
server
server prefer
#其他設置值,以系統默認值即可
server 127.127.1.0 #
fudge 127.127.1.0 stratum 10
/var/lib/ntp/drift
0.008
keys /etc/ntp/keys
總結一下,用來設置訪問權限,server用來設置上層時間服務器,用來設置保存漂移時間的文件。
不同機器之間的時間同步
為了避免主機時間因為長期運作下所導致的時間偏差,進行時間同步()的工作是非常必要的。Linux系統下,一般使用ntp服務器來同步不同機器的時間。一臺機器,可以同時是ntp服務器和ntp客戶機。在網絡中,推薦使用像DNS服務器一樣分層的時間服務器來同步時間。 同步時間,可以使用ntpdate命令,也可以使用ntpd服務。 使用ntpdate比較簡單。格式如下:
[root@linux ~]# ntpdate [-nv] [NTP IP/]
[root@linux ~]# ntpdate 192.168.0.2
[root@linux ~]# ntpdate
但這樣的同步,只是強制性的將系統時間設置為ntp服務器時間。如果cpu tick有問題,只是治標不治本。所以,一般配合cron命令,來進行定期同步設置。比如,在crontab中添加:
0 12 * * * */usr/sbin/ntpdate 192.168.0.1
這樣,會在每天的12點整,同步一次時間。ntp服務器為192.168.0.1。
要注意的是,ntpd 有一個自我保護設置: 如果本機與上源時間相差太大, ntpd 不運行. 所以新設置的時間服務器一定要先 ntpdate 從上源取得時間初值, 然后啟動 ntpd服務。ntpd服務 運行后, 先是每64秒與上源服務器同步一次, 根據每次同步時測得的誤差值經復雜計算逐步調整自己的時間, 隨著誤差減小, 逐步增加同步的間隔. 每次跳動, 都會重復這個調整的過程.
ntpd服務的設置
ntpd服務的相關設置文件如下:
1)/etc/ntp.conf:這個是NTP daemon的主要設文件,也是 NTP 唯一的設定文件。
2)/usr /share//:在這個目錄下的文件其實是規定了各主要時區的時間設定文件,例如北京地區的時區設定文件在/usr/share//Asia/Beijing 就是了。這個目錄里面的文件與底下要談的兩個文件(clock 與)是有關系的。
3)/etc//clock:這個文件其實也不包含在NTP 的 daemon 當中,因為這個是 linux 的主要時區設定文件。每次開機后,Linux 會自動的讀取這個文件來設定自己系統所默認要顯示的時間。
4)/etc /:這個文件就是“本地端的時間配置文件”。剛剛那個clock 文件里面規定了使用的時間設置文件(ZONE) 為/usr/share//Asia/Beijing ,所以說,這就是本地端的時間了,此時, Linux系統就會將Beijing那個文件另存為一份 /etc/文件,所以未來我們的時間顯示就會以Beijing那個時間設定文件為準。
5)/etc/:系統時區文件
ntp服務的啟動與觀察
在啟動NTP服務前,先對提供服務的這臺主機手動的校正一次時間咯。(因為啟動服務器,端口會被服務端占用,就不能手動同步時間了)
[root@linux ~] # ntpdate
25 Apr 14:33:51 ntpdate[8310]: step time .85.129.2 offset 6.655976 sec
然后,啟動ntpd服務:
[root@linux ~] # /etc/init.d/ntp start /restart
查看端口:
[root@linux ~] # netstat -ln|grep 123
udp0 0192.168.228.153:123 0.0.0.0:*
udp0 0127.0.0.1:1230.0.0.0:*
udp0 00.0.0.0:1230.0.0.0:*
udp0 0:::123:::*
[root@linux ~] # –n 127.0.0.1
127.0.0.1:stratum 11, offset 0.000000,synch .950951
222.73.214.125:stratum 2,offset –0.000787,synch .108575
209.81.9.7:stratum 1,offset 0.000028,synch .00436,refid ‘GPS’
#這個指令可以列出目前NTP服務器(第一層)與上層NTP服務器(第二層)彼此之間的
#關系
ntpq
[root@linux ~] # ntpq –p
指令“ntpq -p”可以列出目前我們的NTP與相關的上層NTP的狀態,以上的幾個字段的意義如下:
remote:即NTP主機的IP或主機名稱。注意最左邊的符號,如果由“+”則代表目前正在作用鐘的上層NTP,如果是“*”則表示也有連上線,不過是作為次要聯機的NTP主機。
refid:參考的上一層NTP主機的地址
st:即stratum階層
when:幾秒前曾做過時間同步更新的操作
poll:下次更新在幾秒之后
reach:已經向上層NTP服務器要求更新的次數
delay:網絡傳輸過程鐘延遲的時間
offset:時間補償的結果
jitter:Linux系統時間與BIOS硬件時間的差異時間
系統時間與硬件時間同步
ntp服務,默認只會同步系統時間。如果想要讓ntp同時同步硬件時間,可以設置/etc//ntpd文件,在/etc//ntpd文件中,添加 =yes 這樣,就可以讓硬件時間與系統時間一起同步。