目錄

前言
NTP 基本概念
分層架構
Peer to Peer
NTP Master
Broadcast

前言

相信大家對於 Network Time Protocol (NTP) 並不陌生,NTP 提供校準時間服務,準確的時間對伺服器相當重要,所有 Schedule Job 及 Transaction 無不根據系統的時鐘執行和記錄。雖然網絡設備的時間沒有比伺服器重要,但保持所有設備時間準確及一致有助於紀錄檔管理及除錯。本文介紹 NTP 的基本概念及 IOS 中 NTP 的設定指令。

NTP 基本概念

原理很簡單,多台系統透過 NTP 溝通然後把時間變成一致,預設使用 UDP Port 123。問題是,哪台系統才是正確的時間呢?這不是我們小市民能夠決定的,需要各地政府幫忙。話說各地政府都有提供準確時間的主機,例如在香港的標準網絡時間主機是 stdtime.gov.hk,由香港天文台提供;而台灣則是 time.stdtime.gov.tw,由時間與頻率標準實驗室提供。不相信政府的話也可使用 Google 的服務,主機是 time.google.com。

分層架構

各地政府用高端科學儀器得到準確時間並且同步,誤差極微,這些科學原理留給科學家研究,網絡管理人員現在要做的是把本地網絡裡面的主機跟標準時間同步。IOS 指令如下:

R1(config)#ntp server time.google.com
Translating "time.google.com"...domain server (216.239.35.0) [OK]

IOS 會把 domain 轉回 IP Address 才放進設定,在 R1 與 Google Time Server 這段關係中,R1 是 Client,Google 是 Server,只有 Server 可以提供時間給 Client,現在看看 show ntp status

R1#show ntp status
Clock is synchronized, stratum 2, reference is 216.239.35.0
nominal freq is 119.2092 Hz, actual freq is 119.2090 Hz, precision is 2**18
reference time is DF88E6C4.B9AF22CA (11:32:20.725 HK Sun Nov 4 2018)
clock offset is 6.5052 msec, root delay is 177.86 msec
root dispersion is 7.68 msec, peer dispersion is 0.81 msec

Stratum 的意思是 NTP 層數,由 0 至 16,從下圖可見,數值 0 代表時鐘源頭,其後 1 至 15 數字越小代表越接近源頭,Stratum 16 則被定義為「無法同步」。如 Client 同時收到不同的 NTP 時間,只會選擇 Stratum 值最小的進行同步,此基制限制了時間同步的單向性 (從上游到下游),防止 Loop 發生。以上面的設定為例,由於 Google Time Server 是 Stratum 1,R1 是 Client 從 Stratum 1 拿到時間,順理成章便是 Stratum 2 了。

ntp

圖片來源

但我們用不著把網絡內所有設備都連上 Internet 再與 Stratum 1 同步,其他設備只要跟 R1 同步便可以,用以下網絡為例,假設網絡全部以 192.168.XY.0/24 連接,X 與 Y 為 Router 編號。

ntp

設定 NTP 指令如下:

R2(config)#ntp server 192.168.12.1
R3(config)#ntp server 192.168.13.1

由於 R2 和 R3 都從 Stratum 2 得到時間,因此成為 Stratum 3。

R2#show ntp status
Clock is synchronized, stratum 3, reference is 192.168.12.1       
nominal freq is 250.0000 Hz, actual freq is 250.0000 Hz, precision is 2**18
ntp uptime is 1500 (1/100 of seconds), resolution is 4000
reference time is DF895CB0.D8808877 (11:55:28.845 UTC Sun Nov 4 2018)
clock offset is 23.8463 msec, root delay is 32.33 msec
root dispersion is 3996.70 msec, peer dispersion is 187.61 msec
loopfilter state is 'CTRL' (Normal Controlled Loop), drift is 0.000000005 s/s
system poll interval is 64, last update was 10 sec ago.

Peer to Peer

思考一個情況,如 R1 與 R2 之間的網絡中斷,則 R2 無法取得 Stratum 2 的準確時間。我們可以建立 Peer to Peer 連接作後備 NTP 路徑,當 R2 無法從上層進行 NTP 連接時,才會接受來自 R3 的同步。Peer to Peer 的最大不同之處是:Peer 之間是可以互相接受對方的同步。

ntp

R2(config)#ntp peer 192.168.23.3
R3(config)#ntp peer 192.168.23.2

在 R2 用 show ntp associations 可見現時有 2 個 NTP Connection,分別是 R1 和 R3,R2 選擇與 R1 同步,因為 Stratum 值較小。

R2#show ntp associations 

  address         ref clock       st   when   poll reach  delay  offset   disp
*~192.168.12.1    223.255.185.2    2     32    128    17  8.089 -46.823  2.071
 ~192.168.23.3    192.168.13.1     3      5    128     3  0.309 -25.584  0.711
 * sys.peer, # selected, + candidate, - outlyer, x falseticker, ~ configured

R2# 
R2#show ntp status | i stratum
Clock is synchronized, stratum 3, reference is 192.168.12.1

如果把 R1 與 R2 之間的 Connection 斷開,過了一陣子,R2 就會選擇與 R3 同步時間。

R2(config)#int ethernet 1/0
R2(config-if)#shutdown
R2(config-if)#end
R2#
R2#show ntp status | i stratum
Clock is synchronized, stratum 4, reference is 192.168.23.3

NTP Master

如有整個內聯網絡都不能與 Internet 連接的情況,我們仍希望所有設備的時間保持同步,則可自設 NTP Master Server。

先把時鐘設定好:

R1#clock set 18:00:00 28 Jan 2018

然後設定成 NTP Master Server,本例子把 Stratum 設成 1,Stratum 設得越大,則可容納下層數目就越少,所以建議不要設太大,如沒特別考慮,設 1 便好了。這樣子,R1 便成為了一台以自己為 Time Source 的 NTP Server。

R1(conf)#ntp master 1
R1#show ntp status               
Clock is synchronized, stratum 1, reference is 127.127.1.1    
nominal freq is 250.0000 Hz, actual freq is 249.9999 Hz, precision is 2**17
ntp uptime is 945700 (1/100 of seconds), resolution is 4016
reference time is DE189000.C4A4DBEB (18:08:00.768 UTC Sun Jan 28 2018)
clock offset is 0.0000 msec, root delay is 0.00 msec
root dispersion is 0.44 msec, peer dispersion is 0.23 msec
loopfilter state is 'CTRL' (Normal Controlled Loop), drift is 0.000000233 s/s
system poll interval is 16, last update was 14 sec ago.

Broadcast

除了 UDP 這種 Server-client 機制外,NTP 也支緩 Broadcast,頗適合需為網絡中大量設備同步時間之用。假設以下 Topology 中 R1 把 NTP 時間 Broadcast 至網絡,R2 及 R3 接收,指令如下:

ntp

R1(config)#interface eth 1/0 
R1(config-if)#ntp broadcast
R2(config)#interface eth1/0
R2(config-if)ntp client broadcast
R3(config)#interface eth1/0 
R3(config-if)ntp client broadcast