登录站点

用户名

密码

一些关于NTP的总结

热15已有 293 次阅读  2010-11-13 12:39   标签:  NTP 

    NTP也就是网络时间协议,简单的说就是一种被用来同步网络设备时钟的协议。

    这里首先有一个概念,为什么要同步网络设备的时钟?

    我的想法是这样的:在我们自己搭建模拟器做实验的时候,所有的时钟其实都是同步的,因此我们感觉不到什么问题。但是实际环境中,尤其是在一个已经同步了时间的设备群中添加新的设备时,如果时钟没有做好同步,后果很严重。因为许多协议,最简单的,许多路由协议,都会根据数据包中携带的时间和自己的时间对比去判断一些信息,如果时间同步做的很差,那么轻则路由起不来或者受影响,重则整个网络都受到牵连,谁愿意一些带着错误时间的数据包在自己的网络里边跑来跑去呢?

NTP基本概念:

l  大多数思科路由器有两个时钟,一个硬件时钟一个软件时钟(在命令中一个是calendar一个是clock),这两个时钟是分开的。系统的时钟是软件时钟,当一个路由器的硬件时钟初始或者重启了,软件时钟初始以硬件时钟为准。

l  默认的时区是UTC也就是格林尼治时间。

l  NTP就是一种用来同步设备的软件时钟的协议,基于UDP,在IP网络上传输。一个NTP网络通常从一个比较权威的时间源获得时间,然后通过NTP将这个时间传到各个设备上,这之中效率通常很高所以时间误差很小。

l  NTP用stratum(层)来描述路由器与权威时钟之间的距离,比如stratum 1就是最原始的也是第一台设备(通常是时间源),然后stratum 2是离它稍远的设备,stratum 3更远一些,以此类推。

l  NTP关系建立后,还是要符合一些原则。1、从来不和没有同步时间的路由器进行同步。2、如果与多个设备建立同步关系,那么会比较这些设备的时钟,不和差别比较大的设备同步,即使那台设备的stratum比较小。

配置NTP:

NTP在配置方法上有很多选择,你可以配置基于广播的NTP,也可以建立同步关系。

通过建立同步关系配置NTP的时候,有两种模式可以给你选择——1、客户模式;2、主动模式。

建立同步关系这个方法最好在网络要求时间精确可靠地传输的时候使用。

1.         在客户模式中,通过ntp server命令来实现连接,server不会接受任何client发来的时钟信息,而且server应该是一个相对权威的时钟源。Server在一定时间里发送轮询时钟信息,指向了其的client会接收信息并且与之同步。

2.         在主动模式中,通过ntp peer命令来实现连接,host都会发送轮询时间信息,建立了peer的host的会进行同步。

命令:

Router(config)# ntp peer ip-address [normal-sync] [version

number] [key keyid] [source interface] [prefer]

路由器愿意允许对方同步自己或者允许自己跟对方同步时,用来建立一个对等体连接。

Router(config)# ntp server ip-address [version number]

[key keyid] [source interface] [prefer]

路由器需要与别的NTP时钟源同步的时候,用来确定一个同步关联。


在LAN环境中,host数目太多的时候,一个一个建立对等关系太麻烦了,这时候可以用上广播(当然多播也可以,不过需要修改地址)。

客户端开启ntp broadcast client命令去侦听NTP广播,时间源设备配置ntp broadcast进行广播。

命令:

Router(config-if)# ntp broadcast [version number]              用来发送广播。

Router(config-if)# ntp broadcast client                        用来接收广播。

 

 

其他命令:

l  NTP控制访问

Router(config)# ntp access-group {query-only | serve-only | serve | peer} access-list-number

创建一个access-group控制对NTP的访问。

query-only只允许从所列的IP进行NTP控制查询,NTP控制查询被用于代替SNMP管理站进行NTP进程的监控。

server-only只允许访问列表中所列出的IP地址进行时间请求,该路由器不会将自己的时间同步到远程系统。

Server允许进行时间的请求和控制查询,但是该系统不会将自己的时钟同步到远程系统。

Peer允许进行实践请求和控制查询,并且允许该路由器将自己的时钟同步到远程系统。

 

l  NTP验证

Step 1 Router(config)# ntp authenticate

开启验证。

Step 2 Router(config)# ntp authentication-key number md5 value

定义key,还有是否需要用mad5加密。

Step 3 Router(config)# ntp trusted-key key-number

如果key是被信任的则进行同步。

 

l  关闭NTP服务

Router(config-if)# ntp disable

在接口关闭NTP服务。

 

l  配置NTP源IP

Router(config)# ntp source interface

指定一个NTP的源。

 

l  配置NTP为Server

Router(config)# ntp master [stratum]

让路由成为server并且可指定层的数值。

 

l  更新硬件时钟

Router(config)# ntp update-calendar

更新硬件时钟。


一些应用上的总结:

首先是关于验证的问题。配置验证的时候我们需要注意首先我们要在有同步关系的设备上都开启验证。

NTP的验证和路由的验证不同,路由的验证的目的是要让对方确认自己的身份然后建立安全通信。但是NTP的验证的要验证的是时钟源的权威性。因为NTP中最重要的是要收到最准确的时钟信息,不能让别人随便就可以修改自己的时钟信息。

从这个角度上说,NTP的验证在开启了以后,验证的实际工作只是发生在需要同步的那个设备上,在客户模式中就是只有客户在进行验证工作,验证什么?验证给自己发时钟同步的时钟源是不是合法的时钟源。

所以通常一个正确的NTP配置中可以发现trust-key和建立同步关系时跟上一个key命令都是在需要同步的那一端做的。如果你做在时钟源那一端,那么不管你配置多少命令都是白搭,时钟源才不会验证自己要去同步的设备,因为不管他同步谁,对自己都没坏处。


还有一个问题就是source的问题。

有的时候在敲上ntp source lo 0这样的命令的时候,往往会认为设备就只是用lo0这个端口或者说这个端口地址去发送时钟信息。

但是实验效果其实是,加上这条命令以后,需要同步的设备同时也在告诉时钟源,请把时钟同步信息发到lo0这个地址上,其实source这条命令的作用的应该是去告诉时钟源一个目的地址。只是意味着需要同步时钟的那台设备在用这个source去请求同步。

所以最后总结就是,NTP的配置其实只用关注需要同步的那台设备,很简单,还是那句话:时钟源才不会管自己的同步信息发给了谁,同步别人对自己没有坏处。但是被别人同步了,才是需要注意的。


以上总结均出自实际试验结果,如有错漏,请毫不客气的拍砖吧~

分享 举报

发表评论 评论 (8 个评论)

  • hflaq 2010-11-13 18:39
  • mast 2010-11-15 09:49
    Cisco的很多设备都是没有硬件时钟的,一般高端的设备才有。
  • samxyh66 2010-11-15 22:05
    mast: Cisco的很多设备都是没有硬件时钟的,一般高端的设备才有。
    啊,这点遗漏了,恩,倒是有一个想法不知道对不对,没有硬件时钟的设备每次重启时间应该会初始化吧。。。
  • mast 2010-11-16 08:35
    samxyh66: 啊,这点遗漏了,恩,倒是有一个想法不知道对不对,没有硬件时钟的设备每次重启时间应该会初始化吧。。。
    是的,没有硬件时钟的设备重启后,设置的时间就没了,通常需要设置一台NTP服务器,或用高端如65系列的来做NTP服务器。
  • danielahj123 2010-11-16 08:59
    总结很不错
  • 风中细语 2010-11-16 09:43
    请教几个问题,时钟源在发送时间同步的消息时,是广播还是组播?客户端用source指定了用哪个端口接收时钟同步消息后,时钟源是如何如何得知这一端口的,应该有个协商过程吧?因此,时钟源和客户端建立关系的时候,需要交换哪些信息?
  • samxyh66 2010-11-16 13:20
    风中细语: 请教几个问题,时钟源在发送时间同步的消息时,是广播还是组播?客户端用source指定了用哪个端口接收时钟同步消息后,时钟源是如何如何得知这一端口的,应该有个
    轮询模式中用的是单播,而广播模式用的是广播,如果把广播模式中的目的地址改成多播地址的话,那就是用多播传输,但是所有需要请求同步的设备就都要加入相应的多播组中。关于source这个命令我确实写的不够严谨,其实就是客户端用source指的端口的地址去发信息,然后时钟源就会把时钟信息回复到这个地址上去。根据抓包里的信息来看,首先是双方交换自己的时钟信息,比如客户端时钟信息全为null,表示请求时钟信息,然后再交换各自的层的信息,这两步完成后关系就建立了。
  • 风中细语 2010-11-17 20:41
    samxyh66: 轮询模式中用的是单播,而广播模式用的是广播,如果把广播模式中的目的地址改成多播地址的话,那就是用多播传输,但是所有需要请求同步的设备就都要加入相应的多
    了解,多谢:)
涂鸦板