为嵌入式开发板客户端自己动手在虚拟机上搭建时间同步NTP服务器

       网络时间协议NTP(Network Time Protocol)是用于互联网中时间同步的标准互联网协议。NTP的用途是把计算机的时间同步到某些时间标准。目前采用的时间标准是世界协调时 UTC(Universal Time Coordinated)。NTP的主要开发者是美国特拉华大学的David L. Mills教授。NTP对于我们个人来说有什么用呢,简单的讲,当你的计算机时间不准确了,你可以接入到互联网,从网上同步一下时间,看多方便。

       对于企业来说,当你有成百上千的计算机,都不能直接连接互联网,时间不统一影响业务,如果一台一台的修改,那不得累死人啊。这时搭建一个自己的NTP服务器就显出它的优势了。


1、安装ntp包

# wget http://www.eecis.udel.edu/~ntp/ntp_spool/ntp4/ntp-4.2/ntp-4.2.6p4.tar.gz
# tar zxvf ntp-4.2.6.tar.gz
# cd ntp-4.2.6
# ./configure --prefix=/usr/local/ntp --enable-all-clocks --enable-parse-clocks
# make && make install

2、配置文件

NTP服务的配置文件——/etc/ntp.conf 

1)、权限的设定主要以 restrict 这个参数来设定,主要的语法为:
restrict IP地址 mask 子网掩码 参数
其中 IP 可以是IP地址,也可以是 default ,default 就是指所有的IP
参数有以下几个:
ignore :关闭所有的 NTP 联机服务
nomodify:客户端不能更改服务端的时间参数,但是客户端可以通过服务端进行网络校时。
notrust :客户端除非通过认证,否则该客户端来源将被视为不信任子网
noquery :不提供客户端的时间查询
2)、用server这个参数设定上级时间服务器,语法为:
server  IP地址或域名 [prefer]
IP地址或域名就是我们指定的上级时间服务器,如果 Server 参数最后加上 prefer,表示我们的 NTP 服务器主要以该部主机时间进行校准。
3)、解决NTP服务器校准时间时的传送延迟
使用driftfile参数设置:
driftfile 文件名
在与上级时间服务器联系时所花费的时间,记录在driftfile参数后面的文件内。
注意:  driftfile 后面接的文件需要使用完整的路径文件名,不能是链接文件,并且文件的权限需要设定成 ntpd守护进程可以写入。

/usr/share/zoneinfo/     这个目录下存放的是各个时区对应的设定文件。

/etc/localtime    本地系统时间设定文件。

/etc/sysconfig/clock   本机时区设定文件。

当我们修改了上图中ZONE选项中的时区时,系统就对去/usr/share/zoneinfo/取对应的时区设定文件,复制为本地/etc/localtime。

相关命令:

date    修改和显示日期和时间的命令。

hwclock    将当前系统时间写入CMOS的命令,只有root用户才可以使用。

ntpd     NTP服务的守护进程文件,需要先启动它才能提供NTP服务。

ntpdate     客户端时间同步

三、配置NTP

# cat /etc/ntp.conf |grep -v "#"

########### start ################

#=========差异分析===========

driftfile /var/lib/ntp/drift
keys /etc/ntp/keys


restrict default nomodify  授权任何IPV4地址访问

restrict 127.0.0.1
restrict -6 ::1


server 210.72.145.44 prefer  指定上级更新时间服务器,授权国家授时中心服务器访问本地NTP优先使用这个地址

取消注释local clock

server  127.127.1.0
fudge   127.127.1.0 stratum 5

includefile /etc/ntp/crypto/pw
########### end ################

# service ntpd start    RPM和YUM安装的启动方式

#/usr/local/ntp/bin/ntpd -c /etc/ntp.conf -p /tmp/ntpd.pid   源码编译安装的启动方式

ntpd启动后,客户机要等几分钟再与其进行时间同步,否则会提示“no server suitable for synchronization found”错误。

# netstat -tlunp | grep ntp       如果看到123端口,说明ntp服务成功启动。

# ntpstat    查看ntp服务器与上级服务器是否通讯

# ntpq –p   查看本地NTP与上级服务器的通讯情况

在ntp server上重新启动ntp服务后,ntp server自身或者与其server的同步的需要一个时间段,这个过程可能是5分钟,在这个时间之内在客户端运行ntpdate命令时会产生no server suitable for synchronization found的错误。

那么如何知道何时ntp server完成了和自身同步的过程呢?

在ntp server上使用命令:

# watch ntpq -p


出现画面:

Every 2.0s: ntpq -p                                                                                                             Thu Jul 10 02:28:32 2008

     remote           refid      st t when poll reach   delay   offset jitter

==============================================================================

 192.168.30.22   LOCAL(0)         8 u   22   64    1    2.113 179133.   0.001

 LOCAL(0)        LOCAL(0)        10 l   21   64    1    0.000   0.000  0.001

注意LOCAL的这个就是与自身同步的ntp server。

注意reach这个值,在启动ntp server服务后,这个值就从0开始不断增加,当增加到17的时候,从0到17是5次的变更,每一次是poll的值的秒数,是64秒*5=320秒的时间。

4、客户端(嵌入式开发板)

客户端只需执行命令:

#ntpdate -u [ntp server IP]

如果之后从ntp客户端同步ntp server还失败的话,用ntpdate –d来查询详细错误信息,再做判断。

#ntpdate -d [ntp server IP] 连接虚拟机NTP server IP,DEBUG模式

 然后对时成功的结果显示

adjust time server 10.0.0.106 offset -0.000463 sec

5、常见错误

5.1、ntpdate -u [NTP server IP]  运行时出现no server suitable for synchronization found
         在ntp客户端运行ntpdate 10.0.0.106,出现no server suitable for synchronization found的错误。然后启动debug模式,即"ntpdate -d "。用ntpdate –d 10.0.0.106查看,发现有“Server dropped: Strata too high”的错误,并且显示“stratum 16”。而正常情况下stratum这个值得范围是“0~15”。这是因为NTP server还没有和其自身或者它的server同步上。

等待大约5分钟,即可看到嵌入式开发板更新时间成功。

5.2、ntpdate servname not supported for ai_socktype

         Error resolving ai_socktype: Servname not supported for ai_socktype (-8)
1 Jan 01:44:12 ntpdate[742]: Can't find host ai_socktype: Servname not supported for ai_socktype (-8)
1 Jan 01:44:12 ntpdate[742]: no servers can be used, exiting

在/etc/services加入两行

ntp             123/tcp

ntp             123/udp                         # Network Time Protocol



  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
嵌入式开发上的 NTP 服务器主要用于提供网络时间协议服务。通过这个功能,设备能够自动获取并同步其系统时间到互联网上一个已知的时间源。这对于需要精确时间同步的各种应用至关重要,例如日志记录、分布式计算任务调度、网络安全、以及物联网(IoT)设备的协调工作等。 在嵌入式开发上实现 NTP 服务器,通常涉及以下几个步骤: 1. **硬件准备**:选择支持外部网络连接的嵌入式开发,并配置好相应的网络环境,如以太网或Wi-Fi模块。 2. **软件平台**:选择合适的操作系统,如Linux、FreeRTOS 或者其他基于微内核的操作系统,它们都有集成NTP服务的支持库或者可以直接使用标准的NTP服务器软件包。 3. **安装 NTP 软件**:在嵌入式开发安装 NTP 服务器软件。这通常可以通过操作系统的软件包管理工具完成。 4. **配置服务**:设置 NTP 服务器的运行参数,包括时间源服务器的选择、时间同步周期等。一般来说,可以在 `/etc/ntp.conf` 文件中修改这些配置。 5. **启动服务**:将NTP服务设为开机自启,并确保它正常运行。 6. **验证服务**:使用命令行工具如 `ntpq -p` 来检查NTP服务器的状态和准确度。同时,客户端也可以通过NTP查询命令测试与服务器之间的时间同步情况。 下面列出一些有关 NTP 服务器嵌入式开发上使用的相关问题:
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值