IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> NTP时间戳转换成UTC时间的过程 -> 正文阅读

[网络协议]NTP时间戳转换成UTC时间的过程

? ? ? ? 前言:最近在学习时频产品时钟对时协议,在学习NTP协议时一直对协议报文中的时间戳转换存在疑问,通过各种搜集资料、自我理解后终于对NTP时间戳有了一个具体的认识;发现现阶段网上的免费资料里对整个转换没有写的很仔细,导致理解比较难,接下来我针对我学习后的理解,详细地讲一下NTP时间戳是如何转换成UTC时间的。(若有不对的地方,欢迎指出,共同进步)

? ? ? ? 正文:

? ? ? ? 首先简单讲一下NTP协议,相信搜到这篇文章的对NTP是有一定了解的,想进一步对NTP中某些字段定义学习深入一点。NTP(Network Time Protocol)网络时间协议基于UDP,用于网络时间同步的协议,使网络中的计算机时钟同步到UTC,再配合各个时区的偏移调整就能实现精准同步对时功能。

? ? ? ?在理解转换之前先讲一个NTP时间戳和UTC时间的定义(注意两种时间戳的起始时间不同,相差70年):

①NTP时间戳用一个64bit无符号定点数表示,它表示自从1990年1月1日00:00:00到现在过了多少秒。64bit分为两部分,高32bit(MSW)表示整数部分,单位是秒;低32bit(LSW)表示小数部分,单位是232皮秒。

②UTC时间,格林威治时间1970年1月1日00:00:00(北京时间1970年1月1日08:00:00)起至现在的总秒数,表示为1970-01-01 00:00:00 UTC。程序里习惯叫做UTC时间戳。

? ? ? ? NTP协议中有四个时间戳,本文不讨论这四个时间戳的区别,只简单的拿其中一个NTP时间戳报文分析如何转换成UTC时间。例如一段时间戳报文为“D9 FD 84 95 94 F8 59 7C”,下面我们一起学习该NTP时间戳是如何转换成UTC时间的。

? ? ? ? 先处理MSW高位32bit“D9 FD 84 95”,将其转换为10进制3657270421,由于NTP时间和UTC时间起始不同,需要将该时间减少70年(1900年到1970年)2208988800(0x83AA7E80),则为1448281621,使用UTC转换器为2015-11-23 12:27:01 UTC(格林威治时间),2015-11-23 20:27:01 UTC+8(北京时间 UTC+8)

? ? ? ? 然后再处理LSW低位32bit“94 F8 59 7C”,在处理LSW之前先要了解1LSW=232ps是怎么来的,1 second =1,000,000,000,000 picoseconds,这个值很大,而2^32=4294967296,很明显用32bit无法精确到1?picoseconds,那就尽力而为,于是自然就把1,000,000,000,000 picoseconds劈成2^32份:

1,000,000,000,000/(2^32) = 232.83064365386962890625? ? 即1LSW=232ps

? ? ? ? 故先将LSW乘以232转为ps,然后ps除以10^6就得到us了,于是有:usec=lsw*232/1000000

? ? ? ? 再看看秒的一些时间单位转换:

毫秒ms是10^-3秒;微妙us是10^-6秒;纳秒ns是10^-9秒;皮秒ps是10^-12秒

? ? ? ? 于是低位32bit“94 F8 59 7C”,将其转换为10进制2499303804,则:

usec=lsw*232/1000000=579838us=0.579838s

? ? ? ? 综上所述,故NTP时间戳“D9 FD 84 95 94 F8 59 7C”转换成UTC时间为2015-11-23 20:27:01.579838 UTC+8(北京时间)

?写在最后的话:整理不易,若对你有帮助望支持点赞一下,谢谢。

  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2021-09-06 11:28:49  更:2021-09-06 11:29:03 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年6日历 -2024/6/27 2:10:21-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码