一、局域网中的两台机器怎样实现高精度时间同步
通过无线局域网WiFi做时间同步如何?
如果你通过一般的WiFi进行时间同步(PTP或者NTP),最后只能得到几十毫秒ms的精度。这是因为基于软件的时间标签往往受到软件和操作系统不确定延迟的影响,时间同步精度不是很高。而高精度同步需要硬件时间标签以及时钟频率调整能力,这些能力是一般的WiFi网卡芯片所缺乏的(具备这样能力的以太网卡却不少)。基于FPGA的开源WiFi芯片openwifi(https://github.com/open-sdr/openwifi)则不同了。我们经过少量修改即可加入硬件时间标签以及时钟频率调整能力。经过这样的修改,再在WiFi上跑ptp,就能达到微妙us级精度!
详细原理参见论文:https://ieeexplore.ieee.org/document/9573364
问题中,关于设备是计算机,还是具备网络通讯能力的设备?从题目中最后一句,推测题主说的是计算机。
基于两段需要同步的设备是计算机,提供2种方案:NTP和PTP。
NTP:成本低,对硬件没要求。同步精度10ms左右。
PTP:需要网络接口具备在物理层提供时间戳的功能,同步精度优于100ns,局域网的节点需要使用支持PTP功能的交换机。局域网网络接点不支持PTP的话,只能同不到us,而且受网络背景流量影响。
想在计算上加入PTP,可以使用安装板卡来实现,通过API来获取板卡上同步后的时间,直接使用这个时间或者同步设备的时间。
同步方案定位选取,还和时间的用途要求有关。
局域网上硬件上用ptp,也有软件实现的ptpd。以及广域网的ntp。同步精度硬件ptp最好。当然在mac层和phy层也有精度差异。
注:本文重点在设置PTP时间同步,有关ptp协议的介绍,则需另寻他见
二、NTP
1. 查看NTP状态:
timedatectl status
2. 关闭NTP同步:
sudo timedatectl set-ntp false
可以看到Network time on已经处于no的状态。
三、PTP
1. 安装PTP
sudo apt install ptpd
2. 挑选一台机器作为master节点,在其上启动(其中eth0是选择同步使用的网卡,注意,这里要求该网卡相连的交换机支持PTP协议):
sudo ptpd -M -i eth0
3. 在其他的slave节点,启动:
sudo ptpd -g -i eth0
如果在master和slave上加入-C参数的话,会在前台运行,并打印输出
4. 单播模式
此外,ptpd还支持单播模式,需加入-u参数,如:
sudo ptpd -u 192.168.13.206 -g -i eth0
四、设置开机自启
1. 自带开机脚本
/etc/rc.local脚本是一个ubuntu16.04及其以前的系统中自带的开机脚本,在没有修改之前里面内容如下。
#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.
exit 0
可以把开机要执行的命令放到 exit0 前面。
2. 添加开机脚本
(1)新建个脚本文件new_service.sh
#!/bin/bash
# command content
exit 0
(2)设置权限
sudo chmod 755 new_service.sh
(3)把脚本放置到启动目录下
sudo mv new_service.sh /etc/init.d/
(4)将脚本添加到启动脚本
执行如下指令,在这里90表明一个优先级,越高表示执行的越晚
cd /etc/init.d/
sudo update-rc.d new_service.sh defaults 90
(5)移除Ubuntu开机脚本
sudo update-rc.d -f new_service.sh remove