2018年2月1日 星期四

DIY - ESP8266:ESP-12F SNTP 簡單網路時間協定介紹(六十一)

DIY - ESP8266:ESP-12F SNTP 簡單網路時間協定介紹(六十一):

NTP(Network Time Protocol - 網路時間協定)是通過封包交換進行時鐘同步的一個網路協定,NTP 於1985年由德拉瓦大學(University of Delaware)的 David L. Mills 設計,複雜演算法,誤差精確度在 1-50ms內。另外還有一種協定是 NTP 協定的簡化版,即 SNTP(Simple Network Time Protocol - 簡單網路時間協定),而精確度一般也能達到 1秒左右。

NTP Hierarchy - Stratum Levels
SNTP 協議目前的版本號是 SNTP V4,它能與以前的版本相容,更重要的是 SNTP 能夠與 NTP 協議具有互通性,即 SNTP 客戶可以與 NTP 伺服器協同工作,同樣 NTP 客戶也可以接收 SNTP 伺服器發出的授時資訊。這是因為 NTP 和 SNTP 的資料包格式是一樣的,計算客戶時間、時間偏差以及包往返時延的演算法也是一樣的。因此 NTP 和 SNTP 實際上是無法分割的。

SNTP 協定採用客戶/伺服器工作方式,伺服器通過接收 GPS 信號或自帶的原子鐘作為系統的時間基準,客戶機通過定期訪問伺服器提供的時間服務獲得準確的時間資訊,並調整自己的系統時鐘,達到網路時間同步的目的。客戶和伺服器通訊採用 UDP 協定,埠為 123。授時原理可以用下面的圖作一個描述:

授時原理圖
t1:客戶方發送查詢請求時間(以客戶方時間系統為參照),標記為 Originate Timestamp;
t2:伺服器收到查詢請求時間(以伺服器時間系統為參照),標記為 Receive Timestamp;
t3:伺服器回復時間資訊包時間(以伺服器時間系統為參照),標記為 Transmit Timestamp;
t4:客戶方收到時間資訊包時間(以客戶方時間系統為參照),標記為 Destination Timestamp; D1:請求資訊在網上傳播所消耗的時間
D2:回復資訊在網上傳播所消耗的時間

Synchronizing with Master and Slave Clocks
現已知 T1 、T2、T3、T4,希望求得以調整客戶方時鐘有:
上圖中用藍色標注了主從直接來回鏈路的時延 Sigma:
Sigma = (t4-t1)-(t3-t2)
因此,假設來回網路鏈路是對稱的,即傳輸時延相同,那麼可以計算用戶端與伺服器之間的時間誤差 Delta 為:
Delta = t2-t1-Sigma/2=((t2-t1)+(t3-t4))/2
用戶端調整自身的時間 Delta,即可完成一次時間同步。

SNTP 時間戳記(Timestamp)
SNTP 時間戳記格式:
SNTP 時間戳記是該協定的重要產品,用來對時間進行精確表示。它由一個 64位元無符號浮點數組成,整數部分為頭 32位元,小數部分為後 32位元;單位為秒,時間相對於1900年1月零點。它能表示的最大數字為 4,294,967,295秒,同時具有232PS 的精確性,這能滿足最苛刻的時間要求。值得注意的是在 1968年的某一個時間(2,147,483,648秒)時間戳記的最高位已被設置為 1,在 2036年的某一個時間(4,294,967,295秒)64位欄位將會溢出,所有位將會被置為零,此時的時間戳記將會被視為無效。為了解決這一問題,儘量延長SNTP時間戳記的使用時間,一種可能的辦法為:如果最高位設置為 1。

電腦網路普遍使用的 UTC 時間(協調世界時),時間計算起點從 1900年1月0點0分0秒開始計算,由國際計量局 BIPM 綜合全世界多個守時實驗室的鐘組計算得到,為了使 UTC 時間與地球自轉1天的時間(世界時 UT)協調一致,每隔 1到 2年,BIPM 會通告在 UTC 時間 6月30日或 12月31日最後一分鐘 “加一秒” 或 “減一秒” 等閏秒調整。也就是說,UTC 時間會出現 60秒或少了59秒的情況。

SNTP 繼承了 NTP 的 Timestamp format (在 RFC-1305 有詳細介紹),NTP data 主要用整數或是固定位數來表示:
a. 使用 bit-endian
b. 由 0 從左邊位元開始
c. 皆為正數
d. 所有的位元皆可以用來表示數值,假設第一位元也被使用時,預設會有一個 preceding bit 0 Timestamp 表示方式
a. 64 bits unsigned fixed-point number
b. 從西元 1900年1月1日開始計算秒數
c. 64 bits 中的前 32 bits表示整數
d. 64 bits 中的後 32 bits表示小數,要是在小數點後數值不到 32bits會主動設為 0

2018年 2月 1日 天氣報告
氣溫:12.0@ 19:10
相對濕度:百分之 67%
天氣:多雲
※ 今早天文台錄得最低氣溫 6.8 度, 是入冬以來的最低紀錄。

沒有留言:

張貼留言