sntp协议简介

sntp协议简介SNTP协议主要是通过记录客户端向服务器发送数据包时的时间戳t1,服务器端接收到该数据包时的时间戳t2,服务器向客户端回应时的时间戳t3和最后客户端接收到服务器回应时的时间戳t4来计算客户端时间和服务器端时间的偏差,从而进行校时操作

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全家桶1年46,售后保障稳定

SNTP(Simple Network Time Protocal简单网络时间协议),用于跨广域网或局域网同步时间的协议,具有较高的精确度(几十毫秒)。SNTP是NTP协议的简化版,两者分别在RFC1305和RFC2030介绍。

 

SNTP工作方式

SNTP采用客户端/服务器的工作方式,可以采用单播或者广播的模式。

单播即客户端定期直接与SNTP服务器交互获取时间差进行校时。

sntp协议简介

广播则是SNTP服务器定期向指定的多播地址发送时间信息,SNTP客户端通过监听这些多播地址来获取时间信息进行同步。UNIX网络编程中有SNTP广播方式的部分实现代码。

sntp协议简介

SNTP校时原理

SNTP协议主要是通过记录客户端向服务器发送数据包时的时间戳t1,服务器端接收到该数据包时的时间戳t2,服务器向客户端回应时的时间戳t3和最后客户端接收到服务器回应时的时间戳t4来计算客户端时间和服务器端时间的偏差,从而进行校时操作,如下图所示。

sntp协议简介

则t1与t2之间的时间差为((T2-T1)+ (T3-T4))/2

数据包在网络上的传播时间是 (T2-T1) + (T4-T3)

知识点

1、NTP时间戳从1900年开始记秒数,而UNIX时间戳从1970年开始记秒数,即记录到NTP结构体中的时间要加上JAN_1970(1900到1970共70年的秒数),而从起获取出来需减掉JAN_1970

 

2、

/* Offset between struct timeval.tv_sec anda tai64_t */
#define     NTPLEAPS_OFFSET  (4611686018427387914ULL)
 
/* Hide this ugly value from programmes */
#define     SEC_TO_TAI64(s)     (NTPLEAPS_OFFSET + (u_int64_t)(s))
#define     TAI64_TO_SEC(t)     ((t) - NTPLEAPS_OFFSET)

Jetbrains全家桶1年46,售后保障稳定

对于这部分我还没搞清楚,如有明白的麻烦跟我讲解下,如NTPLEAPS_OFFSET是怎么来的?

为啥要做这样的转换?

 

校时操作

获取时间差后就是进行本地校时操作。Linux系统分系统时间和RTC时间,如果只修改了系统时间,那么设备重启后并不时校时后正常运行的时间。如果修改了RTC时间,则重启后是校时后正常运行的时间。这两者的区别如下所述。

RTC(Real Time Clock)时间有一套独立的计时系统,是设备上由电池供电的硬件时钟。和设备状态无关,即使设备关机,RTC时间仍然在运行,是设备的标准时间,无夏令时和冬令时的区分,只有设置时间的时候才能修改,为UTC时间。

系统时间(System Clock),即设备当前时间,使用操作系统自带的晶振进行计时,在设备关机的时候将会清空,设备重启时会获取设备RTC时间来重新设置系统时间,之后独立于RTC时间运行。有夏令时,在没有开启夏令时的情况下,和设备RTC时间基本同步。

设备存在系统时间和RTC时间好处如只想临时修改下当前时间,则只需要修改下系统时间即可,过后想修改回原有时间,则只需同步下RTC时间便可。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/219628.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 运维面试官喜欢问的问题是_运维是什么意思

    运维面试官喜欢问的问题是_运维是什么意思你最大的缺点是什么?行为问题(behaviouralquestion),这类问题目的是看性格是否合适公司文化。主要考察:①你是否真心想做这个工作;②你性格与企业文化是否相符。所有答案都应该围绕这两点组织,即每个经历都应回归到你通过这个经历学到什么该职位所需关键技巧,这些经历为何让你想做这个工作,和该经历体现出你什么样的个人风格。你最大的缺点是什么:①避免避重就轻,谈一个算不得缺点的缺点,这…

    2025年8月27日
    7
  • ES数据库入门(elasticsearch上手指南)-2021.3.26[通俗易懂]

    ES数据库入门(elasticsearch上手指南)-2021.3.26[通俗易懂]ES数据库文章目录ES数据库一、入门1.索引2.搜索-检索文档(id匹配)-轻量搜索(Query-string搜索)-使用查询表达式搜索-更复杂的搜索(添加过滤)-全文搜索-短语搜索-高亮搜索-分析(聚合功能aggregation)一、入门1.索引索引:名词时,类似于传统数据库中的数据库概念;​ 动词类似于插入这一概念。eg:对于员工目录,我们将做如下操作:每个员工索引一个文档,文档包含该员工的所有信息。每个文档都将是employee类型。该类型位于索引

    2022年5月3日
    143
  • Python图像处理基本操作[通俗易懂]

    Python图像处理基本操作[通俗易懂]在Python中进行图像处理可以使用的库有很多,本文主要介绍下面三个:OpenCV、PIL、skimage。其中,OpenCV是图像处理中最强大的一个库,它的源代码是由C\C++写成的,所以原版的OpenCV可以与C、C++无缝结合。Python版的OpenCV主要依赖于cv2这个包来实现。Python里面自带一个PIL(pythonimageslibrary),但这个库现在已经停止更新了,所以使用Pillow,它是由PIL发展而来的

    2022年10月14日
    3
  • 树莓派4B基础教程

    树莓派4B基础教程树莓派4B基础教程准备:硬件:树莓派4B,SD一张软件:SDCardFormatter(SD卡格式化工具),Win32DiskImager(烧录系统工具)这是一个纯新手教程,由于更新换代,有些东西3b的教程能用4b用不了,由于版本原因,有些东西直接出错,所以干脆花时间自己整理了一下.作者自述:对!东西全是百度来的,劳资只是一个搞Java开发的,也没有见过这些小东西可能比普通…

    2022年6月10日
    56
  • Maven(二):常用命令、依赖管理

    Maven(二):常用命令、依赖管理

    2021年10月5日
    35
  • JAVA队列( Queue ) 详解[通俗易懂]

    JAVA队列( Queue ) 详解[通俗易懂]什么是队列?队列是一种特殊的线性表,遵循先入先出、后入后出的基本原则,一般来说,它只允许在表的前端进行删除操作,而在表的后端进行插入操作,但是java的某些队列运行在任何地方插入删除;比如我们常用的LinkedList集合,它实现了Queue接口,因此,我们可以理解为LinkedList就是一个队列;java队列特性队列主要分为阻塞和非阻塞,有界和无界、单向链表和双向链表之分;阻塞和非阻塞阻塞队列入列(删除元素)时,如果元素数量超过队列总数…

    2022年7月9日
    35

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号