目录

前言
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