徐高翔的个人网站

python3中的NTP时间同步

2017-08-13

软硬件环境

  • ubuntu 18.04 64bit
  • python3
  • ntp 4.2.8p11

NTP简介

网络时间协议(Network Time Protocol,简称NTP)是在数据网络潜伏时间可变的计算机系统之间通过分组交换进行时钟同步的一个网络协议。自1985年以来,NTP是目前仍在使用的最古老的互联网协议之一。NTP由特拉华大学的David L. Mills设计。

NTP意图将所有参与计算机的协调世界时(UTC)时间同步到几毫秒的误差内。它使用Marzullo算法的修改版来选择准确的时间服务器,其设计旨在减轻可变网络延迟造成的影响。NTP通常可以在公共互联网保持几十毫秒的误差,并且在理想的局域网环境中可以实现超过1毫秒的精度。不对称路由和拥塞控制可能导致100毫秒(或更高)的错误。

该协议通常描述为一种主从式架构,但它也可以用在点对点网络中,对等体双方可将另一端认定为潜在的时间源。发送和接收时间戳采用用户数据报协议(UDP)的通信端口123实现。这也可以使用广播或多播,其中的客户端在最初的往返校准交换后被动地监听时间更新。

当前协议为版本4(NTPv4),这是一个RFC 5905文档中的建议标准。它向下兼容指定于RFC 1305的版本v3。

安装ntpd

到站点http://ntp.org/downloads.html下载最新版的ntp服务端的源码包

1
2
3
4
5
tar xvf ntp-4.2.8p11.tar.gz
cd ntp-4.2.8p11
./configure
make
sudo make install

启动服务

1
sudo ntpd

python3时间同步

安装ntplib库

1
sudo pip install ntplib

书写代码

1
2
3
4
5
6
7
# -*- coding:utf-8 -*-
import datetime
import ntplib

client = ntplib.NTPClient()
response = client.request('127.0.0.1')
print(datetime.datetime.fromtimestamp(response.tx_time))

程序输出

1
2018-05-28 10:29:23.110938

参考资料

  1. http://ntp.org/
  2. https://pypi.org/project/ntplib/

推荐文章(由hexo文章推荐插件驱动)

使用支付宝打赏
使用微信打赏

请博主喝咖啡!