通過網絡NTP協議進行時間同步


目的:通過網絡進行時間同步 
協議:NTP 協議 
NTP(Network Time Protocol) 用於通過網絡進行時間同步。它通常可獲得毫秒級的精度。 
NTP采用UDP傳輸協議,使用端口123。 
SNTP 是一個簡化版本的NTP協議,是NTP的子集。 
Windows 2000和XP操作系統,自身已經集成了自動對時功能。可以在時間設置中進行同步服務器的設置。 
原理和數據包內容 
NTP協議中發送和接收的數據包類似,都是48個字節(也可以再多一些,但只需前48個字節就可以進行計算了)。數據包的內容如下: 
通過抓包,分析出一個典型的請求數據包是這樣的: 共48字節 
1B 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ------------頭部 
D0 AF 5F F5 23 D7 08 00---------------Originate Timestamp (T1)出發時間戳有效位為8 bytes 
========================================================== 
典型的回復數據包如下:長度也為48字節 
1C 02 00 EC 00 00 06 EA 00 00 0C A2 C0 A8 33 CA----數據包頭部,共16 bytes 
D0 AF 5E A3 F5 BD 72 BC---------------Reference Timestamp 
D0 AF 5F F5 23 D7 08 00---------------Originate Timestamp (T1) 
D0 AF 61 D7 CD 2E F9 11---------------Receive Timestamp ? (T2) 
D0 AF 61 D7 CD 2F F4 BA---------------Transmit Timestamp ?(T3) 
收到數據包后,本地再產生一個時間戳(T4) 
這里,每個返回數據前4字節為秒的整數部分,后4字節為秒的小數部分 
' NTP 協議中的時間是從1900年開始的。准確說秒數計數的起始時間為格林威治的1900年1月1日0時0分0秒。我們這里另外必須有8個小時的時區補償值。 
為了代碼簡潔,減少數制轉換,發現發送NTP協議協議請求包時,不用發准確的發送時間戳,用個虛構的時間戳數據就可以了,因此,這里NTP服務器返回的請求時間戳(T1)只用作數據真實性檢驗,而由程序在發送時刻,獲取一個正確的時間戳作為計算用T1就成。 
網絡延時 = (T4-T1) - (T2-T3) 
誤差補償秒數 = ((T2-T1) + (T3-T4))/2; 
校對結果時間=現實時間+誤差補償秒數 
這里,我們一般電腦用的,時間精度在1秒以內就可以了,因此,每個時間戳處理都只用了其整數部分。 


NTP協議  

2012-02-02 20:40:36|  分類: 網絡技術 |  標簽:ntp  |字號 訂閱

NTP(Network Time Protocol,網絡時間協議)是由RFC 1305定義的時間同步協議,用來在分布式時間服務器和客戶端之間進行時間同步。NTP基於UDP報文進行傳輸,使用的UDP端口號為123。

使用NTP的目的是對網絡內所有具有時鍾的設備進行時鍾同步,使網絡內所有設備的時鍾保持一致,從而使設備能夠提供基於統一時間的多種應用。

對於運行NTP的本地系統,既可以接收來自其他時鍾源的同步,又可以作為時鍾源同步其他的時鍾,並且可以和其他設備互相同步。

NTP工作原理

NTP的基本工作原理如圖所示。Device A和Device B通過網絡相連,它們都有自己獨立的系統時鍾,需要通過NTP實現各自系統時鍾的自動同步。為便於理解,作如下假設:

在Device A和Device B的系統時鍾同步之前,Device A的時鍾設定為10:00:00am,Device B的時鍾設定為11:00:00am。

 Device B作為NTP時間服務器,即Device A將使自己的時鍾與Device B的時鍾同步。

   NTP報文在Device A和Device B之間單向傳輸所需要的時間為1秒。

       系統時鍾同步的工作過程如下:

   Device A發送一個NTP報文給Device B,該報文帶有它離開Device A時的時間戳,該時間戳為10:00:00am(T1)。

  當此NTP報文到達Device B時,Device B加上自己的時間戳,該時間戳為11:00:01am(T2)。

  當此NTP報文離開Device B時,Device B再加上自己的時間戳,該時間戳為11:00:02am(T3)。

  當Device A接收到該響應報文時,Device A的本地時間為10:00:03am(T4)。

至此,Device A已經擁有足夠的信息來計算兩個重要的參數:

 NTP報文的往返時延Delay=(T4-T1)-(T3-T2)=2秒。

  Device A相對Device B的時間差offset=((T2-T1)+(T3-T4))/2=1小時。

這樣,Device A就能夠根據這些信息來設定自己的時鍾,使之與Device B的時鍾同步。

NTP的報文格式

NTP有兩種不同類型的報文,一種是時鍾同步報文,另一種是控制報文。控制報文僅用於需要網絡管理的場合,它對於時鍾同步功能來說並不是必需的,這里不做介紹。

 

主要字段的解釋如下:

l              LI(Leap Indicator):長度為2比特,值為“11”時表示告警狀態,時鍾未被同步。為其他值時NTP本身不做處理。

l              VN(Version Number):長度為3比特,表示NTP的版本號,目前的最新版本為3。

l              Mode:長度為3比特,表示NTP的工作模式。不同的值所表示的含義分別是:0未定義、1表示主動對等體模式、2表示被動對等體模式、3表示客戶模式、4表示服務器模式、5表示廣播模式或組播模式、6表示此報文為NTP控制報文、7預留給內部使用。

l              Stratum:系統時鍾的層數,取值范圍為1~16,它定義了時鍾的准確度。層數為1的時鍾准確度最高,准確度從1到16依次遞減,層數為16的時鍾處於未同步狀態,不能作為參考時鍾。

l              Poll:輪詢時間,即兩個連續NTP報文之間的時間間隔。

l              Precision:系統時鍾的精度。

l              Root Delay:本地到主參考時鍾源的往返時間。

l              Root Dispersion:系統時鍾相對於主參考時鍾的最大誤差。

l              Reference Identifier:參考時鍾源的標識。

l              Reference Timestamp:系統時鍾最后一次被設定或更新的時間。

l              Originate Timestamp:NTP請求報文離開發送端時發送端的本地時間。

l              Receive Timestamp:NTP請求報文到達接收端時接收端的本地時間。

l              Transmit Timestamp:應答報文離開應答者時應答者的本地時間。

l              Authenticator:驗證信息。

NTP的工作模式

 設備可以采用多種NTP工作模式進行時間同步:

             客戶端/服務器模式

             對等體模式

            廣播模式

            組播模式

用戶可以根據需要選擇合適的工作模式。在不能確定服務器或對等體IP地址、網絡中需要同步的設備很多等情況下,可以通過廣播或組播模式實現時鍾同步;客戶端/服務器和對等體模式中,設備從指定的服務器或對等體獲得時鍾同步,增加了時鍾的可靠性。
1. 客戶端/服務器模式

在客戶端/服務器模式中,客戶端向服務器發送時鍾同步報文,報文中的Mode字段設置為3(客戶模式)。服務器端收到報文后會自動工作在服務器模式,並發送應答報文,報文中的Mode字段設置為4(服務器模式)。客戶端收到應答報文后,進行時鍾過濾和選擇,並同步到優選的服務器。

在該模式下,客戶端能同步到服務器,而服務器無法同步到客戶端。

2. 對等體模式

 在對等體模式中,主動對等體和被動對等體之間首先交互Mode字段為3(客戶端模式)和4(服務器模式)的NTP報文。之后,主動對等體向被動對等體發送時鍾同步報文,報文中的Mode字段設置為1(主動對等體),被動對等體收到報文后自動工作在被動對等體模式,並發送應答報文,報文中的Mode字段設置為2(被動對等體)。經過報文的交互,對等體模式建立起來。主動對等體和被動對等體可以互相同步。如果雙方的時鍾都已經同步,則以層數小的時鍾為准

3. 廣播模式

在廣播模式中,服務器端周期性地向廣播地址255.255.255.255發送時鍾同步報文,報文中的Mode字段設置為5(廣播模式)。客戶端偵聽來自服務器的廣播報文。當客戶端接收到第一個廣播報文后,客戶端與服務器交互Mode字段為3(客戶模式)和4(服務器模式)的NTP報文,以獲得客戶端與服務器間的網絡延遲。之后,客戶端就進入廣播客戶端模式,繼續偵聽廣播報文的到來,根據到來的廣播報文對系統時鍾進行同步。

4. 組播模式

在組播模式中,服務器端周期性地向用戶配置的組播地址(若用戶沒有配置組播地址,則使用默認的NTP組播地址224.0.1.1)發送時鍾同步報文,報文中的Mode字段設置為5(組播模式)。客戶端偵聽來自服務器的組播報文。當客戶端接收到第一個組播報文后,客戶端與服務器交互Mode字段為3(客戶模式)和4(服務器模式)的NTP報文,以獲得客戶端與服務器間的網絡延遲。之后,客戶端就進入組播客戶模式,繼續偵聽組播報文的到來,根據到來的組播報文對系統時鍾進行同步。


免責聲明!

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



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