本文件針對網路時間通訊協定 (NTP) 的常見問題,提供疑難排解的資訊。
思科建議您充分瞭解 NTP 的運作方式,並具備網路時間通訊協定相關知識。
本文件所述內容不限於特定軟體和硬體版本。
如需文件慣例的詳細資訊,請參閱思科技術提示慣例。
網路時間通訊協定 (NTP) 廣泛用於同步電腦與網際網路時間伺服器或其他來源(例如無線電、衛星接收器或電話數據機服務)。該協定精準到在 LAN 上通常不到一毫秒的誤差,而在 WAN 上最多只達幾毫秒的誤差。典型的NTP配置使用多個冗餘伺服器和不同的網路路徑,以實現高準確性和可靠性。
NTP 使用 Marzullo 演算法將時間與目前的 NTP 版本同步化。該協定可以在公用網際網路上保持 10 毫秒以內的誤差,而且在 LAN 上的效能更好。NTP 時間伺服器在 TCP/IP 套件中執行,並採用使用者資料報通訊協定 (UDP) 連接埠 123。
NTP 伺服器通常是專用的 NTP 裝置,使用單一時間參考來讓網路進行同步。此時間參考的來源通常是世界協調時間 (UTC)。UTC 是一種全球時間標準,由原子鐘透過網際網路、專業長波無線電傳輸或全球定位系統 (GPS) 所分配。資安、防護、準確性、合法性、控制都需要專用的 NTP 伺服器。
NTP 演算法使用該時間參考來決定系統或網路時鐘要前進或後退多少時間。NTP 會分析時間戳記值、錯誤發生率和穩定性。NTP 伺服器對參考時鐘和伺服器本身都會維持預估的品質。
本節列出 NTP 可能發生的常見問題,並針對每個問題提供解決方案。
思科路由器在設定為使用位於 Active Directory 的 NTP 伺服器時,無法接收來自 NTP 伺服器的任何 NTP 封包。該問題發生的原因是因為思科路由器使用 NTP,而 Active Directory 網域使用 W32Time 服務。W32Time 使用簡單網路時間協定 (SNTP) 來同步時間,該協定為 NTP 的子集。SNTP 和 NTP 皆使用相同的網路封包格式,但兩者最大的差異是 SNTP 未提供 NTP 所具備的錯誤檢查和篩選功能。思科路由器和交換器使用 NTP,並允許 NTP v3 提供的錯誤檢查和篩選功能。
Windows W32Time 服務則在內部實作 SNTP,而非使用 NTP。 嘗試與 W32Time 同步的 Cisco IOS-NTP 取得其根散佈值,並傳送至 W32Time,這會讓 Cisco IOS-NTP 的同步成本很高。因為 Cisco IOS-NTP 的根散佈值高於 1000 毫秒,所以本身無法進行同步處理(時鐘選擇程序)。 由於 Cisco IOS 路由器執行 NTP 的完整 RFC 實作程序,因此路由器不會同步到 SNTP 伺服器。在這種情況下, show ntp associations detail 命令的輸出結果會顯示系統將伺服器標示為異常、無效。根散佈值超過 1000 毫秒,導致 Cisco IOS NTP 實作程序拒絕建立關聯。如果 Cisco IOS 路由器為執行 W32Time 服務的 Windows 系統,可能就無法同步到 NTP 伺服器。如果伺服器不同步,路由器便無法傳輸至伺服器,也無法從伺服器接收封包。
為了解決此問題並同步 Cisco IOS 路由器,請使用網際網路上授權的 NTP 伺服器、執行 NTPD 的 UNIX box 或特定平台的 GPS。您也可以選擇不要在 Windows 系統上執行 W32Time 服務,改用 NTP 4.x。Windows 2000 以上所有版本的系統都可以做為 NTP 伺服器。網路上的其他機器則可以使用 NTP 來同步時間。
以下是路由器無法與公用時間伺服器保持同步的可能原因:
禁止 UDP 連接埠 123 封包通過的存取控制清單
公用時間伺服器故障
NT 或 UNIX 上的 NTP 伺服器軟體設定錯誤
路由器上的流量以及流向伺服器的流量更多
主要 NTP 和路由器定期失去同步
高CPU利用率
伺服器和路由器間的時差值偏高(請使用 show ntp association detail 命令檢查這個問題)
如果感應器嘗試同步到回報階層為 15 的伺服器,就會顯示這則錯誤訊息。 這是因為伺服器階層值為 15 時,感應器階層為 16,這並不合法。因此,感應器就會改為拒絕伺服器,並顯示「階層過高 - 從感應器到主要 NTP 伺服器的間接流量過多」錯誤訊息。
NTP使用層的概念來描述一台機器與權威時間源相隔的NTP 跳數。該錯誤訊息表示 NTP 伺服器回報的 NTP 階層過高。階層值介於 1 到 15 之間,表示伺服器與精確參考時鐘的差距有多少。直接同步到原子鐘的一般系統會回報為階層 1。如果一部主機同步到階層 1 的 NTP 伺服器,但同時做為其他主機的 NTP 伺服器,該主機就會對其他主機回報自己為階層 2,每個連續的伺服器層級都具備比上層層級高一級的階層。
如果您使用 Linux 主機做為 NTP 伺服器,請對該主機回報的階層進行硬式編碼,而不要讓其自動計算階層。如果您使用的是 Linux 或 UNIX box,則 NTP 伺服器會由檔案 /etc/ntp.conf 進行設定,並使用 fudge 命令對階層進行硬式編碼。伺服器一律會向用戶端回報一個高於 fudge 值的階層值。
修訂 | 發佈日期 | 意見 |
---|---|---|
1.0 |
07-Oct-2008 |
初始版本 |