為什麼ntp比實際時間快
Ⅰ 【NTP】NTP(Network Time Protocol)配置詳解
設置NTP伺服器不難,但是NTP本身是一個很復雜的協議. 這里我們只是簡要地介紹一下實踐方法。
如果有人問你說現在幾點? 你看了看錶回答他說晚上8點了. 這樣回答看上去沒有什麼問題,但是如果問你的這個人在歐洲的話那麼你的回答就會讓他很疑惑,因為他那裡還太陽當空呢。
這里就有產生了一個如何定義時間的問題. 因為在地球環繞太陽旋轉的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時區,依次類推那麼也就是12:00 UTC了。
為什麼要說這些呢?
第一,不管通過任何渠道我們想要同步系統的時間,通常提供方只會給出UTC+0的時間值而不會提供時區(因為它不知道你在哪裡).所以當我們設置系統時間的時候,設置好時區是首先要做的工作。
第二,很多國家都有夏令時,那就是在一年當中的某一天時鍾撥快一小時(比如從UTC+8一下變成UTC+9了),那麼同理到時候還要再撥慢回來.如果我們設置了正確的時區,當需要改變時間的時候系統就會自動替我們調整。
現在我們就來看一下如何在Linux下設置時區,也就是time zone
在Linux下glibc提供了我們事先編譯好的許多timezone文件, 他們就放在/usr/share/zoneinfo這個目錄下,這里基本涵蓋了大部分的國家和城市
# ls -F /usr/share/zoneinfo
在這裡面我們就可以找到自己所在城市的time zone文件. 那麼如果我們想查看對於每個time zone當前的時間我們可以用zmp命令
# zmp Shanghai
Shanghai Mon Apr 23 17:54:12 2018 Shanghai
那麼我們又怎麼來告訴系統我們所在time zone是哪個呢?
方法有很多,這里舉出兩種:
第一個就是修改/etc/localtime這個文件,這個文件定義了我么所在的local time zone.
我們可以在/usr/share/zoneinfo下找到我們的time zone文件然後軟鏈接去到/etc/localtimezone
# ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
第二種方法也就設置TZ環境變數的值. 許多程序和命令都會用到這個變數的值. TZ的值可以有多種格式,最簡單的設置方法就是使用tzselect命令
# tzselect
# TZ='Asia/Shanghai'; export TZ
You can make this change permanent for yourself by appending the line
TZ='Asia/Shanghai'; export TZ
to the file '.profile' in your home directory; then log out and log in again.
Here is that TZ value again, this time on standard output so that you
can use the /usr/bin/tzselect command in shell scripts:
Asia/Shanghai
通過這兩個例子我們也可以發現TZ變數的值會override /etc/localtime. 也就是說當TZ變數沒有定義的時候系統才使用/etc/localtime來確定time zone. 所以你想永久修改time zone的話那麼可以把TZ變數的設置寫入/etc/profile里!
說道設置時間這里還要明確另外一個概念就是在一台計算機上我們有兩個時鍾:
一個稱之為硬體時間時鍾(RTC),還有一個稱之為系統時鍾(System Clock)
硬體時鍾是指嵌在主板上的特殊的電路, 它的存在就是平時我們關機之後還可以計算時間的原因
系統時鍾就是操作系統的kernel所用來計算時間的時鍾. 它從1970年1月1日00:00:00 UTC時間到目前為止秒數總和的值
在Linux下系統時間在開機的時候會和硬體時間同步(synchronization),之後也就各自獨立運行了
那麼既然兩個時鍾獨自運行,那麼時間久了必然就會產生誤差了,下面我們來看一個例子:
# date
Fri Jul 6 00:27:13 BST 2007
# hwclock --show
Fri 06 Jul 2007 12:27:17 AM BST -0.968931 seconds
通過hwclock --show 命令我們可以查看機器上的硬體時間(always in local time zone), 我們可以看到它和系統時間還是有一定的誤差的, 那麼我們就需要把他們同步。
如果我們想要把硬體時間設置成系統時間我們可以運行以下命令
# hwclock --hctosys
反之,我們也可以把系統時間設置成硬體時間
# hwclock --systohc
那麼如果想設置硬體時間我們可以開機的時候在BIOS里設定.也可以用hwclock命令
# hwclock --set --date="mm/dd/yy hh:mm:ss"
如果想要修改系統時間那麼用date命令就最簡單了
# date -s "dd/mm/yyyy hh:mm:ss"
現在我們知道了如何設置系統和硬體的時間. 但問題是如果這兩個時間都不準確了怎麼辦?
那麼我們就需要在互聯網上找到一個可以提供我們准確時間的伺服器然後通過一種協議來同步我們的系統時間,那麼這個協議就是NTP了. 注意接下去我們所要說的同步就都是指系統時間和網路伺服器之間的同步了!
其實這個標題應該改為設置"NTP Relay Server"前的准備更加合適. 因為不論我們的計算機配置多好運行時間久了都會產生誤差,所以不足以給互聯網上的其他伺服器做NTP Server. 真正能夠精確地測算時間的還是原子鍾. 但由於原子鍾十分的昂貴,只有少部分組織擁有, 他們連接到計算機之後就成了一台真正的NTP Server. 而我們所要做的就是連接到這些伺服器上同步我們系統的時間,然後把我們自己的伺服器做成NTP Relay Server再給互聯網或者是區域網內的用戶提供同步服務。
# yum -y install ntp
那麼第一步我們就要找到在互聯網上給我們提供同步服務的NTP Server
http://www.pool.ntp.org 是NTP的官方網站,在這上面我們可以找到離我們城市最近的NTP Server.
NTP建議我們為了保障時間的准確性,最少找兩個個NTP Server
那麼比如在英國的話就可以選擇下面兩個伺服器
0.uk.pool.ntp.org
1.uk.pool.ntp.org
它的一般格式都是 number.country.pool.ntp.org
第二步要做的就是在打開NTP伺服器之前先和這些伺服器做一個同步,使得我們機器的時間盡量接近標准時間.
這里我們可以用ntpdate命令手動更新時間
# ntpdate 0.uk.pool.ntp.org
6 Jul 01:21:49 ntpdate[4528]: step time server 213.222.193.35 offset -38908.575181 sec
# ntpdate 0.pool.ntp.org
6 Jul 01:21:56 ntpdate[4530]: adjust time server 213.222.193.35 offset -0.000065 sec
假如你的時間差的很離譜的話第一次會看到調整的幅度比較大,所以保險起見可以運行兩次. 那麼為什麼在打開NTP服務之前先要手動運行同步呢?
1. 因為根據NTP的設置,如果你的系統時間比正確時間要快的話那麼NTP是不會幫你調整的,所以要麼你把時間設置回去,要麼先做一個手動同步
2. 當你的時間設置和NTP伺服器的時間相差很大的時候,NTP會花上較長一段時間進行調整.所以手動同步可以減少這段時間
現在我們就來創建NTP的配置文件了, 它就是/etc/ntp.conf. 我們只需要加入上面的NTP Server和一個driftfile就可以了
# vi /etc/ntp.conf
#############################
server 210.72.145.44 #中國國家授時中心的IP
server 0.uk.pool.ntp.org
server 1.uk.pool.ntp.org
fudge 127.127.1.0 stratum 0
這行是時間伺服器的層次。設為0則為頂級,如果要向別的NTP伺服器更新時間,請不要把它設為0
driftfile /var/lib/ntp/ntp.drift
##############################
我們就啟動NTP Server,並且設置其在開機後自動運行
# systemctl start ntpd
# systemctl enable ntpd
現在我們已經啟動了NTP的服務,但是我們的系統時間到底和伺服器同步了沒有呢?
為此NTP提供了一個很好的查看工具: ntpq (NTP query)
我建議大家在打開NTP伺服器後就可以運行ntpq命令來監測伺服器的運行.
這里我們可以使用watch命令來查看一段時間內伺服器各項數值的變化
# watch ntpq -p
Every 2.0s: ntpq -p Sat Jul 7 00:41:45 2007
remote refid st t when poll reach delay offset jitter
===========================================================
+193.60.199.75 193.62.22.98 2 u 52 64 377 8.578 10.203 289.032
*mozart.musicbox 192.5.41.41 2 u 54 64 377 19.301 -60.218 292.411
現在我就來解釋一下其中的含義
remote: 它指的就是本地機器所連接的遠程NTP伺服器
refid: 它指的是給遠程伺服器(e.g. 193.60.199.75)提供時間同步的伺服器
st: 遠程伺服器的層級別(stratum). 由於NTP是層型結構,有頂端的伺服器,多層的Relay Server再到客戶端. 所以伺服器從高到低級別可以設定為1-16. 為了減緩負荷和網路堵塞,原則上應該避免直接連接到級別為1的伺服器的.
when: 我個人把它理解為一個計時器用來告訴我們還有多久本地機器就需要和遠程伺服器進行一次時間同步
poll: 本地機和遠程伺服器多少時間進行一次同步(單位為秒). 在一開始運行NTP的時候這個poll值會比較小,那樣和伺服器同步的頻率也就增加了,可以盡快調整到正確的時間范圍.之後poll值會逐漸增大,同步的頻率也就會相應減小
reach: 這是一個八進制值,用來測試能否和伺服器連接.每成功連接一次它的值就會增加
delay: 從本地機發送同步要求到伺服器的round trip time
offset: 這是個最關鍵的值, 它告訴了我們本地機和伺服器之間的時間差別. offset越接近於0,我們就和伺服器的時間越接近
jitter: 這是一個用來做統計的值. 它統計了在特定個連續的連接數里offset的分布情況. 簡單地說這個數值的絕對值越小我們和伺服器的時間就越精確
那麼大家細心的話就會發現兩個問題: 第一我們連接的是0.uk.pool.ntp.org為什麼和remote server不一樣? 第二那個最前面的+和*都是什麼意思呢?
第一個問題不難理解,因為NTP提供給我們的是一個cluster server所以每次連接的得到的伺服器都有可能是不一樣.
同樣這也告訴我們了在指定NTP Server的時候應該使用hostname而不是IP
第二個問題和第一個相關,既然有這么多的伺服器就是為了在發生問題的時候其他的伺服器還可以正常地給我們提供服務.那麼如何知道這些伺服器的狀態呢? 這就是第一個記號會告訴我們的信息
* 它告訴我們遠端的伺服器已經被確認為我們的主NTP Server,我們系統的時間將由這台機器所提供
+ 它將作為輔助的NTP Server和帶有*號的伺服器一起為我們提供同步服務. 當*號伺服器不可用時它就可以接管
- 遠程伺服器被 clustering algorithm 認為是不合格的NTP Server
x 遠程伺服器不可用
了解這些之後我們就可以實時監測我們系統的時間同步狀況了!
運行一個NTP Server不需要佔用很多的系統資源,所以也不用專門配置獨立的伺服器,就可以給許多client提供時間同步服務, 但是一些基本的安全設置還是很有必要的
那麼這里一個很簡單的思路就是第一我們只允許區域網內一部分的用戶連接到我們的伺服器. 第二個就是這些client不能修改我們伺服器上的時間
關於許可權設定部分
許可權的設定主要以 restrict 這個參數來設定,主要的語法為:
restrict IP地址 mask 子網掩碼 參數
其中 IP 可以是IP地址,也可以是 default ,default 就是指所有的IP
參數有以下幾個:
ignore:關閉所有的 NTP 聯機服務
nomodify:客戶端不能更改服務端的時間參數,但是客戶端可以通過服務端進行網路校時。
notrust :客戶端除非通過認證,否則該客戶端來源將被視為不信任子網
noquery :不提供客戶端的時間查詢
注意:如果參數沒有設定,那就表示該 IP (或子網)沒有任何限制!
在/etc/ntp.conf文件中我們可以用restrict關鍵字來配置上面的要求
首先我們對於默認的client拒絕所有的操作
restrict default kod nomodify notrap nopeer noquery
然後允許本機地址一切的操作
restrict 127.0.0.1
最後我們允許區域網內所有client連接到這台伺服器同步時間.但是拒絕讓他們修改伺服器上的時間
restrict 192.168.1.0 mask 255.255.255.0 nomodify
把這三條加入到/etc/ntp.conf中就完成了我們的簡單配置. NTP還可以用key來做authentication,這里就不詳細介紹了。
做到這里我們已經有了一台自己的Relay Server.如果我們想讓區域網內的其他client都進行時間同步的話那麼我們就都應該照樣再搭建一台Relay Server,然後把所有的client都指向這兩台伺服器(注意不要把所有的client都指向Internet上的伺服器). 只要在client的/etc/ntp.conf加上這你自己的伺服器就可以了。
server ntp1.leonard.com
server ntp2.leonard.com
1. 配置文件中的driftfile是什麼?
我們每一個system clock的頻率都有小小的誤差,這個就是為什麼機器運行一段時間後會不精確. NTP會自動來監測我們時鍾的誤差值並予以調整.但問題是這是一個冗長的過程,所以它會把記錄下來的誤差先寫入driftfile.這樣即使你重新開機以後之前的計算結果也就不會丟失了。
2. 如何同步硬體時鍾?
NTP一般只會同步system clock. 但是如果我們也要同步RTC(hwclock)的話那麼只需要把下面的選項打開就可以了
# vi /etc/sysconfig/ntpd
SYNC_HWCLOCK=yes
3、利用crontab讓LINUX NTP定時更新時間
註:讓linux運行ntpdate更新時間時,linux不能開啟NTP服務,否則會提示埠被佔用:
# ntpdate 1.rhel.pool.ntp.org
20 May 09:34:14 ntpdate[6747]: the NTP socket is in use, exiting
crontab文件配置簡要說明
命令格式的前一部分是對時間的設定,後面一部分是要執行的命令。時間的設定我們有一定的約定,前面五個*號代表五個數字,數字的取值范圍和含義如下:
分鍾(0-59)
小時(0-23)
日期(1-31)
月份(1-12)
星期(0-6)//0代表星期天
除了數字還有幾個個特殊的符號就是「*」、「/」和「-」、「,」,「*」代表所有的取值范圍內的數字,「/」代表每的意思,「*/5」表示每5個單位,「-」代表從某個數字到某個數字,「,」分開幾個離散的數字。
以下舉幾個例子說明問題:
每天早上6點:
0 6 * * * command
每兩個小時:
0 */2 * * * command
晚上11點到早上8點之間每兩個小時,早上八點:
0 23-7/2,8 * * * command
每個月的4號和每個禮拜的禮拜一到禮拜三的早上11點:
0 11 4 * 1-3 command
1月1日早上4點:
0 4 1 1 * command
3.3、設置開機自動啟動服務
運行setup或其它服務設置工具,將crond服務勾選上
# systemctl enable crond.service
一、LINUX做為客戶端自動同步時間
如果想定時進行時間校準,可以使用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 啟動服務。
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 查看每次更新間隔如:
# 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輪詢更新一次時間
這些問題主要涉及到NTP的層(stratum)的概念,頂層是1,值為0時表示層數不明,層的值是累加的,比如NTP授時方向是A-〉B-〉C,假設A的stratum值是3,那麼B從A獲取到時間,B的stratum置為4,C從B獲取到時間,C的值被置為5。一般只有整個NTP系統最頂層的伺服器stratum才設為1。
NTP同步的方向是從stratum值較小的節點向較大的節點傳播,如果某個NTP客戶端接收到stratum比自己還要大,那麼NTP客戶端認為自己的時間比接受到的時間更為精確,不會進行時間的更新。
對於大部分NTP軟體系統來說,服務啟動後,stratum值初始是0,一旦NTP服務獲取到了時間,NTP層次就設置為上級伺服器stratum+1。對於具備衛星時鍾、原子鍾的專業NTP設備,一般stratum值初始是1。
NTPD啟動後,stratum值初始是0,此時NTPD接收到NTP請求,回復stratum欄位為0的NTP包,客戶端接收後,發現stratum欄位無效,拒絕更新時間,造成時間更新失敗。
幾分鍾後,NTPD從上級伺服器獲取到了更新,設置了正確的stratum,回復stratum欄位為n+1的NTP包,客戶端接收後,確認stratum有效,成功進行時間更新。
在NTPD上級伺服器不可用的情況下,NTPD將本機時鍾服務模擬為一個上級NTP伺服器,地址使用環回127.127.1.0,服務啟動幾分鍾後,NTPD從127.127.1.0更新了時鍾,設置了有效的stratum,客戶端接收後,成功進行時間更新。
對應的/etc/ntp.conf配置項如下:
server 127.127.1.0
fudge 127.127.1.0 stratum 1
# NTPD把本地主機的時鍾也看作外部時鍾源來處理,分配的地址是127.127.1.0
# 設置本地時鍾源的層次為1,這樣如果NTPD服務從本地時鍾源獲取時間的話,NTPD對外宣布的時間層次為2。
https://blog.csdn.net/iloli/article/details/6431757
http://blog.163.com/little_yang@126/blog/static/2317559620091019104019991/
Ⅱ 網路時間協議的NTP原理
NTP提供准確時間,首先要有準確的時間來源,這一時間應該是國際標准時間UTC。 NTP獲得UTC的時間來源可以是原子鍾 、天文台、衛星,也可以從Internet上獲取。這樣就有了准確而可靠的時間源。時間按NTP伺服器的等級傳播。按照離外部UTC 源的遠近將所有伺服器歸入不同的Stratum(層)中。Stratum-1在頂層,有外部UTC接入,而Stratum-2則從Stratum-1獲取時間,Stratum-3從Stratum-2獲取時間,以此類推,但Stratum層的總數限制在15以內。所有這些伺服器在邏輯上形成階梯式的架構相互連接,而Stratum-1的時間伺服器是整個系統的基礎。計算機主機一般同多個時間伺服器連接, 利用統計學的演算法過濾來自不同伺服器的時間,以選擇最佳的路徑和來源來校正主機時間。即使主機在長時間無法與某一時間伺服器相聯系的情況下,NTP服務依然有效運轉。為防止對時間伺服器的惡意破壞,NTP使用了識別(Authentication)機制,檢查來對時的信息是否是真正來自所宣稱的伺服器並檢查資料的返迴路徑,以提供對抗干擾的保護機制。NTP時間同步報文中包含的時間是格林威治時間,是從1900年開始計算的秒數。
Ⅲ 搭建的linux ntp伺服器設置210.72.245.44為時鍾源,伺服器同步後開始正常,一段時間後就會有幾分鍾差距
你是做的定時任務嗎?同步一次以後,時間長了,還會快或者慢,我們的好多伺服器都是做定時任務每天同步一次。
Ⅳ ntp時間與gps時間相差30秒 哪個准
在同樣鎖定衛星情況下,GPS時間更精準些,因為NTP時間顯示屏的時間顯示與接收衛星信號的模塊時間有延時差;北京創想京典科技發展有限公司生產的NTP設備時間與母鍾的時間精度很高!
Ⅳ 關於NTP,你需要知道的一切
NTP,是 Net Time Protocol 的縮寫,意即網路時間協議。
NTP是在分組交換、延遲時間可變的數據網路上進行時鍾同步的網路協議。
NTP由特拉華大學(University of Delaware)的David L. Mills設計。
說起來它的歷史相當長了,自1985年以來,NTP是目前仍在使用的最古老的互聯網協議之一。
NTP 只考慮 UTC 時間,不考慮時區,不考慮夏令時等。
NTP使用UDP,埠123。
NTP使用一種樹狀的,半分層的時間源系統。每一層叫做 stratum (見下圖)。每個 stratum 都有一個編號,從0開始,最大到15,16被用來標記設備未同步。
一般情況下,第 n+1 層 stratum 從第 n 層同步時間。
圖來自 WikiPedia
時間計算方式參考下圖,
時間偏移「θ」定義為:
往返延遲「δ」為:
其中:
t0 是請求數據包傳輸的客戶端時間戳,
t1 是請求數據包回復的伺服器時間戳,
t2 是響應數據包傳輸的伺服器時間戳,
t3 是響應數據包回復的客戶端時間戳。
圖來自 WikiPedia
別著急,下面我們看看這個值是如何計算出來的,小學數學知識就夠了。
t1,t2是屬於同一個時鍾的,因此它們的差值是有意義的,同理,t3,t0的差值也是有意義的。
t3 - t0 是數據包傳輸的全部時間,伺服器處理的時間是 t2 - t1 , 那麼 往返 網路傳輸時間就是
δ=(t3 - t0) - (t2 - t1) ,這個應該沒問題吧?(有問題請面壁思考1分鍾 🤣🤣🤣)
現在假設網路延遲是對稱的,那麼 單程 網路延時就是 δ/2 ,也就是 [(t3 - t0) - (t2 - t1)]/2 。
</br>
我假設你都理解了,那麼現在計算兩個時鍾的差值。(有問題請面壁思考10分鍾 🤣🤣🤣)。
現在假設這個差值為 θ
考慮從 t2 => t3 的過程,從伺服器t2時刻開始,經過網路延時( σ/2 ,單程延時),到達t3,但是t3是客戶端的時間, t3 + θ 對應的就是伺服器的時間,那麼它們應該是相等的。
t2 + σ/2 = t3 + θ ,計算 θ ,得到
這個計算就完成了。
例如上面圖中的 θ=(135 - 231 + 137 - 298)/2 = -(257/2) ,客戶端比伺服器快,時間是負值。
客戶端會同時請求好幾個伺服器,進行統計分析,過濾不合理的值,並從最好的三個剩餘候選中導出估算的時間偏移,然後調整時鍾頻率以逐漸減小偏移。
NTP在 CentOS上用的是 ntpd 服務,
ntpdate 使用的時候一定要先停止 ntpd.service 服務,它們不兼容 ,可以多次執行 ntpdate ,以盡快同步
微信: sunfriend
如果你覺得文章有用,請打賞,多少不限。家裡還有兒子需要我養活……
Ⅵ 計算機的時鍾(一):NTP 協議
本系列文章主要介紹計算機系統中時鍾的處理。主要內容包含NTP,Lamport邏輯時鍾,向量時鍾,TrueTime等。本文是第一篇,介紹NTP協議。
不知道你注意過沒有,假如隔了好幾天打開你的電腦,任務欄的時間依然是顯示正確的,即使你的電腦沒有聯網,這是如何做到的?
計算機的主板上有一個石英晶體振盪器和一個紐扣電池。石英晶體振盪器的頻率是32768Hz每秒。在通電的時候,石英晶體每振動32768次,電路就會傳出信息,表示1秒鍾到了,通過這種方式來記錄時間。但是石英晶體會有誤差,正常情況下,每天的計時誤差在正負1秒鍾。而且在極端溫度下,比如零下二十度,誤差會變大。
正是因為石英晶體誤差比較大,所以1985年特拉華大學的David L. Mills設計了網路時間協議NTP(Network Time Protocol)來同步不同計算機系統之間的時鍾。
NTP協議的目標是將所有計算機的時間同步到幾毫秒誤差內。實際上廣域網可以達到幾十毫秒的誤差,區域網誤差可以在1毫米內。NTP協議是一種主從式架構協議,使用分層的時鍾源系統,每一層稱為Stratum,階層的上限是15,階層16表示未同步設備。常見的階層如下:
參考(基準)時鍾,主要由高精度計時設備,比如銫或銣原子鍾、GPS時鍾、無線電時鍾。它們生成非常精確的脈沖信號,觸發計算機上的中斷和時間戳。
主時間伺服器,這些伺服器與階層0設備相連,在幾微秒誤差內同步系統時鍾。階層1伺服器之間可以互相連接,進行完整性檢查和備份。
這些計算機通過網路和階層1伺服器同步。每個計算機可以查詢多個階層1伺服器,階層2計算機之間也可以互相連接。
這些計算機與階層2的伺服器同步。
NTP協議的時鍾同步過程如下:
從上面的流程中可以很容易地計算出:
AB之間的網路往返時間RTT(Round Trip Time):δ = (T4 - T1) - (T3 - T2)
AB之間的時間偏移:θ = ( (T2 - T1) + (T3 - T4) ) / 2
推導過程:A從發送請求消息到收到響應的時間間隔是 T4 - T1,其中 T3 - T2 是B的處理時間,所以網路往返時間
δ = (T4 - T1) - (T3 - T2)。
假設A和B的時間偏差為θ,那麼 T3 - θ = T3`。
T4和T3` 的間隔是半個RTT:T4 - T3` = δ / 2
把T3`和δ代入上面這個等式,得到:θ = ( (T2 - T1) + (T3 - T4) ) / 2。
NTP協議使用UDP協議來傳輸,埠為123,報文格式如下:
各個欄位的含義如下:
NTP協議在廣域網可以達到幾十毫秒的誤差,區域網誤差可以在1毫米內。誤差最大的一個原因是發送請求和接收響應這兩個階段的網路時間可能是不一樣的。前面我們推導時間偏移公式的時候,假設網路往返發送和接收階段的時間是一樣的,但是實際網路中,這兩個階段走的路由可能是不一樣的,所花的時間也可能不一樣,計算的時間偏移也不準確,這樣就造成了廣域網的誤差可能達到幾十毫秒甚至更高。區域網中因為網路比較穩定,經過的路由器也比較少,所以誤差可以到1毫米內。
rfc5905
網路時間協議
NTP 協議簡單分析
Ⅶ NTP網路授時伺服器的穩定度是怎麼保證的呢
網路時間協議NTP(Network Time Protocol)是用於互聯網中時間同步的標准互聯網協議。NTP的用途是把計算機的時間同步到某些時間標准。目前採用的時間標準是世界協調時UTC(Universal Time Coordinated)。
NTP時間伺服器是針對自動化系統中的計算機、控制裝置等進行校時的高科技產品,NTP時間伺服器產品它從GPS衛星上獲取標準的時間信號,將這些信息通過各種介面類型來傳輸給自動化系統中需要時間信息的設備(計算機、保護裝置、故障錄波器、事件順序記錄裝置、安全自動裝置、遠動RTU),這樣就可以達到整個系統的時間同步。
網路時間協議NTP(Network Time Protocol)是用於互聯網中時間同步的標准互聯網協議。NTP的用途是把計算機的時間同步到某些時間標准。目前採用的時間標準是世界協調時UTC(Universal Time Coordinated)。NTP的主要開發者是美國特拉華大學的David L. Mills教授。
NTP時間伺服器採用SMT表面貼裝技術生產,大規模集成電路設計,以高速晶元進行控制,具有精度高、穩定性好、功能強、無積累誤差、不受地域氣候等環境條件限制、性價比高、操作簡單等特點,全自動智能化運行,免操作維護,適合無人值守且廣泛應用於電力、金融、通信、交通、廣電、石化、冶金、國防、教育、IT、公共服務設施等各個領域。
NTP的設計充分考慮了互聯網上時間同步的復雜性。NTP提供的機制嚴格、實用、有效,適應於在各種規模、速度和連接通路情況的互聯網環境下工作。NTP以GPS時間代碼傳送的時間消息為參考標准,採用了Client/Server結構,具有相當高的靈活性,可以適應各種互聯網環境。NTP不僅校正現行時間,而且持續跟蹤時間的變化,能夠自動進行調節,即使網路發生故障,也能維持時間的穩定。NTP產生的網路開銷甚少,並具有保證網路安全的應對措施。這些措施的採用使NTP可以在互聯網上獲取可靠和精確的時間同步,並使NTP成為互聯網上公認的時間同步工具。
目前,在通常的環境下,NTP提供的時間精確度在WAN上為數十毫秒,在LAN上則為亞毫秒級或者更高。在專用的時間伺服器上,則精確度更高。
Ⅷ 新買的wifi對時電子鍾比手機時間快二秒是何原因
網路時間和實際時間不一樣
WIFI電子鍾授時網路是由乙太網授時伺服器或本地授時伺服器、交換機、WIFI AP和WIFI電子鍾組成。乙太網授時伺服器或本地授時伺服器時間源為GPS、北斗或CDMA網路,以NTP協議向外提供授時工作,授時伺服器時間走時精度高,偏差小
WIFI網路時鍾具有精度高、功能強、穩定性好、無積累誤差、不受氣候地域等環境條件限制、性價比高、操作簡單、免維護等特點,全自動智能化運行,適合無人值守。
Ⅸ time.windows.com 同步時間成功,但時間比北京時間要走的快
時間伺服器
不一定要選擇
time.windows.com
你也可以選擇
e.ntp.org.cn
tw.ntp.org.cn
us.ntp.org.cn
cn.ntp.org.cn
ntp.sjtu.e.cn
202.120.2.101
(
上海交通大學
網路中心
NTP伺服器
地址)
s1a.time.e.cn
北京郵電大學
s1b.time.e.cn
清華大學
s1c.time.e.cn
北京大學
s1d.time.e.cn
東南大學
s1e.time.e.cn
清華大學
s2a.time.e.cn
清華大學
s2b.time.e.cn
清華大學
s2c
.time.e.cn
北京郵電大學
s2d.time.e.cn
西南地區網路中心
s2e.time.e.cn
西北地區網路中心
s2f.time.e.cn
東北地區網路中心
s2g.time.e.cn
華
東南地區
網路中心
s2h.time.e.cn
四川大學
網路管理中心
s2j.time.e.cn
大連理工大學
網路中心
s2k.time.e.cn
CERNET桂林主節點
s2m.time.e.cn
北京大學
具體自己網路或者選擇。
Ⅹ NTP網路時間伺服器的優勢
許多 Internet 服務依賴、 或極大地受益於本地計算機時鍾的准確性。 例如, web 伺服器可能會接收到一個請求, 要求如果文件在某一時刻之後修改過才發送它。 在區域網環境中,共享文件的計算機之間的時鍾是否同步至關重要, 因為這樣才能使時間戳保持一致。
個人電腦的時鍾准確度很低,只有10-4、10-5,一天下來有可能差十幾秒。解決這個問題就需要網路(Internet)授時系統.
美國國家標准技術研究院(NIST)從90年代初開始,進行Internet網上時間發播服務,至今已經設置了7,8個時間服務專用網站,德國PTB也已開通專用授時網站,在網上發播標准時間。世界上的授時網站已有100多個。
以前由於國內沒有可用的時間伺服器地址,我們只能依靠windows系統默認的windows或NIST等境外的時間伺服器同步時間,但存在著訪問堵塞、時間延遲大(同步精度低)等因素的影響。而中國的國家授時中心終於發布了一個時間伺服器地址,大家終於可以用國人自己的標准時間啦!經我測試速度快、可靠性高,避免了我們總要把自己的時間也要與國外看齊的狀況持續下去!