正点原子lwIP学习笔记——NTP实时时间实验

1. NTP简介

NTP(Network Time Protocol)网络时间协议基于UDP,用于网络时间同步的协议,使网
络中的计算机时钟同步到UTC,再配合各个时区的偏移调整就能实现精准同步对时功能

NTP 服务器(Network Time Protocol(NTP))是用来使计算机时间同步化的一种协议,它
可以使计算机对其服务器或时钟源(如石英钟,GPS 等等)做同步化,它可以提供高精准度
的时间校正(LAN 上与标准间差小于1 毫秒,WAN 上几十毫秒)
,且可介由加密确认的方式来防止恶毒的协议攻击。时间按NTP 服务器的等级传播。按照离外部UTC源的远近把所有服
务器归入不同的Stratum(层)中。

NTP的数据报文格式如下图所示:
NTP数据报文
NTP 数据报文格式的各个字段的作用,如下表所示:

字节段描述
LI:2 比特11 为告警状态,表示时钟未被同步
VN:3 比特表示 NTP 的版本号
Mode:3 比特0 为未定义、1 为主动对等体模式、2 为被动对等体模式、3 为客户模式、4 为服务器模式、5 为广播模式或组播模式
Strat:8 比特表示系统时钟的层数,取值范围为1~16
Poll:8 比特表示轮询时间,即两个连续 NTP 报文之间的时间间隔
Prec:8 比特表示系统时钟的精度
Root Delay:32 比特表示本地到主参考时钟源的往返时间
Root Dispersion 32 比特表示系统时钟相对于主参考时钟的最大误差
Reference Identifier 32 比特表示参考时钟源的标识
Reference Timestamp64 比特表示系统时钟最后一次被设定或更新的时间
Originate Timestamp 64 比特表示 NTP 请求报文离开发送端时发送端的本地时间
Receive Timestamp 64 比特表示 NTP 请求报文到达接收端时接收端的本地时间
Transmit Timestamp 64 比特表示应答报文离开应答者时应答者的本地时间
Authenticator 96 比特表示验证信息我们怎么获取阿里云NTP 实时时间数据

当然这其中不是所有的报文都需要用到,我们要做的就是根据项目的需要来构建 NTP 请求报文,并完成报文的数据内容解析,完成实时时间校对。

使用网络调试助手以 UDP 协议连接阿里云 NTP 服务器,接着在发送框上填入 NTP 请求报文,发送完成之后网络调试助手接收到一段数据,然后解析进行实时时间的校准。

需要的步骤如下:

  1. 以UDP 协议连接阿里云NTP 服务器;
  2. 发送NTP 报文到阿里云NTP 服务器;
  3. 获取阿里云NTP 服务器返回的数据,取第40 位到43 位的十六进制数值;
  4. 把40 位到43 位的十六进制数值转成十进制;
  5. 把十进制数值减去1900-1970 的时间差(2208988800 秒);
  6. 数值转成年月日时分秒。(可通过在线
    转换器时间转换链接上计算当前时间)

2. NTP实验

例程功能:
使用UDP 协议连接阿里云的NTP 服务器,并周期发送NTP 请求报文,发送完成之后对阿里云NTP 服务器返回的数据进行解析,把它转换成实时时间信息。

通过lwip_ntp_client_init构建NTP的报文,需要配置的就是version和mode都为3,然后转换成16进制;

lwip_get_seconds_from_ntp_server就是在连接服务器之后,获取40-43位的16进制数,并减去1900-1970的时间差后,调用lwip_calc_date_time把秒数换算成年月日;

lwip_demo中,就是netconn方式实现UDP连接。

总结

NTP就是通过开发板作为Client,然后去连接云服务器,获取NTP报文后取出40-43位的16进制数,然后进行年月日的转换,来完成时间校准。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值