时间同步
1. 什么是NTP时间?什么是PTP时间?
NTP时间(Network Time Protocol 时间): NTP即网络时间协议(Network Time Protocol),它是一种用于同步计算机时间的网络协议。NTP可以将所有参与的计算机时间同步到协调世界时(UTC),从而确保系统之间的时间一致性。NTP使用分层、分散的方式,通过一系列时间服务器进行时间同步,允许客户端和服务器之间进行通信以协调时间。NTP可以精确到毫秒级别,且非常适用于大规模分布式系统。
PTP时间(Precision Time Protocol 时间): PTP即精确时间协议(Precision Time Protocol),定义在IEEE 1588标准中,用于在局部网络中实现更高精度的时间同步。PTP比NTP提供了更高的同步精度,通常可以达到微秒甚至纳秒级别。PTP使用主-从架构,可以更精确地测量网络延迟,从而实现更高精度的时间同步。PTP常用于工业自动化、电信和其他对时间精度要求非常高的场合。
2. LINUX中如何使用这两种同步方式?
NTP:
在Linux中,可以使用ntpq命令来查询本机正在使用的NTP服务器。以下是查询本机NTP服务器的步骤:
打开终端,以超级用户或具有足够权限的用户身份登录。
运行以下命令来查询本机正在使用的NTP服务器:
ntpq -p
该命令将显示与本机正在同步的所有NTP服务器的相关信息,包括服务器的IP地址、偏移量、延迟等。在输出中,标有"*"号的服务器表示本机正在使用的主要(首选)NTP服务器。
如果没有安装ntpq命令,可以使用下面的命令安装:
sudo apt install ntp
请注意,某些系统可能需要ntp服务正在运行才能使用ntpq命令。你可以使用sudo systemctl status ntp命令来检查NTP服务的状态,并根据需要启动或重启该服务。
ntpq -p 命令详解
假设运行ntpq -p命令后的输出如下所示:
JSON
remote refid st t when poll reach delay offset jitter
*ntp1.example.com .GPS. 1 u 123 256 377 0.123 0.045 0.056
+ntp2.example.net .PPS. 2 u 256 512 377 0.056 0.023 0.035
-ntp3.example.org .ACTS. 2 u 512 1024 377 0.078 -0.012 0.041
这里是各列的含义:
remote:NTP服务器的域名或IP地址。
refid:参考ID,指示了NTP服务器的参考源。
st:Stratum,指示NTP服务器的层级(stratum),数字越小表示层级越低,通常层级为1表示直接从原子钟获取时间。
t:类型,指示NTP服务器的类型,如本地时钟(l),外部源(u),多播(m)等。
when:上次成功与NTP服务器同步的时间(单位:秒)。
poll:NTP客户端向NTP服务器发送同步请求的间隔时间(单位:秒)。
reach:NTP客户端成功与NTP服务器通信的次数。
delay:NTP客户端与NTP服务器之间的往返延迟(单位:毫秒)。
offset:NTP客户端与NTP服务器之间的时间偏移量(单位:毫秒),即客户端时钟相对于服务器时钟的差异。
jitter:NTP客户端与NTP服务器之间的时钟抖动(单位:毫秒),即时钟不稳定性的度量。
在输出中,标有"*“的行表示本机正在使用的主要(首选)NTP服务器,标有”+"的行表示其他可用的NTP服务器。
检查NTP服务状态
systemctl status ntp
如果NTP服务已经安装并运行,则会显示服务的状态信息,包括是否正在运行以及运行状态是否正常。
PTP
检查Linux环境中是否存在ptp服务:
systemctl status ptp4l 如果有,则会看到如下输出
JSON
● ptp4l.service - PTP4L - IEEE 1588 PTP daemon
Loaded: loaded (/lib/systemd/system/ptp4l.service; enabled; vendor preset: enabled)
Active: active (running) since Thu 2024-04-04 10:30:00 UTC; 1 day 3h ago
Docs: man:ptp4l(8)
Main PID: 1234 (ptp4l)
Tasks: 1 (limit: 1234)
Memory: 10.0M
CGroup: /system.slice/ptp4l.service
└─1234 /usr/sbin/ptp4l -m
Apr 04 10:30:00 hostname systemd[1]: Starting PTP4L - IEEE 1588 PTP daemon…
Apr 04 10:30:00 hostname systemd[1]: Started PTP4L - IEEE 1588 PTP daemon.
在Linux中部署PTP服务:
- 安装PTP软件包
Bash
sudo apt-get install linuxptp # Ubuntu/Debian
sudo yum install linuxptp # CentOS/RHEL
- 配置PTP
编辑 /etc/linuxptp/ptp4l.conf 文件以配置PTP。这个文件包含了PTP4l的配置选项。你可以根据你的需求修改这个文件。
- 启动PTP服务
Bash
sudo systemctl start ptp4l
- 设置开机自启动
Bash
sudo systemctl enable ptp4l
- 检查服务状态
Bash
sudo systemctl status ptp4l
如果PTP服务正在运行,你将会看到类似如下输出:
Plain Text
● ptp4l.service - PTP4L - IEEE 1588 PTP daemon
Loaded: loaded (/lib/systemd/system/ptp4l.service; enabled; vendor preset: enabled)
Active: active (running) since Thu 2024-04-04 10:30:00 UTC; 1 day 3h ago
Docs: man:ptp4l(8)
Main PID: 1234 (ptp4l)
Tasks: 1 (limit: 1234)
Memory: 10.0M
CGroup: /system.slice/ptp4l.service
└─1234 /usr/sbin/ptp4l -m
Apr 04 10:30:00 hostname systemd[1]: Starting PTP4L - IEEE 1588 PTP daemon…
Apr 04 10:30:00 hostname systemd[1]: Started PTP4L - IEEE 1588 PTP daemon.
这就完成了在Linux中部署PTP服务的过程。你可以根据需要对配置文件进行调整,以满足你的特定需求。
在linux环境下,如果没有上述命令执行失败,需要执行下面的命令
输入
cd /lib/systemd/system/
目录下是否有ptp4l.service或者ptp4l@.service
如果有ptp4l@.service,则需要使用这个命令在对用的网络接口上创建PTP同步服务:
sudo systemctl start ptp4l@eth0.service