NTP-服务器搭建和使用
介绍
NTP (Network Time Protocol) 服务, 用于提供准确的时间同步给客户端设备.
它通过与时间服务器进行通信, 获取准确的时间信息并将其应用到本地系统中. 其通常由专门的时间服务器提供商或组织管理和维护. 这些服务器通过使用高精度的原子钟或 GPS 接收器等可靠的时间源来确保提供准确的时间.
客户端设备可以通过与 NTP 远程服务器进行通信, 从服务器获取时间信息并将其应用到本地系统中.
计算机内部所记录的时钟是记载于 BIOS (CMOS) 内的, 如果计算机电池没电, 或 BIOS 数据被清除, 则会导致计算机时间不准, 此时则需要调整.
NTP 服务会占用 123 端口.
相关概念
时区以及 GMT
地球共分为 24 个时区 (对应一天 24 小时制).
其通过经纬度来划分, 以英国格林威治为经度 0 开始, 每 15 度角为一个时区. (共 360 度). 格林威治以东为 “+小时”, 以西为 “-小时”.
而格林威治时间则称为 GMT (Greenwich Mean Time).
“GMT + 8” 的意思就是比格林威治时间快 8 小时. (东八区)
UTC
Coordinated Universal Time (UTC, 基于英语和法语的缩写), 其基于 Atomic Clock (原子钟) 计算时间. 也称为标准时间.
原子钟主要是利用计算芯片的原子震荡周期来计时的. 但由于每种芯片都有自己独特的震荡周期, 因此会有些差异, 导致快/慢几秒.
软件时钟和硬件时钟
软件时钟指 Linux 操作系统从 1970/01/01 开始计算的总秒数.
硬件时钟指主机硬件上的时钟如 BIOS 记录的时间.
工作流程
- NTP server 启动 daemon
- Client 向 NTP Server 发送调校时间的 message
- NTP server 接收到 message 后回复目前的标准时间
- Client 用收到的标准时间进行调整
NTP 是 C/S 架构, 在设定 NTP Server 时, 先选择多部上层的 Time server 为自身校准.
安装
1 |
|
- ntp 软件包提供 NTP 的配置文件以及执行文件
- tzdata (Time Zone data) 提供各时区对应的显示格式
重要文件和命令
/etc/ntp.conf
, NTP 的主配置文件/usr/share/zoneinfo
, tzdata 提供的各时区的时间格式文件/etc/sysconfig/clock
, 设定时区以及配置是否使用 UTC 时钟. Linux 开机后会自动读取这个文件来设置系统默认显示时间/etc/localtime
,clock
文件中指定的时间配置文件的备份
命令有:
/bin/date
, 修改和显示 Linux 软件时间/usr/bin/hwclock
, 修改和显示 BIOS 硬件时间 (hwclock 指 “hardware clock”)/usr/sbin/ntpd
, 提供 NTP 服务/usr/sbin/ntpdate
, 客户端时间矫正
时间调整示例
若想将时区修改为美国纽约:
1 |
|
服务端配置
修改 /etc/ntp.conf
文件.
访问控制
若想仅对一个网段内提供服务, 可以用 restrict
指令来控制 (管理权限), 语法为:
1 |
|
[parameter]
可以指定多个.
可用的 [parameter]
(提供约束) 主要为:
ignore
, 拒绝所有类型的 NTP 连接nomodify
, 客户端不能通过ntpc
和ntpq
命令来修改服务器的时间参数, 但客户端可以用这台主机来进行网络校时noquery
, 客户端不能用ntpq
,ntpc
命令来查询时间服务器 (也就是不提供 NTP 网络校时)notrap
, 不提供trap
远程事件登录notrust
, 拒绝没有认证的客户端
若不添加参数, 则为, 不受任何限制.
设定上层服务器
用 server
指令, 语法为:
1 |
|
[prefer]
表明是否优先使用.
记录时间差异
用 driftfile
指令, 将时间差异记录到一个文件中, 语法为:
1 |
|
这里的时间差异指, NTP server 本身的震荡周期频率与客户端主机的频率之间的误差.
设置客户认证
用 keys
指令:
1 |
|
(暂时忽略)
配置示例
1 |
|
注意设置的上层服务器也需要先放行才行.
服务启动和使用
1 |
|
确认 NTP 服务器是否顺利更新时间
1 |
|
或:
1 |
|
客户端时间更新
手动校准
用 date
调整软件时间:
1 |
|
用 hwclock
调整硬件时间:
1 |
|
-r
,--read
, 读取当前的 BIOS 内的时间参数-w
,--write
, 将当前 Linux 系统时间写入 BIOS
即, 先用 date
调整, 然后用:
1 |
|
修改.
网络校时
使用 ntpdate
命令.
注意 ntpd
服务开启时, 不能运行 ntpdate
(即 NTP 服务器不可以使用 ntpdate
)
语法为:
1 |
|
-d
, 进入 “debug” 模式, 显示更多有效信息-v
, 显示较多信息
如:
1 |
|