有效网络管理的关键之一是所有网络设备上的时钟同步。

当出现问题时,您需要查看日志消息并找出重要信息,例如哪个设备首先发现了问题。这会自动告诉您从哪里开始寻找根本原因。如果您的时钟不同步,则在设备之间关联日志消息会变得更加困难。

一般来说,您想知道您所看到的类似日志消息是否与同一事件有关,或者其中某些消息发生的时间早或晚。并且与此相关,您是否每天大约在同一时间看到类似的问题?

同步网络设备上的时钟的另一个重要原因是,它们可以依次为同一站点的其他设备提供时间服务。

如何在网络设备上同步时钟

实际上,有两种同步时钟的方法。

第一种是通过登录到每个网络设备并手动针对某些常见来源(如手表)设置时钟来手动执行此操作。

这是一个糟糕的解决方案。

每个设备中的时钟可能会在随机方向上略有滑动,因此到一天结束时,最快和最慢的时钟之间可能会相差几秒钟。然后,您明天需要重新做一次。而且,登录所有这些设备并手动设置时钟非常耗时。

第二种方法是使用自动时间同步协议。有两种常用的。

我们通常使用的是 网络时间协议 (NTP)。它是一种成熟的协议,已经存在了数十年,目前已是第四版。 NTP的精确度约为1毫秒,尽管如果精心设计网络并可以访问自己的Stratum 1时钟,使用NTPv4可以达到亚毫秒级的精度。 (我稍后将解释这是什么意思。)

另一种常见的时间同步协议称为 精确时间协议 (PTP)或IEEE1588。此协议能够将时钟同步到亚微秒精度。但是,它的部署更加复杂,并且无法在网络设备上普遍使用。

对于大多数应用,NTP就足够了。

人们倾向于将PTP用于很长时间的应用程序。这包括工业和金融(股票交易)应用程序。

尤其是电网,需要极高的精度来确保60Hz(或在许多地方为50Hz)交流电流的相位正确匹配。如果相位不匹配,则会断电。功率损失就是热量。因此,失去大量能量可能会产生大量热量。在这种环境下,时钟不同步可能导致火灾或设备损坏。

在60Hz时,一个完整周期约为17ms。如果要将相位匹配到1%以内,则需要将时钟同步到170微秒。这只是NTPv4的功能范围,而以前的版本则不行。在其他工业应用中,甚至需要更高的精度。

为什么很难同步时钟

精确的时钟同步提出了几个有趣的问题。首先是等待时间。

如果我发送给您一个说将您的时钟设置为12:00的数据包,则您需要非常准确地知道该数据包到达您的时间。您可以通过向服务器发送数据包并仔细记下获得响应所花费的时间,来很好地猜测该数据包到达您的时间。

这假设到服务器的路径与从服务器的路径相同,这在大多数现代网络中通常是一个相当合理的假设。它还假定服务器能够即时转回响应,这显然不是那么准确。因此,NTP协议通过添加额外的时间戳来完善数据包在各端的发送和接收时间。

您还需要有关该网络延迟的一些统计信息,以便您了解由于链路繁忙而偶尔需要缓冲数据包时,它随时间变化多少。

然后,您需要跟踪一个叫做 时钟偏斜 。这是时钟精度的定量度量。是快还是慢?随着时间的流逝,它会逐渐加速和减速吗?

通过仔细统计每次服务器上有新的时间信息时需要调整多少时钟,可以估算所有这些参数。

数据包在从服务器到同步时钟的途中需要穿越的网络跳越多,出现较小随机排队延迟的机会就越大。由于我们正在收集有关延迟的统计信息,因此该协议仍然能够获得不错的结果。但是很明显,随机延迟的来源越多,这些统计信息的准确性就越低。

而且,除了所有这些问题之外,我们理想情况下还希望将时间同步数据包的总数保持在相对较低的水平,以避免在网络或NTP服务器上造成拥塞。因此,一旦建立了可靠的同步,NTP就会非常巧妙地调整计时器,以缩短发送给服务器的请求之间的时间。

将NTP设计到网络中

NTP是一种分层协议。源时钟称为 1层 。从原始源同步的时钟为Stratum2。与Stratum 2时钟同步的时钟称为Stratum 3,依此类推。

典型的NTP网络设计涉及使用一对Stratum 1时间源。使用多个时钟源可提高整体精度,并在某些时钟暂时无法到达的情况下提供一些冗余。

公共互联网上有几个免费的Stratum 1时钟。参考 http://ntp.org/ 有关负载平衡的公共NTP服务器的有用列表。

通常,您会希望使用离您最近的服务器来最大程度地减少网络跳数。为解决此问题,NTP.org网站包含按地理位置排序的可公开使用的NTP服务器列表。

通常,您需要在网络中拥有少量服务器,作为您组织的Stratum 2服务器。我喜欢使用Active Directory域控制器或一些靠近Internet边缘的网络设备,例如防火墙或路由器。

同样,出于可靠性的原因,您应该有一些Stratum 2服务器。然后,您可以使所有其他内部设备将它们的时钟同步到这些Stratum 2服务器,以便仅需Stratum 3。

在具有多个数据中心或多个地理位置不同的Internet连接的组织中,我希望在每个位置至少放置我的主要Stratum 2服务器之一。

请注意,您应该 除非它们是防火墙,否则将Stratum 2设备直接暴露于Internet。 NTP实施中可能存在可能损害网络安全性的错误。

如果您需要特别精确的时钟同步,则值得研究一台独立的Stratum 1服务器。这些可以作为您安装在数据中心中的设备购买。您自己的Stratum 1服务器意味着您不依赖外部资源,并且可以控制设备之间的延迟。

通常有两种类型的Stratum 1设备。较便宜的品种带有天线,并从GPS卫星网络获取时钟信号。较昂贵的时钟有自己的内部原子时钟(通常使用Rub振荡器)或其他一些高精度时钟。这些时钟需要从某个外部源获取其初始时间信号。

思科NTP配置

在Cisco设备上配置NTP非常简单。您只需要指向要与之同步的服务器即可。

!
ntp server 192.168.1.1
!

在ASA防火墙上,此配置略有不同,因为您需要指定用于连接NTP服务器的接口。

!
ntp server 192.168.1.1 source management
!

除了这些命令之外,在某些路由器和交换机型号上,您还希望让NTP更新硬件时钟,而不是仅仅试图跟踪软件中的时间。这提供了更高的准确性。

!
ntp update-calendar
!

对于边缘设备,您可能需要使用DNS名称。这要求您的设备也配置为使用DNS。然后,您可以指定在 NTP.org列表 .

!
ntp server 0.north-america.pool.ntp.org
ntp server 1.north-america.pool.ntp.org
!

请仔细检查 使用这些公共池的限制和准则 在使用它们之前。

其他时间考虑

在本文的开头,我提到了在网络设备上同步时钟的重要原因之一是允许日志消息相关。因此,您还需要确保您的设备在每条日志消息中都包含时间戳记。

!
logging enable
logging timestamp
!

我还希望将日期包括在时间戳中,因此我可以轻松查看日志消息,并知道它是今天还是几周前。

!
service timestamps debug datetime msec localtime show-timezone
service timestamps log datetime msec localtime show-timezone
!

当然,您需要设置适当的时区。这些命令中的第一个命令将此设备上的时区设置为EST,这是UTC(英国伦敦)以西5小时的时间。第二条命令表明我们遵守正常的夏令时规则。

!
clock timezone EST -5
clock summer-time EDT recurring
!

关于将设备时钟设置为哪个时区,有几种不同的观念。有些人喜欢将设备上的时区设置为该设备的实际位置。

有些人喜欢将所有设备上的时区设置为公共的中央区域,通常是网络管理人员所在的区域。

在遍布全球的超大型网络中,尤其是当网络管理人员位于许多不同地方时,第三种方法很有意义,就是简单地将时钟设置为UTC(-0)。