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时间便可。

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • mysql拼接字段的函数_SQL字符串拼接

    mysql拼接字段的函数_SQL字符串拼接文章目录测试数据1、CONCAT(直接拼接函数)2、CONCAT_WS(使用指定的分割符去拼接字符串)3、GROUP_CONCAT(将查询的数据先行直接连接,然后将列通过指定的分割符拼接)测试数据SELECTid,login_name,real_nameFROM`iam_user`whereidin(17,18,19)idlogin_namereal_name…

  • 【hive】hive查询报错INFO: os::commit_memory(0x00000006e9990000, 3597074432, 0) failed; error=‘Cannot alloc

    【hive】hive查询报错INFO: os::commit_memory(0x00000006e9990000, 3597074432, 0) failed; error=‘Cannot alloc报错内容:INFO:Startingtask[Stage-14:MAPREDLOCAL]inserialmodeJavaHotSpot(TM)64-BitServerVMwarning:ignoringoptionMaxPermSize=512M;supportwasremovedin8.0JavaHotSpot(TM)64-BitServerVMwarning:INFO:os::commit_memory(0x00000006e9990000,

  • qt 如何设计好布局和漂亮的界面。

    qt 如何设计好布局和漂亮的界面。文章目录前言一.布局相关组件介绍(:sunny:)1.Layouts(布局):large_blue_circle:VerticalLayouts(垂直布局):large_blue_circle:HorizontalLayouts(水平布局):large_blue_circle:GridLayouts(网络布局):large_blue_circle:FormLayouts(窗体布局)2.Spacers(空间间隔器/弹簧)3.UI设计器工具栏:large_blue_circle:分割布局器二.Qt样..

  • Linux时间戳转换_如何获取时间戳

    Linux时间戳转换_如何获取时间戳#include<stdio.h>#include<time.h>intmain(){time_tt;//时间戳structtm*p;time(&t);//获取时间戳p=localtime(&t);//将时间戳转换为本地时间printf(“时间戳:%ld\n”,t);printf(“%d-%d-%d%d:%d:%d\n”,(1900+

  • pychrm激活码【注册码】

    pychrm激活码【注册码】,https://javaforall.cn/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

  • redis数据类型详解(redis数据类型及常用方法)

    文章目录string类型操作实践incr/incrbydecr/decrbyincrbyfloatappendstrlenmset/mget小节面试分析Key有效时间设计Expire(设置生效时长-单位秒)Persist(取消时长设置)pexpire(单位毫秒)小节面试分析Hash类型应用实践问题hset/hgethincrbyhmset/hmgethexistshdelhkeys/hvals小节面试分析List类型应用实践问题lpushrpush查看listlinsertlsetlremltriml

发表回复

您的电子邮箱地址不会被公开。

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