zoukankan      html  css  js  c++  java
  • NTP报文格式

    出处:https://blog.csdn.net/dosthing/article/details/81588219?utm_medium=distribute.pc_relevant.none-task-blog-searchFromBaidu-1.control&depth_1-utm_source=distribute.pc_relevant.none-task-blog-searchFromBaidu-1.control

    NTP报文格式如图所示,它的字段含义参考如下:

    1. LI 闰秒标识器,占用2个bit
    2. VN 版本号,占用3个bits,表示NTP的版本号,现在为3
    3. Mode 模式,占用3个bits,表示模式
    4. stratum(层),占用8个bits
    5. Poll 测试间隔,占用8个bits,表示连续信息之间的最大间隔
    6. Precision 精度,占用8个bits,,表示本地时钟精度
    7. Root Delay根时延,占用8个bits,表示在主参考源之间往返的总共时延
    8. Root Dispersion根离散,占用8个bits,表示在主参考源有关的名义错误
    9. Reference Identifier参考时钟标识符,占用8个bits,用来标识特殊的参考源    
    10. 参考时间戳,64bits时间戳,本地时钟被修改的最新时间。
    11. 原始时间戳,客户端发送的时间,64bits。
    12. 接受时间戳,服务端接受到的时间,64bits。
    13. 传送时间戳,服务端送出应答的时间,64bits。
    14. 认证符(可选项)

    抛开复杂的协议报文,我们来理解一下NTP客户端与服务器的交互过程,进而理解参考时间戳、原始时间戳、接受时间戳、传送时间戳的关系。如图,客户端和服务端都有一个时间轴,分别代表着各自系统的时间,当客户端想要同步服务端的时间时,客户端会构造一个NTP协议包发送到NTP服务端,客户端会记下此时发送的时间t0,经过一段网络延时传输后,服务器在t1时刻收到数据包,经过一段时间处理后在t2时刻向客户端返回数据包,再经过一段网络延时传输后客户端在t3时刻收到NTP服务器数据包。特别声明,t0和t3是客户端时间系统的时间、t1和t2是NTP服务端时间系统的时间,它们是有区别的。对于时间要求不那么精准设备,直接使用NTP服务器返回t2时间也没有太大影响。但是作为一个标准的通信协议,它是精益求精且容不得过多误差的,于是必须计算上网络的传输延时。客户端与服务端的时间系统的偏移定义为θ、网络的往返延迟定义为δ,基于此,可以对t2进行精确的修正,已达到相关精度要求,它们的计算公式如下:

    式中:

    t0是请求数据包传输的客户端时间戳

    t1是请求数据包回复的服务器时间戳

    t2是响应数据包传输的服务器时间戳

    t3是响应数据包回复的客户端时间戳

    对此,我们只需将NTP服务端返回的时间t2加上网络延时δ的一半就可以了(t2+δ/2)。

  • 相关阅读:
    微服务迁移记(二):注册中心(consul搭建)
    微服务迁移记(一):技术架构
    小程序入坑记录
    不思量,自难忘:我的10年程序生涯
    your password has expired.to log in you must change it
    Javascript中 a.href 和 a.getAttribute('href') 结果不完全一致
    PHP不使用递归的无限级分类
    百度移动搜索自动转码太坑爹,JS跳转地址会被抓取
    iScroll 下 a 标签失效
    浏览器的云加速可能导致IP统计异常
  • 原文地址:https://www.cnblogs.com/liujx2019/p/14075425.html
Copyright © 2011-2022 走看看