本文介紹了時間伺服器常用的二種協議:SNTP和TIME,並就區域網路環境下Linux時間服務的設定進行了說明,最終實現整個區域網路環境下所有電腦時鐘的同步與校準。 1、什麼是網路時間服務
網路時間服務Net Time Service與網路檔案下載服務FTP、網路瀏覽服務WWW等一樣,是一種網路服務,提供網路時間服務的電腦叫網路時間伺服器。當然有些時間伺服器是純硬體結構的,通過GPS衛星資訊來擷取時間,其外觀與一台交換器相似,不在文本介紹之列。本文主要介紹一台電腦如何通過網路擷取上級時間伺服器提供的標準時間,再服務於本單位的區域網路,使一個單位的所有電腦都能與標準時間保持同步,時間誤差一般小於0.5秒。
TCP/IP協議中,用於同步時間的協議為NTP協議,它是由美國德拉瓦大學的David L. Mills教授於1985年提出,除了可以估算封包在網路上的往返延遲外,還可獨立地估算電腦時鐘偏差,從而實現在網路上的高精準度電腦校時,它是設計用來在Internet上使不同的機器能維持相同時間的一種通訊協議。時間伺服器(timeserver)是利用NTP的一種伺服器,通過它可以使網路中的電腦保持時間同步。
NTP是一個跨越廣域網路或區域網路的複雜的同步時間協議,它通常可獲得毫秒級的精度。
SNTP(Simple Network Time Protocol)是NTP的一個子集,目的是為了那些不需要NTP實現複雜性網路時間同步的主機。通常用於區域網路上的若干台主機通過互連網與其他的 NTP主機同步時鐘,接著再向區域網路內其他用戶端提供時間同步服務。SNTP一般使用UDP的123端號,Linux系統和Windows系統都支援它,是現在架設網路時間伺服器的主流協議。
Time Protocol (RFC-868)協議是一種較簡單的協議。此協議提供了一個獨立於網站的,機器可讀的日期和時間資訊。時間服務返回的是從1900年1月1日午夜到現在的秒數。該協議通過TCP或UDP的37連接埠提供服務。Linux下的TIME服務提供該服務,Windows系統中較少使用。
現在網上的許多時間校準軟體,有些支援SNTP協議、有些支援TIME協議,有些二者都支援,我們在選擇時要特別注意。另外在Windows系統的對等網中,還有使用 “net time 機器名 /set /yes”命令使用netbios協議進行時間校準,由於這種方法不支援混合網路和跨網段網路,本文也不特別介紹。
2、時間伺服器有何用
也許有人認為電腦的時鐘有點誤差影響不大,其實這是非常錯誤的。電腦系統中的檔案儲存、檔案傳輸、電子郵箱中的時間戳記都是以電腦時鐘為準的。如果今後我們想進行檔案尋找、日誌查詢,如果系統時鐘不準,或同一網路中的電腦時間不同步,將給後續工作帶有許多麻煩。現在許多備份軟體、編譯軟體、FTP工具都是以檔案儲存時間為依據進行比較的,如果時間不統一,將使這些軟體難以正常工作。
3、需要做伺服器時間同步的各種情況:
3.1、伺服器可串連外網時時間同步:
一般企業中,能串連外網的伺服器不多,但是如果能串連到外網,我們那可以比較簡單的實現時間同步:
# crontab -e
加入一行:
*/1 * * * * ntpdate 210.72.145.44
210.72.145.44 為中國國家授時中心伺服器位址,這樣該機每隔1分重就可以與國家授時中心進行同步了。
注意: 在使用ntpdate 命令時, ntpd 服務必須是關閉的, 否則會報the NTP socket is in use, exiting 錯誤。
關閉 ntpd 服務命令如下:
[root@node2 init.d]# /etc/init.d/ntpd stop
Shutting down ntpd: [ OK ]
建議啟動 NTP服務後,先用date命令手工校正一下時間,以後系統會自動與互連網上的主時間伺服器保持同步。ntp服務還有一個好處,如果當前系統的時間與標準時間有所誤差,它不是馬上把時間校正,而是逐步縮小與標準時間的誤差,以免系統內部出現時間突變。
3.2、伺服器不可以串連外網時時間同步
以下分Linux為例介紹,而且只介紹sntp服務的架設,timeserver服務和netbios對時服務由於應用很少,不做介紹。
3.2.1、安裝ntp對應rpm
檢查是否已經安裝有ntp軟體包。輸入“rpm -qa|grep ntp”,如果已經安裝應該顯示“ntp-4.1.2-0.rc1”。
[root@rac1 ~]# rpm -qa|grep ntp
ntp-4.2.2p1-9.el5_4.1
安如果沒有裝ntp軟體,從linux安裝盤的Server檔案夾中找rpm包,輸入“rpm -ivh ntp-xxx.rpm”執行安裝。
或者通過yum直接安裝,更方便。
3.2.2、配置ntp.conf檔案 搭建內網時間伺服器
配置ntp服務。備份原/etc/ntp.conf檔案,vi /etc/ntp.conf:
①、第一種配置:允許任何IP的客戶機都可以進行時間同步
#restrict default kod nomodify notrap nopeer noquery
restrict default modify notrap②、第二種配置:只允許192.168.2.0網段的客戶機進行時間同步
在restrict default nomodify notrap noquery(表示預設拒絕所有IP的時間同步)之後增加一行:
restrict 192.168.2.0 mask 255.255.255.0 nomodify notrap
在最後添加如下內容
server 127.127.1.0 # local clock
server 192.168.0.100 #這是原生ip地址,所有本機房內的伺服器都可以ping通這個機器,來做時間同步。
3.2.3、啟動ntp服務:
輸入“service ntpd restart”。
為了保證以後Linux機啟動後ntp服務能自動啟動,還要輸入“chkconfig ntpd on”。
ntpd啟動後,客戶機要等幾分鐘再與其進行時間同步,否則會提示“no server suitable forsynchronization found”錯誤。
3.2.4、客戶機與時間伺服器同步:
其實在上面介紹Linux系統中的ntp服務時,已經提到ntp時間服務時同時也是一個時間服務的用戶端,只要把/etc/ntp.conf檔案中的 “server pool.ntp.org”改為“server 內部時間伺服器IP地址”即可。如不想使用ntp服務,也可使用ntp軟體包中帶來的ntpdate命令,只要手工執行“ntpdate 時間伺服器IP地址”即可。如想每天自動對時,可以把這條命令放在cron中,注意在同一台電腦上ntp服務與ntpdate命令不能同時使用。
# ntpdate -u 192.168.0.100
直接執行此命令做同步,可以通過crontab 設定定時計劃,每分鐘同步一次:
*/1 * * * * ntpdate -u 192.168.0.100
附:
啟動/關閉/重啟NTP的命令:
# /etc/init.d/ntpd start
# /etc/init.d/ntpd stop
# /etc/init.d/ntpd restart
#service ntpd restart
將同步好的時間寫到CMOS裡
vi /etc/sysconfig/ntpd
SYNC_HWCLOCK=yes
每次修改了設定檔後都需要重新啟動服務來使配置生效。
可以使用下面的命令來檢查NTP服務是否啟動,你應該可以得到一個進程ID號:
# pgrep ntpd
使用下面的命令檢查時間伺服器同步的狀態:
# ntpq -p
用ntpstat 也可以查看一些同步狀態,用netstat -ntlup查看連接埠使用方式。
安裝完畢用戶端需過5-10分鐘才能從伺服器端更新時間。
相關配置參數說明:
# restrict許可權控制文法為:
# restrict IP mask netmask_IP parameter
# 其中 IP 可以是軟體地址,也可以是 default ,default 就類似 0.0.0.0 咯。
# 至於 paramter 則有:
# ignore :關閉所有的 NTP 線上服務
# nomodify:表示 Client 端不能更改 Server 端的時間參數,不過,
# Client 端仍然可以透過 Server 端來進行網路校時。
# notrust :該 Client 除非通過認證,否則該 Client 來源將被視為不信任網域
# noquery :不提供 Client 端的時間查詢
# 如果 paramter 完全沒有設定,那就表示該 IP (或網域) 『沒有任何限制。』
# 設定上層主機主要以 server這個參數來設定,文法為:
# server [IP|FQDN] [prefer]
# Server 後面接的就是我們上層 Time Server 囉。而如果 Server 參數
# 後面加上 perfer 的話,那表示我們的 NTP 主機主要以該部主機來作為
# 時間校正的對應。另外,為瞭解決更新時間封包的傳送延遲動作,