網路時間協定

本頁使用了標題或全文手工轉換
維基百科,自由的百科全書

網絡時間協議(英語: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架構、協議和算法通過David L. Mills英語David L. MillsIEEE Transactions on Communications英語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). 

拓展閱讀[編輯]

外部連結[編輯]