1. 程式人生 > >讀Muduo原始碼筆記---5(NTP協議)

讀Muduo原始碼筆記---5(NTP協議)

1、概念

NTP是網路時間協議(Network Time Protocol),它是用來同步網路中各個計算機的時間的協議。

2、原理

   客戶機首先向伺服器傳送一個NTP 包,其中包含了該包離開客戶機的時間戳T1,當伺服器接收到該包時,依次填入包到達的時間戳T2、包離開的時間戳T3,然後立即把包返回給客戶機。客戶機在接收到響應包時,記錄包返回的時間戳T4。客戶機用上述4個時間引數就能夠計算出2個關鍵引數:NTP包的往返延遲d和客戶機與伺服器之間的時鐘偏差t。客戶機使用時鐘偏差來調整本地時鐘,以使其時間與伺服器時間一致。

      T1為客戶傳送NTP請求時間戳(以客戶時間為參照);T2為伺服器收到NTP請求時間戳(以伺服器時間為參照);T3為伺服器回覆NTP請求時間戳(以伺服器時間為參照);T4為客戶收到NTP回覆包時間戳(以客戶時間為參照);d1為NTP請求包傳送延時,d2為NTP回覆包傳送延時;t為伺服器和客戶端之間的時間偏差,d為NTP包的往返時間。

由上圖可得如下公式:

                      

假設d1=d2:;

                              

3、案例

在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的時鐘同步。

4、工作模式

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

  • 客戶端/伺服器模式

      

    在客戶端/伺服器模式中,客戶端向伺服器傳送時鐘同步報文,報文中的Mode欄位設定為3(客戶模式)。伺服器端收到報文後會自動工作在伺服器模式,併發送應答報文,報文中的Mode欄位設定為4(伺服器模式)。客戶端收到應答報文後,進行時鐘過濾和選擇,並同步到優選的伺服器。

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

  • 對等體模式

  

    在對等體模式中,主動對等體和被動對等體之間首先互動Mode欄位為3(客戶端模式)和4(伺服器模式)的NTP報文。之後,主動對等體向被動對等體傳送時鐘同步報文,報文中的Mode欄位設定為1(主動對等體),被動對等體收到報文後自動工作在被動對等體模式,併發送應答報文,報文中的Mode欄位設定為2(被動對等體)。經過報文的互動,對等體模式建立起來。主動對等體和被動對等體可以互相同步。如果雙方的時鐘都已經同步,則以層數小的時鐘為準

  • 廣播模式

   在廣播模式中,伺服器端週期性地向廣播地址255.255.255.255傳送時鐘同步報文,報文中的Mode欄位設定為5(廣播模式)。客戶端偵聽來自伺服器的廣播報文。當客戶端接收到第一個廣播報文後,客戶端與伺服器互動Mode欄位為3(客戶模式)和4(伺服器模式)的NTP報文,以獲得客戶端與伺服器間的網路延遲。之後,客戶端就進入廣播客戶端模式,繼續偵聽廣播報文的到來,根據到來的廣播報文對系統時鐘進行同步。

  • 組播模式

    在組播模式中,伺服器端週期性地向用戶配置的組播地址(若使用者沒有配置組播地址,則使用預設的NTP組播地址224.0.1.1)傳送時鐘同步報文,報文中的Mode欄位設定為5(組播模式)。客戶端偵聽來自伺服器的組播報文。當客戶端接收到第一個組播報文後,客戶端與伺服器互動Mode欄位為3(客戶模式)和4(伺服器模式)的NTP報文,以獲得客戶端與伺服器間的網路延遲。之後,客戶端就進入組播客戶模式,繼續偵聽組播報文的到來,根據到來的組播報文對系統時鐘進行同步。