ntp服務的細節全解析


在linux里設置NTP服務並不難,但是NTP本身確是一個很復雜的協議. 你都了解細節么?

1. 時間和時區

date命令可顯示時間與市區

[root@T_PV1_DB ~]# date

Tue Feb  7 16:32:16 CST 2017

[root@T_PV1_DB ~]# cat /etc/sysconfig/clock

ZONE="Asia/Shanghai"

CST=true

在地球環繞太陽旋轉的24個小時中,世界各地日出日落的時間是不一樣的.所以我們才有划分時區(timezone) 的必要,也就是把全球划分成24個不同的時區. 所以我們可以把時間的定義理解為一個時間的值加上所在地的時區(注意這個所在地可以精確到城市)

格林威治時間(GMT), 它也就是0時區時間. 但是我們在計算機中經常看到的是UTC. 它是Coordinated Universal Time的簡寫. 雖然可以認為UTC和GMT的值相等(誤差相當之小),但是UTC已經被認定為是國際標准,所以我們都應該遵守標准只使用UTC

那么假如現在中國當地的時間是晚上8點的話,我們可以有下面兩種表示方式
20:00 CST
12:00 UTC

這里的CST是Chinese Standard Time,也就是我們通常所說的北京時間了. 因為中國處在UTC+8時區

如果時區設置錯了,你看到的日志時間也不正確了。

補充:

CST同時可以代表如下 4 個不同的時區:

Central Standard Time (USA) UT-6:00

Central Standard Time (Australia) UT+9:30

China Standard Time UT+8:00

Cuba Standard Time UT-4:00

可見,CST可以同時表示美國,澳大利亞,中國,古巴四個國家的標准時間。

 

2、ntp的配置

  1. #cat  /etc/ntp.conf  

  2. restrict default kod nomodify notrap nopeer noquery 

  3. restrict -6 default kod nomodify notrap nopeer noquery 

  4. restrict 11.107.13.100                         //允許該NTP服務器進入

  5. restrict 11.80.81.1                            //沒有任何何參數的話,這表示『該IP或網段不受任何限制』

  6. restrict 202.112.1.199 

  7. restrict 127.0.0.1  

  8. restrict -6 ::1 

  9. restrict 192.168.0.0 mask 255.255.0.0 nomodify  //該網段可以進行校時

  10. restrict 0.0.0.0 mask 0.0.0.0 notrust           //拒絕沒有認證的用戶端

  11. server time-nw.nist.gov prefer                  //prefer 該服務器優先

  12. server 0.rhel.pool.ntp.org  iburst        //設定時間服務器

  13. server 1.rhel.pool.ntp.org  iburst

  14. server 2.rhel.pool.ntp.org  iburst

  15. fudge   127.127.1.0 stratum 6  

  16. driftfile /var/lib/ntp/drift 

  17. keys /etc/ntp/keys 

  18. broadcastdelay 0.008

 

上邊只是簡單設置,沒有考慮安全方面如認證等等。

權限管理使用 restrict 公式如下:
restrict IP mask [參數] / restrict 192.168.0.0 mask 255.255.0.0 nomodify

其中參數主要有底下這些:

    * ignore:拒絕所有類型的NTP的連線;
    * nomodfiy:用戶端不能使用NTPC與ntpq這兩支程式來修改伺服器的時間參數,但使用者端仍可透過這部主機來進行網路校時的;
    * noquery:用戶端不能夠使用ntpq,NTPC等指令來查詢發表伺服器,等於不提供的NTP的網路校時冪;
    * notrap:不提供陷阱這個遠端事件郵箱(遠程事件日志)的功能。
    * notrust:拒絕沒有認證的用戶端。

配置文件中的driftfile是什么?
我們每一個system clock的頻率都有小小的誤差,這個就是為什么機器運行一段時間后會不精確. NTP會自動來監測我們時鍾的誤差值並予以調整.但問題是這是一個冗長的過程,所以它會把記錄下來的誤差先寫入driftfile.這樣即使你重新開機以后之前的計算結果也就不會丟失了。

 

最后,別忘了啟動NTP服務器

/etc/init.d/ntp start

[root@localhost ~]# chkconfig ntpd on #在運行級別2、3、4、5上設置為自動運行

[root@localhost ~]# chkconfig --list ntpd

ntpd 0:off 1:off 2:on 3:on 4:on 5:on 6:off

 

查看ntp服務器有無和上層ntp連通

 

[root@localhost ~]# ntpstat
synchronised to NTP server (192.168.7.49) at stratum 6
   time correct to within 440 ms
   polling server every 128 s
[root@localhost ~]#

查看ntp服務器與上層ntp的狀態

[root@localhost ~]# watch ntpq -p
     remote           refid      st t when poll reach   delay   offset  jitter
==============================================================================
 192.168.7.49    192.168.7.50     5 u   13   64    3    5.853  1137178   2.696

3、ntpd的配置

配置/etc/sysconfig/ntpd文件

ntp服務,默認只會同步系統時間。如果想要讓ntp同時同步硬件時間,可以設置/etc/sysconfig/ntpd文件,在/etc/sysconfig/ntpd文件中,添加 SYNC_HWCLOCK=yes 這樣,就可以讓硬件時間與系統時間一起同步。

#允許BIOS與系統時間同步,也可以通過hwclock -w 命令

SYNC_HWCLOCK=yes

# Drop root to id 'ntp:ntp' by default.

OPTIONS="-x -u ntp:ntp -p /var/run/ntpd.pid -g"

有時會在messages日志里看到NTP進程正在做DELETING動作,不過NTP進程並不會真正刪除虛擬網絡接口,但這個動作會造成網絡短暫不通。紅帽官方有個對應的解決辦法是:

就是在這個文件里增加-L參數。

還有-x和-g參數:

ntpd服務的方式,又有兩種策略,一種是平滑、緩慢的漸進式調整(adjusts the clock in small steps所謂的微調);一種是步進式調整(跳躍式調整)。兩種策略的區別就在於,微調方式在啟動NTP服務時加了個“-x”的參數,而默認的是不加“-x”參數。

 

假如使用了-x選項,那么ntpd只做微調,不跳躍調整時間,但是要注意,-x參數的負作用:當時鍾差大的時候,同步時間將花費很長的時間。-x也有一個閾值,就是600s,當系統時鍾與標准時間差距大於600s時,ntpd會使用較大“步進值”的方式來調整時間,將時鍾“步進”調整到正確時間。

 

假如不使用-x選項,那么ntpd在時鍾差距小於128ms時,使用微調方式調整時間,當時差大於128ms時,使用“跳躍”式調整。

 

這兩種方式都會在本地時鍾與遠端的NTP服務器時鍾相差大於1000s時,ntpd會停止工作。在啟動NTP時加了參數“-g”就可以忽略1000S的問題。

 

4、時間同步

利用crontab可以讓LINUX NTP定時更新時間
注:讓linux運行ntpdate更新時間時,linux不能開啟NTP服務,否則會提示端口被占用:如下
[root@ESXI ~]# ntpdate 1.rhel.pool.ntp.org                                 
20 May 09:34:14 ntpdate[6747]: the NTP socket is in use, exiting

 

如果想定時進行時間校准,可以使用crond服務來定時執行。
編輯 /etc/crontab 文件
加入下面一行:

30 8 * * * root /usr/sbin/ntpdate 192.168.0.1; /sbin/hwclock -w    #192.168.0.1是NTP服務器的IP地址
然后重啟crond服務
service crond restart 
這樣,每天 8:30 Linux 系統就會自動的進行網絡時間校准。

 

如果是WINDOWS ,則需要打開windows time服務和RPC的二個服務
如果在打開windows time 服務,時報 錯誤1058,進行下面操作 
1.運行 cmd 進入命令行,然后鍵入
w32tm /register  進行注冊
正確的響應為:W32Time 成功注冊。

2.如果上一步正確,用 net start "windows time" 或 net start w32time 啟動服務。



5、linux的硬件時間

Linux硬件時間的設置

    硬件時間的設置,可以用hwclock或者clock命令。其中,clock和hwclock用法相近,只用一個就 行,只不過clock命令除了支持x86硬件體系外,還支持Alpha硬件體系。

//查看硬件時間 可以是用 hwclock ,hwclock --show 或者 hwclock -r

[root@localhost ~]# hwclock --show
2008年12月12日 星期五 06時52分07秒  -0.376932 seconds

//設置硬件時間

[root@localhost ~]# hwclock --set --date="1/25/09 00:00" <== 月/日/年時:分:秒
[root@localhost ~]# hwclock
2009年01月25日 星期日 00時00分06秒  -0.870868 seconds

 

幾個參數和命令:

ntpq -p顯示結果中的offset

本地時間+offset=遠程時間, 因此如果offset為負數, 則本地時鍾比遠程快. offset值0-500,接近0是正常的。
  
運行ntpq -c asso, 如果顯示sys.peer則已經處於同步狀態了.

wKiom1iZjY2CK08jAAAh2Z8h7-k471.jpg

 

使用以下命令檢查ntp的版本: # ntpq -c version 

 

 

錯誤問題處理

用於收集安裝,配置和應用中出現的問題

錯誤1:ntpdate -u ip -> no server suitable for synchronization found

判斷:在ntp客戶端用ntpdate –d serverIP查看,發現有“Server dropped: strata too high”的錯誤,並且顯示“stratum 16”。而正常情況下stratum這個值得范圍是“0~15”。

原因:NTP server還沒有和其自身或者它的server同步上。在ntp server上重新啟動ntp服務后,ntp server自身或者與其server的同步的需要一個時間段,這個過程可能是5分鍾,在這個時間之內在客戶端運行ntpdate命令時會產生no server suitable for synchronization found的錯誤。

處理:等待幾分鍾后,重試一般解決。

其它造成無法成功更新的原因:
1、客戶端的日期必須要設置正確,不能超出正常時間24小時,不然會因為安全原因被拒絕更新。其次客戶端的時區必須要設置好,以確保不會更新成其它時區的時間。
2、fudge 127.127.1.0 stratum 10 如果是LINUX做為NTP服務器,stratum(層級)的值不能太大,如果要向上級NTP更新可以設成2
3、LINUX的NTP服務器必須記得將從上級NTP更新的時間從系統時間寫到硬件里去 hwclock --systohc 
     NTP一般只會同步system clock. 但是如果我們也要同步RTC(hwclock)的話那么只需要把下面的選項打開就可以了
      代碼:
      # vi /etc/sysconfig/ntpd
      SYNC_HWCLOCK=yes
4、Linux如果開啟了NTP服務,則不能手動運行ntpdate更新時間(會報端口被占用),它只能根據/etc/ntp.conf 里server 字段后的服務器地址按一定時間間隔自動向上級NTP服務器更新時間。可以運行命令 ntpstat 查看每次更新間隔如:
[root@ESXI ~]# ntpstat
synchronised to NTP server (210.72.145.44) at stratum 2    #本NTP服務器層次為2,已向210.72.145.44 NTP同步過
   time correct to within 93 ms                                               #時間校正到相差93ms之內
   polling server every 1024 s                                                 #每1024秒會向上級NTP輪詢更新一次時間

補充:

ntpd、ntpdate的區別

下面是網上關於ntpd與ntpdate區別的相關資料。如下所示所示:

使用之前得弄清楚一個問題,ntpd與ntpdate在更新時間時有什么區別。ntpd不僅僅是時間同步服務器,它還可以做客戶端與標准時間服務器進行同步時間,而且是平滑同步,並非ntpdate立即同步,在生產環境中慎用ntpdate,也正如此兩者不可同時運行。

時鍾的躍變,對於某些程序會導致很嚴重的問題。許多應用程序依賴連續的時鍾——畢竟,這是一項常見的假定,即,取得的時間是線性的,一些操作,例如數據庫事務,通常會地依賴這樣的事實:時間不會往回跳躍。不幸的是,ntpdate調整時間的方式就是我們所說的”躍變“:在獲得一個時間之后,ntpdate使用settimeofday(2)設置系統時間,這有幾個非常明顯的問題:

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

第二,這樣做不精確。一旦ntp服務器宕機,跟隨它的服務器也就會無法同步時間。與此不同,ntpd不僅能夠校准計算機的時間,而且能夠校准計算機的時鍾。

第三,這樣做不夠優雅。由於是跳變,而不是使時間變快或變慢,依賴時序的程序會出錯(例如,如果ntpdate發現你的時間快了,則可能會經歷兩個相同的時刻,對某些應用而言,這是致命的)。因而,唯一一個可以令時間發生跳變的點,是計算機剛剛啟動,但還沒有啟動很多服務的那個時候。其余的時候,理想的做法是使用ntpd來校准時鍾,而不是調整計算機時鍾上的時間。

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

ntpq –p 參數詳解

ntpq -p

remote              refid                    st      t when  poll  reach     delay     offset      jitter

==================================================================

*10.247.160.31 10.240.241.5     4      u 53       64   377      0.240     0.374      0.240

remote:響應這個請求的NTP服務器的名稱。

refid:NTP服務器使用的上一級ntp服務器。

st :remote遠程服務器的級別.由於NTP是層型結構,有頂端的服務器,多層的Relay Server再到客戶端.所以服務器從高到低級別可以設定為1-16.為了減緩負荷和網絡堵塞,原則上應該避免直接連接到級別為1的服務器的.

when: 上一次成功請求之后到現在的秒數。

poll : 本地機和遠程服務器多少時間進行一次同步(單位為秒).在一開始運行NTP的時候這個poll值會比較小,那樣和服務器同步的頻率也就增加了,可以盡快調整到正確的時間范圍,之后poll值會逐漸增大,同步的頻率也就會相應減小

reach:這是一個八進制值,用來測試能否和服務器連接.每成功連接一次它的值就會增加

delay:從本地機發送同步要求到ntp服務器的round trip time

offset:主機通過NTP時鍾同步與所同步時間源的時間偏移量,單位為毫秒(ms)。offset越接近於0,主機和ntp服務器的時間越接近

jitter:這是一個用來做統計的值.它統計了在特定個連續的連接數里offset的分布情況.簡單地說這個數值的絕對值越小,主機的時間就越精確

轉自:ntp服務的細節全解析


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM