《NetBSD指南-28.2.网络事件协议(NTP)》

NetBSD用户指南中文版、NetBSD pkgsrc指南中文版...

版主: lionux

主题已锁定
头像
leo
帖子: 2465
注册时间: 2010-01-21 3:27

《NetBSD指南-28.2.网络事件协议(NTP)》

帖子 leo » 2010-03-08 2:55

系统时钟常出现误差, 通常是几分钟: 最可能的原因是计算机时钟不够精确。如果你管理着很多网络主机,这个问题会变得更糟糕: 同步时钟会变成你的噩梦。这个问题可通过NTP 协议(版本3) 解决: 利用此协议可以在一个工作站网络内使用一台或多台NTP服务器来同步时钟。

感谢NTP协议,它不但可以调整单个工作站的时钟,而且可以同步整个网络的时钟。NTP协议很复杂, 定义了一个主-从等级结构,将服务器类似地层似的分层设置: 层次结构的顶部是第一层服务器, 连接到一个外部的时钟(例如无线电时钟) 以确保时间的精确度。 在其下的的第二层的服务器将时间与第一层服务器同步, 剩下的以此类推。 精确度逐渐降低,因为处理过程由高至低。 这种层次结构避免了拥挤,也就是让所有的主机都同步同一台几台第一层服务器可能产生的拥挤现象。 如果, 举例来说, 你想同步一个网络, 你不将所有的主机连接到第一层的同一台服务器上,而是用一台本地服务器连接主服务器,然后让本地主机与本地服务器同步。

幸运的是, 使用NTP工具你不必理解协议的细节以及其实施方法 (如果你确实感兴趣,参RFC 1305) ,你只需要知道怎样配置和启动一些程序就可以了。 NetBSD的基本系统内已经包含了使用此协议的必备工具(以及其它一些和时间相关的协议, 我们将看到), 来自 xntp 。 本小节描述了一个简单的方法以保证系统时间永远正确。

首先, 有必要先找到一个公共NTP服务器用来作为一个参考; 具体的细节在 http://ntp.isc.org/bin/view/Servers/WebHome. 举个例子, 对意大利来说,可以使用两个第一层的时间服务器 ntp1.ien.it 和 ntp2.ien.it 。

接着, 以root的身份运行下列命令调整系统时钟:

代码: 全选

# ntpdate -b ntp1.ien.it ntp2.ien.it
(请读者将本例中的服务器替换为自己实际使用的服务器。选项 -b 通知 ntpdate 将系统时间设置为settimeofday系统调用, 而不是系统默认的用adjtimehui回转方式。当本地时间与实际时间有很大误差时建议开启此选项。

看见了吧, ntpdate不难使用。下面的步骤就是将其设置为自动启动, 以保证永远拥有正确的时间。如果你有一个永久的Internet连接, 你可以在/etc/rc.conf内添加下行以便启动系统时运行该程序 :

代码: 全选

ntpdate=YES      ntpdate_hosts="ntp1.ien.it"
NTP服务器使用的名称在 ntpdate_hosts 变量里指定; 如果你这里是空的, boot script将尝试从/etc/ntp.conf 文件内提取出该名称。

如果你没有永久的Internet连接 (例如,你有一个连接到ISP的拨号的modem),你可以从 ip-up 脚本启动ntpdate, 就像在 Chapter 23, 在NetBSD上实际设置TCP/IP 描述的那样。这种情况下添加下行到 ip-up 脚本:

代码: 全选

/usr/sbin/ntpdate -s -b ntp1.ien.it
(这个路径是强制性的,否则脚本可能会找不到执行文件)。 选项 -s 将默认标准输出的logging输出转移到系统的 syslog(3) 设备上, 也就是意味着来自ntpdate的信息最后会在 /var/log/messages 里.

除了ntpdate,还有一些其它可用的NTP命令。也可以将本地的一台主机设置成一台NTP服务器以服务本地网络主机。本地服务器将与一个公共服务器进行时间同步。这种配置类型必须使用 ntpd 进程并创建 /etc/ntp.conf 配置文件。 例如:

代码: 全选

server ntp1.ien.it
    server ntp2.ien.it
ntpd也可以从 rc.conf 启动, 只需启用相关选项:

代码: 全选

ntpd=YES

如果你想同步你的网络,NTP并非唯一的选择: 你也可以使用 timed 进程或 rdate(8) 命令。 timed 开发自4.3BSD.

Timed 也使用一个主-从结构: 在一台主机上启动后, timed将从主服务器获取时间并依此调整本地时钟。 一个混合的机构, 可以同时使用timed和ntpd。 一台本地主机从一台公共NTP服务器上获取正确的时间,然后timed主机依此维护本地网络时间, 本地主机变成timed的客户端并timed同步自己的时钟。这意味着本地服务器必须用是运行NTP和timed; 必须注意它们之间没有接口(timed必须启动时带有 -F hostname 选项,这样它才不会尝试调整本地时间)。

最后, rdate(8) 可用来同步一台给定的主机, 很像 ntpdate(8)。 这台主机必须在/etc/inetd.conf里启用 "time" 服务(port 37)。

主题已锁定

在线用户

正浏览此版面之用户: 没有注册用户 和 8 访客