Can you summarize the following document?
        
  1979年,網路時間同步技術在紐約的國家計算機會議上於執行在跨大西洋衛星網路的網際網路服務上公開演示,這可能是該技術的首次公開演示。該技術後在1981年網際網路工程筆記(IEN)173中描述,並根據RFC 778文件開發為一個公開協議。該技術首先被部署在一個本地網路,作為Hello路由協議的一部分,並在Fuzzball(一個用於網路原型的實驗作業系統,已執行多年)中實現。  現在還有其他的相關網路工具。這包括Daytime和Time協議用以記錄事件時間,以及網際網路控制訊息協議和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在IEEE Transactions on Communications釋出的一篇文章得到了工程學界的更廣泛關注。  1989年,RFC 1119釋出通過有限狀態機定義的NTPv2,使用虛擬碼來描述其操作。它引入了一個管理協議和加密認證方案,它們留存至NTPv4。社群批評NTP的設計缺乏形式正確性原則。他們的替代設計包括Marzullo演算法,其修改版本已及時新增到NTP。這個時代的大多數演算法也大部分留存至NTPv4。  1992年,RFC 1305定義了NTPv3。該RFC包括一個對所有錯誤來源的分析,從參考時鐘至最終客戶端,這使幫助度量和選擇最佳伺服器成為可能(在其中幾個候選者反對的情況下)。廣播模式被引入。  在接下來的幾年裡,隨著新特性的新增和演算法的改進,顯然還需要一個新的協議版本。2010年,RFC 5905釋出了一個對NTPv4的建議規範,但該協議自那時以來已經顯著改變,截至2014年,更新的RFC尚未釋出。在Mills從特拉華大學退休後,該參考實現目前由Harlan Stenn保持為一個開放原始碼專案。

  NTP使用一個分層、半分層的時間源系統。該層次的每個級別被稱為“stratum”,頂層分配為數字0。一個通過階層n同步的伺服器將執行在階層n + 1。數字表示與參考時鐘的距離,用於防止層次結構中的迴圈依賴性。階層並不總是指示質量或可靠性;在階層3的時間源得到比階層2時間源更高的時間質量也很常見。電信系統對時鐘層使用不同的定義。以下提供了階層0、1、2、3的簡要描述。  階層的上限為15;階層16被用於標識裝置未同步。每臺計算機上的NTP演算法相互構造一個貝爾曼-福特演算法最短路徑生成樹,以最小化所有客戶端到階層1伺服器的累積往返延遲。

  NTP使用64位元的時間戳,其中32位元表示秒,32位元表示秒的小數,給出一個每2秒(136年)才會翻轉的時間尺度,理論解析度2秒(233皮秒)。NTP以1900年1月1日作為開始時間,因此第一次翻轉將在2036年2月7日發生。  NTP的未來版本可能將時間表示擴充套件到128位元:其中64位元表示秒,64位元表示秒的小數。當前的NTPv4格式支援“時代數字”(Era Number)和“時代偏移”(Era Offset),正確使用它們應該有助於解決日期翻轉問題。據Mills稱:“64位元的秒小數足以分辨光子以光速通過電子所需的時間。64位元的秒足以提供明確的時間表示,直到宇宙變暗。”

  典型的NTP客戶端將定期輪詢不同網路上的三個或更多伺服器。為同步其時鐘,客戶端必須計算其時間偏移量和來回通訊延遲。時間偏移“θ”定義為: 往返延遲“δ”為: 其中:  “θ”和“δ”的值通過過濾器並進行統計分析。異常值被剔除,並從最好的三個剩餘候選中匯出估算的時間偏移。然後調整時脈頻率以逐漸減小偏移,建立一個反饋迴路。  當客戶端和伺服器之間的輸入和輸出路由都具有對稱的標稱延遲時,同步是正確的。如果路由沒有共同的標稱延遲,則將差異取半作為測量誤差。

  

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

  一個不太複雜的NTP實現,使用相同的協議但不需要儲存較長時間的狀態,也稱簡單網路時間協議(Simple Network Time Protocol,SNTP)。它使用在某些嵌入式系統和不需要高精度時間的應用中。

  從Windows 2000起的所有Microsoft Windows版本都包括Windows時間服務(W32Time),其具有將計算機時鐘同步到NTP伺服器的能力。  W32Time服務最初是為實現Kerberos第五版的身份驗證協議,它需要誤差5分鐘內正確時間值以防止重放攻擊。Windows 2000和Windows XP中只實現了簡單的NTP,並在幾個方面違反了NTP第3版的標準。從Windows Server 2003和Windows Vista開始,已包括符合完整NTP的實現。微軟稱W32Time服務不能可靠地將同步時間保持在1至2秒的範圍內。如果需要更高的精度,微軟建議使用其他NTP實現。  Windows Server 2016現在在某些操作條件下支援1ms的時間精度。

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

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

  2014年底,幾個安全問題被發現。在以前,研究人員發現NTP伺服器可能受到中間人攻擊的影響,除非資料包被加密和簽名以驗證身份。但這所涉及的計算量在繁忙的伺服器上可能是不切實際的,尤其是容易遭遇阻斷服務攻擊。NTP訊息欺騙可以被用來偏移客戶端計算機上的時鐘,並配合過期的加密金鑰來完成其他攻擊。可能受到偽造NTP訊息影響的服務包括TLS、DNSSEC、各類快取方案(例如DNS快取)、比特幣以及許多持久登入方案。  有著25年以上歷史的NTP程式碼庫中的參考實現中只發現了幾個其他的安全問題,但出現的幾個引起了人們的強烈關注。該協議正在對其整個歷史進行修訂和審查。截至2011年1月,在NTP規範中沒有安全修訂,也沒有在CERT的報告。幾年來,該參考實現的當前程式碼庫已經被多個來源進行安全審計,在當前釋出的軟體中沒有已知的高風險漏洞。  多種NTP伺服器誤用和濫用實踐的存在導致了對網路時間協議(NTP)伺服器的破壞或劣化。  NTP已經被用於分散式拒絕服務(DDoS)攻擊,方法是將一個具有偽造的返回地址的小的查詢傳送到NTP伺服器。類似DNS放大攻擊,伺服器將以比攻擊者傳送資料量大很多倍的資料量回復給偽造的目標。為了避免參與攻擊,伺服器可以配置為忽略外部查詢,或者升級到4.2.7p26或更高版本。  一個緩衝區溢位漏洞已經被發現,並自2014年12月19日提供補丁。漏洞覆蓋NTP第四版所有版本,自4.2.8修復。蘋果公司首次使用自動更新功能解決該問題,不過這隻適用最近的MacOS版本。在10.6.8版本中,使用者可以手動修復伺服器版本,以及普通使用者可以在系統首選項-日期和時間中關閉自動更新時間。研究人員認為該協議的設計是相當好的,缺陷出現在協議的實現中。某些錯誤很基礎,例如例程中缺少返回語句,這可能導致某些執行在root許可權下的NTP版本被利用以無限制的訪問系統。守護程序不使用root許可權的系統(例如BSD)不受此缺陷的影響。
網路時間協議(英語:Network Time Protocol,縮寫:英語:NTP)是在資料網路潛伏時間可變的計算機系統之間通過分組交換進行時鐘同步的一個網路協議,位於OSI模型的應用層。自1985年以來,NTP是目前仍在使用的最古老的網際網路協議之一。NTP由特拉華大學的David L. Mills設計。