1、NTP如何同步时间
NTP协议是对网络内所有具有时钟的设备进行时钟同步,使网络内所有设备的时钟保持一致。
系统时钟同步的工作过程如下:
Device A发送一个NTP报文给Device B,该报文带有它离开Device A时的时间戳,该时间戳为10:00:00am(T1)。
当此NTP报文到达Device B时,Device B加上自己的时间戳,该时间戳为11:00:01am(T2)。
当此NTP报文离开Device B时,Device B再加上自己的时间戳,该时间戳为11:00:02am(T3)。
当Device A接收到该响应报文时,Device A的本地时间为10:00:03am(T4)。
至此,Device A已经拥有足够的信息来计算两个重要的参数:
NTP报文的往返时延Delay=(T4-T1)-(T3-T2)=2秒。
Device A相对Device B的时间差offset=((T2-T1)+(T3-T4))/2=1小时。
这样,Device A就能够根据这些信息来设定自己的时钟,使之与Device B的时钟同步。
对于android平台,framework中有关于NTP客户端实现的代码SntpClient,使用其requestTime函数,即可同步时间。
2、鉴权模式修改
问题是这样的,最近有需求需要使用特定的NTP服务器,其服务器进行了鉴权加密处理,我使用Android原生的流程去进行时间同步,却一直请求超时,而使用Linux的ntpdate可以正确同步到时间。
下面是NTP报文格式:</