關(guān)于客戶端服務(wù)器時(shí)間同步和設(shè)備時(shí)間同步的問題,以下是詳細(xì)的分析:
1、客戶端服務(wù)器時(shí)間同步
同步方案:在客戶端開發(fā)中,為了保證功能的準(zhǔn)確性,需要獲取當(dāng)前最準(zhǔn)確的時(shí)間,由于客戶端環(huán)境的多樣性,直接在客戶端設(shè)備上獲取的時(shí)間可能不準(zhǔn)確,需要從服務(wù)器同步時(shí)間。
同步方法:一種簡(jiǎn)單的方法是在客戶端初始化時(shí)拉取一次時(shí)間接口,記為server_init_time,同時(shí)獲取客戶端的當(dāng)前時(shí)間,記為local_init_time,當(dāng)需要獲取準(zhǔn)確時(shí)間時(shí),先得到客戶端的當(dāng)前時(shí)間,記為local_now_time,然后通過計(jì)算兩次本地時(shí)間的差值,推出當(dāng)前服務(wù)器的時(shí)間。
網(wǎng)絡(luò)時(shí)延損耗:上述方案假設(shè)server_init_time和local_init_time是同一時(shí)刻,但實(shí)際上并不是,需要考慮網(wǎng)絡(luò)時(shí)延的影響,可以通過假設(shè)客戶端發(fā)出請(qǐng)求到服務(wù)器的時(shí)間與服務(wù)器回復(fù)請(qǐng)求到客戶端的時(shí)間基本一致來減少誤差。
防止時(shí)間改變:如果在軟件運(yùn)行期間,客戶端的時(shí)間發(fā)生了變化,上述方案將會(huì)失效,需要一個(gè)不隨本地時(shí)間變化的維度作為校對(duì)的標(biāo)準(zhǔn),例如開機(jī)時(shí)長(zhǎng)。
2、設(shè)備時(shí)間同步
NTP協(xié)議:NTP(Network Time Protocol)是一種應(yīng)用層協(xié)議,用于同步客戶端和服務(wù)器之間的時(shí)鐘,提供高精準(zhǔn)度的時(shí)間校正,NTP服務(wù)器從權(quán)威時(shí)鐘源(如原子鐘、GPS)接收精確的協(xié)調(diào)世界時(shí)UTC,客戶端再從服務(wù)器請(qǐng)求和接收時(shí)間。
NTP同步原理:NTP基于UDP報(bào)文進(jìn)行傳輸,使用的UDP端口號(hào)為123,NTP客戶端首先向服務(wù)端發(fā)送一個(gè)NTP請(qǐng)求報(bào)文,其中包含了該報(bào)文離開客戶端的時(shí)間戳t1,NTP請(qǐng)求報(bào)文到達(dá)NTP服務(wù)器,此時(shí)NTP服務(wù)器的時(shí)刻為t2,當(dāng)服務(wù)端接收到該報(bào)文時(shí),NTP服務(wù)器處理之后,于t3時(shí)刻發(fā)出NTP應(yīng)答報(bào)文,該應(yīng)答報(bào)文中攜帶報(bào)文離開NTP客戶端時(shí)的時(shí)間戳t1、到達(dá)NTP服務(wù)器時(shí)的時(shí)間戳t2、離開NTP服務(wù)器時(shí)的時(shí)間戳t3;客戶端在接收到響應(yīng)報(bào)文時(shí),記錄報(bào)文返回的時(shí)間戳t4,客戶端用上述4個(gè)時(shí)間戳參數(shù)就能夠計(jì)算出2個(gè)關(guān)鍵參數(shù):NTP報(bào)文從客戶端到服務(wù)器的往返延遲delay和客戶端與服務(wù)端之間的時(shí)間差offset,根據(jù)方程組可以解得時(shí)間差為:NTP客戶端根據(jù)計(jì)算得到的offset來調(diào)整自己的時(shí)鐘,實(shí)現(xiàn)與NTP服務(wù)器的時(shí)鐘同步。
NTP服務(wù)器配置:NTP服務(wù)器的配置文件是ntp.conf,可以通過編輯該文件來配置NTP服務(wù)器,可以開啟ntp log記載,刪除語句statsdir /var/log/ntpstats/前的注釋符#,找到pool ntp.ubuntu.com,輸入注釋符#進(jìn)行注釋,添加語句restrict 192.168.0.1 mask 255.255.255.0 nomodify等。
Linux下的時(shí)間同步:在Linux下,系統(tǒng)時(shí)間和硬件時(shí)間并不會(huì)自動(dòng)同步,可以使用hwclock命令查看硬件時(shí)間,讓系統(tǒng)時(shí)間和硬件時(shí)間的同步,使用hwclock systohc命令以系統(tǒng)時(shí)間同步硬件時(shí)間,使用hwclock w命令以硬件時(shí)間同步系統(tǒng)時(shí)間。
NTP服務(wù)的安裝和啟動(dòng):在Linux系統(tǒng)下,可以使用yum install y ntp命令安裝ntp服務(wù),使用systemctl start ntpd命令啟動(dòng)ntp服務(wù),使用systemctl enable ntpd命令將ntp服務(wù)加入開機(jī)自啟動(dòng)。
定時(shí)任務(wù)里的時(shí)間同步:可以在定時(shí)任務(wù)里添加相關(guān)命令來實(shí)現(xiàn)定期同步時(shí)間,在crontab中添加每天的12點(diǎn)同步時(shí)間的命令:0 12 * * * /usr/sbin/ntpdate 192.168.1.1。
客戶端服務(wù)器時(shí)間同步和設(shè)備時(shí)間同步是保證系統(tǒng)中各個(gè)設(shè)備和服務(wù)器之間時(shí)間一致性的重要手段,通過從服務(wù)器同步時(shí)間和使用NTP協(xié)議,可以有效地解決客戶端和設(shè)備時(shí)間不準(zhǔn)確的問題,需要注意網(wǎng)絡(luò)時(shí)延的影響以及防止客戶端時(shí)間被修改的情況,在Linux系統(tǒng)下,可以通過配置ntp.conf文件和使用定時(shí)任務(wù)來實(shí)現(xiàn)時(shí)間同步。