ntp原理及用戶端實現
NTP簡介
NTP(Network Time Protocol)是由美國德拉瓦大學的David L. Mills教授於1985年提出,除了可以估算封包在網路上的往返延遲外,還可獨立地估算電腦時鐘偏差,從而實現在網路上的高精準度電腦校時,它是設計用來在Internet上使不同的機器能維持相同時間的一種通訊協定。時間伺服器(time server)是利用NTP的一種伺服器,通過它可以使網路中的機器維持時間同步。在大多數的地方,NTP可以提供1-50ms的可信賴性的同步時間源和網路工作路徑。
網路時間協議(NTP)的詳細說明在RFC-1305[Mills 1992]中。RFC-1305對 NTP協議自動機在事件、狀態、轉變功能和行為方面給出了明確的說明。它以合適的演算法以增強時鐘的準確性,並且減輕多個由於同步源而產生的差錯,實現了準確性低於毫秒的時間服務,以滿足目前網際網路中路徑量測的需要。
NTP是一個跨越廣域網路或區域網路的複雜的同步時間協議,它通常可獲得毫秒級的精度。RFC2030[Mills 1996]描述了SNTP(Simple Network Time Protocol),目的是為了那些不需要完整NTP實現複雜性的主機,它是NTP的一個子集。通常讓區域網路上的若干台主機通過網際網路與其他的NTP主機同步時鐘,接著再向區域網路內其他用戶端提供時間同步服務。
NTP的特點
1,從UTC擷取標準時間
網路時間協議,提供在互連的網路上提供校時服務和發送標準時間給電腦。目前已成為Internet上時間同步的標準協議。NTP提供準確時間,首先要有準確的時間來源,這一時間應是國際標準時間UTC。NTP獲得UTC的時間來源可以是原子鐘,天文台,衛星,也可以從Internet上擷取。這樣就有了準確而可靠的時間源。
2,NTP伺服器分層提供服務
時間按NTP伺服器的等級傳播。按照離外部UTC源的遠近將所有伺服器歸入不同的Stratum(層)中。Stratum-1在頂層,有外部UTC接入,而 Stratum-2則從Stratum-1擷取時間,Stratum-3從Stratum-2擷取時間,以此類推,但Stratum層的總數限制在15以內。所有這些伺服器在邏輯上形階梯式的架構相互串連,而Stratum-1的時間伺服器是整個系統的基礎。
3,過濾演算法選擇時間的最佳路徑和來源
電腦主機一般同多個時間伺服器串連,利用統計學的演算法過濾來自不同伺服器的時間包,以選擇最佳的路徑和來源來校正主機時間。即使主機在長時間無法與某一時間伺服器相聯絡的情況下,NTP服務依然有效運轉。
4,識別機制抗幹擾和惡意破壞
為防止對時間伺服器的惡意破壞,NTP使用了識別(Authentication)機制,檢查來對時的資訊是否是真正來自所宣稱的伺服器並檢查資料的返迴路徑,以提供對抗幹擾的保護機制。
NTP的實現方式
1,無線時鐘:伺服器系統可以通過串口串連一個無線時鐘。無線時鐘接收GPS(全球衛星定位系統)的衛星發射的訊號來決定目前時間。無線時鐘是一個非常精確的時間源,但是需要花一定的費用。
2,時間伺服器:還可以使用網路中NTP時間伺服器,通過這個伺服器來同步網路中的系統的時鐘。http://www.eecis.udel.edu/~mills/ntp/servers.html列出了Internet上有效一級時間伺服器。
3,區域網路內的同步:如果只是需要在本區域網路內進行系統間的時鐘同步,那麼就可以使用區域網路中任何一個系統的時鐘。你需要選擇區域網路中的一個節點的時鐘作“權威的”的時間源,然後其它的節點就只需要與這個時間源進行時間同步即可。使用這種方式,所有的節點都會使用一個公用的系統時鐘,但是不需要和區域網路外的系統進行時鐘同步。如果一個系統在一個區域網路的內部,同時又不能使用無線時鐘,這種方式是最好的選擇。
NTP的工作模式
1,Sever/Client mode:使用者向一個多幾個伺服器提出服務要求,根據所交換的資訊,從中選擇認為最準確的時間,並調整本地的時鐘。
2,Multicast/Broadcast mode:此種模式是適用於用在高速的LAN上。利用一個或多個伺服器在固定的周期向某個多播地址做廣播。
3,Symmetric mode:二個以上的Server互相進行時間訊息的通訊,可以互相校正對方的時間,以維持整個subnet的時間一致性。
NTP協議結構
NTP packet = NTP header + Four TimeStamps = 48bytes
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
[header, 16bytes]
2 3 3 8 8 8 共32bits
LI VN Mode Stratum Poll Precision
Root Delay (32bits)
Root Dispersion (32bits)
Reference Identifier (32bits)
[Timestamp 1, 8bytes]
Reference Timestamp (64bits)
[Timestamp 2, 8bytes]
Originate Timestamp (64bits)
[Timestamp 3, 8bytes]
Receive Timestamp (64bits)
[Timestamp 4, 8bytes]
Transmit Timestamp (64bits)
Key Identifier (optional) (32bits)
Message digest (optional) (128bits)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
欄位說明:
* LI:LeapYearIndicator, 跳躍指標,警告在當月最後一天的最終時刻插入的迫近閨秒(閨秒)。
* VN:VersionNumber, 版本號碼。
* Mode:模式, 0-預留;1-對稱行為;3-客戶機;4-伺服器;5-廣播;6-NTP 控制資訊
* Stratum:層級。
* Poll:PollInterval, 有符號整數表示連續資訊間的最大間隔。
* Precision:有符號整數表示本地時鐘精確度。
* Root Delay:有符號固定點序號表示主要參考源的總延遲,很短時間內的位15到16間的分段點。
* Root Dispersion:無符號固定點序號表示相對於主要參考源的正常差錯。
* Reference Identifier:識別特殊參考源。
* Reference Timestamp
* Originate Timestamp:這是向伺服器請求分離客戶機的時間,採用64位時標格式。
* Receive Timestamp:這是向伺服器請求到達客戶機的時間,採用64位時標(Timestamp)格式。
* Transmit Timestamp:這是向客戶機回覆分離伺服器的時間,採用64位時標(Timestamp)格式。
* Authenticator(可選):主要標識符和資訊數字域就包括已定義的資訊認證代碼(MAC)資訊。
網路延時與時鐘偏差的測量
Timestamp Name ID When Generated
Originate Timestamp T1 time request sent by client
Receive Timestamp T2 time request received at server
Transmit Timestamp T3 time reply sent by server
Destination Timestamp T4 time reply received at client
t 為伺服器和用戶端之間的時間偏差;
d 為兩者之間的往返時間
∵ T2 = T1 + t + d/2; ∴ T2 - T1 = t + d/2;
∵ T4 = T3 - t + d/2; ∴ T3 - T4 = t - d/2;
∴ d = (T2 - T1) + (T4 - T3); t = [(T2 - T1) + (T3 - T4)] / 2;
NTP用戶端實現
ntpclient是一個運行在類UNIX機器上實現RFC-1305的ntp用戶端, 可以在這裡http://doolittle.icarus.com/ntpclient/下載,作者是Larry Doolittle。正在看,還不是特別明白