網路時間協定

網路時間協定(英語:Network Time Protocol,縮寫:NTP)是在數據網絡潛伏時間可變的電腦系統之間通過封包交換進行時鐘同步的一個網絡協定,位於OSI模型應用層。自1985年以來,NTP是目前仍在使用的最古老的互聯網協定之一。NTP由德拉瓦大學大衛·米爾斯英語David L. Mills(David L. Mills)設計。

NTP意圖將所有參與電腦的協調世界時(UTC)時間同步到幾毫秒的誤差內。[1]:3它使用Marzullo演算法英語Marzullo's algorithm的修改版來選擇準確的時間伺服器,其設計旨在減輕可變網絡延遲英語network latency造成的影響。NTP通常可以在公共互聯網保持幾十毫秒的誤差,並且在理想的區域網絡環境中可以實現超過1毫秒的精度。不對稱路由擁塞控制可能導致100毫秒(或更高)的誤差。[2][3]

該協定通常描述為一種主從式架構,但它也可以用在對等網絡中,對等體雙方可將另一端認定為潛在的時間源。[1]:20傳送和接收時間戳採用用戶數據報協定(UDP)的通訊埠123實現。[4][5]這也可以使用廣播多播,其中的客戶端在最初的往返校準交換後被動地監聽時間更新。[3]NTP提供一個即將到來閏秒調整的警告,但不會傳輸有關本地時區夏時制的資訊。[2][3]

當前協定為版本4(NTPv4),這是一個RFC 5905文件中的建議標準。它向下相容指定於RFC 1305的版本3。

歷史

 
NTP的設計者David L. Mills英語David L. Mills

1979年,網絡時間同步技術在紐約國家電腦會議英語National Computer Conference上於執行在跨大西洋衛星網絡的互聯網服務上公開演示,這可能是該技術的首次公開演示。該技術後在1981年互聯網工程筆記(IEN)173中描述,並根據RFC 778文件開發為一個公開協定。該技術首先被部署在一個本地網絡,作為Hello路由協定的一部分,並在Fuzzball英語Fuzzball router(一個用於網絡原型的實驗作業系統,已執行多年)中實現。

現在還有其他的相關網絡工具。這包括DaytimeTime協定用以記錄事件時間,以及互聯網控制訊息協定和IP時間戳選項(RFC 781)。更多完整的同步系統,雖然缺乏NTP的數據分析和時鐘規律演算法,包括Unix守護行程timed在內的軟件其使用選舉演算法為所有客戶端指定伺服器。以及數字時間同步服務(Digital Time Synchronization Service,DTSS)使用類似構NTP階層模型的伺服器階層。

1985年,NTPv0被實現於Fuzzball和Unix,文件化於RFC 958的NTP封包頭、和往返延遲和偏移計算都被留存至NTPv4。儘管當時可用的電腦和網絡相對較慢,但在跨大西洋鏈路上也取得了優於100毫秒的精度,在乙太網路網絡上準確度為幾十毫秒。

1988年,一個更完整的NTPv1協定規範及相關的演算法發表在RFC 1059。它利用了RFC 956的文獻中的實驗結果和時鐘濾波演算法,並是第一個描述客戶端-伺服器對等網絡模型的版本。1991年,NTPv1架構、協定和演算法通過大衛·米爾斯在IEEE通訊彙刊英語IEEE Transactions on Communications發佈的一篇文章得到了工程學界的更廣泛關注。

1989年,RFC 1119發佈通過有限狀態機定義的NTPv2,使用偽代碼來描述其操作。它引入了一個管理協定和加密認證方案,它們留存至NTPv4。社區批評NTP的設計缺乏形式正確性原則英語Correctness (computer science)。他們的替代設計包括Marzullo演算法英語Marzullo's algorithm,其修改版本已及時添加到NTP。這個時代的大多數演算法也大部分留存至NTPv4。

1992年,RFC 1305定義了NTPv3。該RFC包括一個對所有錯誤來源的分析,從參考時鐘英語Master clock至最終客戶端,這使幫助度量和選擇最佳伺服器成為可能(在其中幾個候選者反對的情況下)。廣播模式被引入。

在接下來的幾年裏,隨着新特性的添加和演算法的改進,顯然還需要一個新的協定版本。[6]2010年,RFC 5905發佈了一個對NTPv4的建議規範,但該協定自那時以來已經顯著改變,截至2014年,更新的RFC尚未發佈。[7]在Mills從德拉瓦大學退休後,該參考實現目前由Harlan Stenn保持為一個開放原始碼專案。[8][9]

時鐘層

 
美國海軍天文台備用主時鐘Schriever AFB (Colorado)英語Schriever Air Force Base是一個第0層的NTP源
 
黃色箭頭表示直接連接;紅色箭頭表示網絡連接。

NTP使用一個分層、半分層的時間源系統。該層次的每個級別被稱為「stratum」,頂層分配為數字0。一個通過階層n同步的伺服器將執行在階層n + 1。數字表示與參考時鐘的距離,用於防止階層中的迴圈依賴性。階層並不總是指示質素或可靠性;在階層3的時間源得到比階層2時間源更高的時間質素也很常見。電信系統對時鐘層英語Synchronization in telecommunications使用不同的定義。以下提供了階層0、1、2、3的簡要描述。

階層0(Stratum 0)
這些是高精度計時裝置,例如原子鐘(如銫、銣)、GPS時鐘或其他無線電時鐘。它們生成非常精確的脈衝秒英語pulse per second訊號,觸發所連接電腦上的中斷和時間戳。階層0裝置也稱為參考(基準)時鐘。
階層1
這些與階層0裝置相連、在幾微秒誤差內同步系統時鐘的電腦。階層1伺服器可能與其他階層1伺服器對等相連,以進行完整性檢查和備份。[10]它們也被稱為主要(primary)時間伺服器[2][3]
階層2
這些電腦通過網絡與階層1伺服器同步。提供階層2的電腦將查詢多個階層1伺服器。階層2電腦也可能與其他階層2電腦對等相連,為對等組中的所有裝置提供更健全穩定的時間。
階層3
這些電腦與階層2的伺服器同步。它們使用與階層2相同的演算法進行對等和數據採樣,並可以自己作為伺服器擔任階層4電腦,以此類推。

階層的上限為15;階層16被用於標識裝置未同步。每台電腦上的NTP演算法相互構造一個貝爾曼-福特演算法最短路徑生成樹,以最小化所有客戶端到階層1伺服器的累積往返延遲。[1]:20

時間戳

NTP使用64位元的時間戳,其中32位元表示秒,32位元表示秒的小數,給出一個每232秒(136年)才會翻轉的時間尺度,理論解像度2−32秒(233皮秒)。NTP以1900年1月1日作為開始時間,因此第一次翻轉將在2036年2月7日發生。[11][12]

NTP的未來版本可能將時間表示擴充到128位元:其中64位元表示秒,64位元表示秒的小數。當前的NTPv4格式支援「時代數字」(Era Number)和「時代偏移」(Era Offset),正確使用它們應該有助於解決日期翻轉問題。據Mills稱:「64位元的秒小數足以分辨光子光速通過電子所需的時間。64位元的秒足以提供明確的時間表示,直到宇宙變暗。」[13][note 1]

時鐘同步演算法

 
往返延遲時間δ

典型的NTP客戶端將定期輪詢不同網絡上的三個或更多伺服器。為同步其時鐘,客戶端必須計算其時間偏移量和來回通訊延遲。時間偏移「θ」定義為:

 

往返延遲「δ」為:

 

其中:

t0 是請求封包傳輸的客戶端時間戳,
t1 是請求封包回覆的伺服器時間戳,
t2 是響應封包傳輸的伺服器時間戳
t3 是響應封包回覆的客戶端時間戳。[1]:19

「θ」和「δ」的值通過過濾器並進行統計分析。異常值被剔除,並從最好的三個剩餘候選中匯出估算的時間偏移。然後調整時鐘頻率以逐漸減小偏移,建立一個反饋迴路[1]:20

當客戶端和伺服器之間的輸入和輸出路由都具有對稱的標稱延遲時,同步是正確的。如果路由沒有共同的標稱延遲,則將差異取半作為測量誤差[14]

軟件實現

 
查詢第二層伺服器狀態的NTP管理協定實用工具ntpq。

參考實現

NTP參考實現連同協定的開發已持續發展了20多年。隨着新功能的添加,向下相容性仍保持不變。它包含幾個敏感的演算法,尤其是時鐘規律,在同步到使用不同演算法的伺服器時可能會發生錯誤。該軟件已移植到幾乎各個計算平台,包括個人電腦。[1]:13它在Unix上執行名為ntpd英語ntpd守護行程,或在Windows上執行為一個Windows服務[1]:15支援參考時鐘,並且以與遠端伺服器相同的方式對偏移進行過濾和分析,儘管它們通常更頻繁地輪詢。[1]:19

SNTP

一個複雜度更低的NTP實現,使用相同協定,但不需要長時間儲存狀態英語state (computer science)[15],也稱簡單網路時間協定(Simple Network Time Protocol,SNTP)。被某些嵌入式系統和不需要高精度時間的應用所採用。[16][17][18]

Windows時間服務

Windows 2000起的所有Microsoft Windows版本都包括Windows時間服務(W32Time),[19]其具有將電腦時鐘同步到NTP伺服器的能力。

W32Time服務最初是為實現Kerberos第五版的身份驗證協定,它需要誤差5分鐘內正確時間值以防止重放攻擊。Windows 2000和Windows XP中只實現了簡單的NTP,並在幾個方面違反了NTP第3版的標準。[20]Windows Server 2003Windows Vista開始,已包括符合完整NTP的實現。[21]微軟稱W32Time服務不能可靠地將同步時間保持在1至2秒的範圍內。[22]如果需要更高的精度,微軟建議使用其他NTP實現。[23]

Windows 10 與 Windows Server 2016 由版本 1607 開始,提供高精度的系統時間,支援1ms的時間精度。[24][25]

Ntimed

一個新的NTP客戶端ntimedPoul-Henning Kamp英語Poul-Henning Kamp在2014年開始編寫。[26]新的實現由Linux基金會贊助,作為參考實現的一個替代,因為它決定更容易地從頭開始編寫新的實現,而不是修復現有大型代碼庫的現有問題。截至2015年6月,它尚未正式發佈,但ntimed可以可靠地同步時鐘。[27]ntimedDebianFreeBSD上工作,但也被移植到Windows和Mac OS。[28]

閏秒

閏秒事件的當天,ntpd從設定檔、附加參考時鐘或遠端伺服器收到通知。因為時間必須是單調遞增,所以閏秒的插入方式為:23:59:59、23:59:60、00:00:00。雖然時鐘實際上在事件期間停止,但任何查詢系統時間的行程都會使它增加微小的量,以保持事件的順序。如果必要,在序列中刪除閏秒的形式為:23:59:58、00:00:00,跳過23:59:59。[29]

2038年問題

安全問題

2014年底,幾個安全問題被發現。在以前,研究人員發現NTP伺服器可能受到中間人攻擊的影響,除非封包被加密和簽章以驗證身份。[30]但這所涉及的計算量在繁忙的伺服器上可能是不切實際的,尤其是容易遭遇阻斷服務攻擊[31]NTP訊息欺騙可以被用來偏移客戶端電腦上的時鐘,並配合過期的加密金鑰來完成其他攻擊。[32]可能受到偽造NTP訊息影響的服務包括TLSDNSSEC、各類快取方案(例如DNS快取)、比特幣以及許多持久登入方案。[33][34]

有着25年以上歷史的NTP代碼庫中的參考實現中只發現了幾個其他的安全問題,但最近[何時?]出現的幾個引起了人們的強烈關注。[35][36]該協定正在對其整個歷史進行修訂和審查。截至2011年1月,在NTP規範中沒有安全修訂,也沒有在CERT協調中心的報告。[37]幾年來,該參考實現的當前代碼庫已經被多個來源進行安全審計,在當前發佈的軟件中沒有已知的高風險漏洞。[38]

多種NTP伺服器誤用和濫用英語NTP server misuse and abuse實踐的存在導致了對網路時間協定(NTP)伺服器的破壞或劣化。

NTP已經被用於分散式阻斷服務(DDoS)攻擊,[39][40]方法是將一個具有偽造的返回地址的小的查詢傳送到NTP伺服器。類似DNS放大攻擊,伺服器將以比攻擊者傳送數據量大很多倍的數據量回覆給偽造的目標。為了避免參與攻擊,伺服器可以組態為忽略外部查詢,或者升級到4.2.7p26或更高版本。[41]

一個緩衝區溢位漏洞已經被發現,並自2014年12月19日提供修補程式。漏洞覆蓋NTP第四版所有版本,自4.2.8修復。[42]蘋果公司首次使用自動更新功能解決該問題[43],不過這僅適用最近的MacOS版本。在10.6.8版本中,用戶可以手動修復伺服器版本,以及普通用戶可以在系統參數設置-日期和時間中關閉自動更新時間。[44]研究人員認為該協定的設計是相當好的,缺陷出現在協定的實現中。某些錯誤很基礎,例如常式中缺少返回陳述式,這可能導致某些執行在root權限下的NTP版本被利用以無限制的訪問系統。守護行程不使用root權限的系統(例如BSD)不受此缺陷的影響。[45]

參見

備註

  1. ^ 2−64秒大約54仄秒(zeptoseconds)(光行進16.26皮米,或大約0.31×玻爾半徑),264秒大約585億年

參考資料

  1. ^ 1.0 1.1 1.2 1.3 1.4 1.5 1.6 1.7 David L. Mills. Computer Network Time Synchronization: The Network Time Protocol. Taylor & Francis. 12 December 2010: 12– [2017-01-04]. ISBN 978-0-8493-5805-0. (原始內容存檔於2014-07-18). 
  2. ^ 2.0 2.1 2.2 Executive Summary: Computer Network Time Synchronization. [2011-11-21]. (原始內容存檔於2011-11-02). 
  3. ^ 3.0 3.1 3.2 3.3 NTP FAQ. The NTP Project. [2011-08-27]. (原始內容存檔於2011-09-06). 
  4. ^ Port Numbers. The Internet Assigned Numbers Authority (IANA). [2017-01-04]. (原始內容存檔於2001-06-04). 
  5. ^ Page 16. [2017-01-04]. (原始內容存檔於2018-01-01). 
  6. ^ David L. Mills. Computer Network Time Synchronization: The Network Time Protocol on Earth and in Space, Second Edition. CRC Press. 15 November 2010: 377. ISBN 978-1-4398-1464-2. 
  7. ^ Network Time Synchronization Research Project. [24 December 2014]. (原始內容存檔於2014-12-23). 
  8. ^ NTP Needs Money: Is A Foundation The Answer?. 資訊周刊. March 23, 2015 [April 4, 2015]. (原始內容存檔於2015-04-10). 
  9. ^ NTP's Fate Hinges On 'Father Time'. 資訊周刊. March 11, 2015 [April 4, 2015]. (原始內容存檔於2015-04-10). 
  10. ^ Network Time Protocol: Best Practices White Paper. [15 October 2013]. (原始內容存檔於2013-10-01). 
  11. ^ David L. Mills. The NTP Era and Era Numbering. 12 May 2012 [24 September 2016]. (原始內容存檔於2016-10-26). 
  12. ^ W. Richard Stevens; Bill Fenner; Andrew M. Rudoff. UNIX Network Programming. Addison-Wesley Professional. 2004: 582– [2017-01-04]. ISBN 978-0-13-141155-5. (原始內容存檔於2019-03-30). 
  13. ^ 德拉瓦大學 Digital Systems Seminar presentation by David Mills, 2006-04-26
  14. ^ Gotoh, T.; Imamura, K.; Kaneko, A. Improvement of NTP time offset under the asymmetric network with double packets method. Conference on Precision Electromagnetic Measurements: 448–449. 2002. ISBN 0-7803-7242-5. doi:10.1109/CPEM.2002.1034915. 
  15. ^ Network Time Protocol Version 4: Protocol and Algorithms Specification: 54. June 2010 [2012-08-26]. (原始內容存檔於2019-04-22). Primary servers and clients complying with a subset of NTP, called the Simple Network Time Protocol (SNTPv4) [...], do not need to implement the mitigation algorithms [...] The fully developed NTPv4 implementation is intended for [...] servers with multiple upstream servers and multiple downstream servers [...] Other than these considerations, NTP and SNTP servers and clients are completely interoperable and can be intermixed [...] 
  16. ^ RFC 2030
  17. ^ RFC 4330
  18. ^ RFC 5905
  19. ^ Archiveddocs. Windows Time Service Technical Reference: Windows Time Service. docs.microsoft.com. [2022-03-12]. (原始內容存檔於2022-07-06) (美國英語). 
  20. ^ Windows Time Service page at NTP.org. Support.ntp.org. 2008-02-25 [2011-01-12]. (原始內容存檔於2021-04-09). 
  21. ^ Archiveddocs. How Windows Time Service Works: Windows Time Service. docs.microsoft.com. [2022-03-12]. (原始內容存檔於2022-07-08) (美國英語). 
  22. ^ Support boundary to configure the Windows Time service for high accuracy environments. 微軟. 2011-10-19 [2017-01-04]. (原始內容存檔於2009-01-12). 
  23. ^ Ned Pyle. High Accuracy W32time Requirements. 微軟. 2007-10-23 [2012-08-26]. (原始內容存檔於2012-10-17). 
  24. ^ dahavey. Windows Server 2016 精确时间. docs.microsoft.com. [2022-03-12]. (原始內容存檔於2022-03-12) (中文(中國大陸)). 
  25. ^ dahavey. Support boundary for high-accuracy time. docs.microsoft.com. [2022-03-12]. (原始內容存檔於2021-05-02) (美國英語). 
  26. ^ Poul-Henning, Kamp. 20140926 – Playing with time again. PHK's Bikeshed. [4 June 2015]. (原始內容存檔於2017-02-13). 
  27. ^ Poul-Henning, Kamp. Network time synchronization software, NTPD replacement.. ntimed git repository README file. Github. [4 June 2015]. (原始內容存檔於2015-08-02). 
  28. ^ Poul-Henning, Kamp. 20150111 – What happened next?. PHK's Bikeshed. 2015-01-11 [4 June 2015]. (原始內容存檔於2016-11-14). 
  29. ^ David Mills. The NTP Timescale and Leap Seconds. [15 October 2013]. (原始內容存檔於2013-09-07). 
  30. ^ Network Time Protocol Version 4: Autokey Specification. IETF. 2010 [2014-10-16]. (原始內容存檔於2014-10-13). 
  31. ^ NTP Security Analysis. [11 October 2013]. (原始內容存檔於2013-09-07). 
  32. ^ Jose Selvi. Bypassing HTTP Strict Transport Security (PDF). 2014-10-16 [2014-10-16]. (原始內容存檔 (PDF)於2014-10-18). 
  33. ^ Aanchal Malhotra; Isaac E. Cohen; Erik Brakke & Sharon Goldberg. Attacking the Network Time Protocol (PDF). NDSS. 20 October 2015. (原始內容存檔 (PDF)於2015-10-22). 
  34. ^ Attacking the Network Time Protocol. www.cs.bu.edu. [2015-10-27]. (原始內容存檔於2015-10-24). 
  35. ^ Security Notice. Support.ntp.org. 2009-12-10 [2011-01-12]. [失效連結]
  36. ^ results returned by a search on "Network Time Protocol"[永久失效連結] at [1]頁面存檔備份,存於互聯網檔案館[原創研究?]
  37. ^ in RFC 778, RFC 891, RFC 956, RFC 958, RFC 1305, RFC 5905, and the NTPv4 specification頁面存檔備份,存於互聯網檔案館
  38. ^ Code Audit. Support.ntp.org. 2009-06-13 [2011-01-12]. 
  39. ^ Goodin, Dan. New DoS attacks taking down game sites deliver crippling 100Gbps floods. Ars Technica. 2014-01-13 [2014-01-25]. (原始內容存檔於2014-01-25). 
  40. ^ Lee, Dave. Huge hack 'ugly sign of future' for internet threats. BBC. 2014-02-11 [2014-02-12]. (原始內容存檔於2021-03-08). 
  41. ^ DRDoS / Amplification Attack using ntpdc monlist command. support.ntp.org. 2010-04-24 [2014-04-13]. (原始內容存檔於2014-02-19). 
  42. ^ Network Time Protocol Vulnerabilities (Update C) | ICS-CERT. Ics-cert.us-cert.gov. [2015-04-15]. (原始內容存檔於2014-12-20). 
  43. ^ Cunningham, Andrew. Apple automatically patches Macs to fix severe NTP security flaw. arstechnica. Dec 23, 2014 [Apr 29, 2015]. (原始內容存檔於2015-05-15). 
  44. ^ NTP vulnerability on versions prior to 4.2.8 -- we OK?. Apple Support Communities. [2017-01-04]. (原始內容存檔於2014-12-24). 
  45. ^ Fairhead, Harry. NTP The Latest Open Source Security Problem. I Programmer. 23 December 2014 [2017-01-04]. (原始內容存檔於2014-12-24). 

拓展閱讀

外部連結