看来 #23 楼没有看到我的后面提问,我说一下我的理解。
对于 #19 楼的观点“ NTP 就是针对不稳定网络的”我认为是不正确的,NTP 针对网络授时,协议 /算法中巧妙地排除了节点间的网络延迟,但它并不是针对 *不稳定* 网络的,或者说 NTP 在不稳定的网络下表现并不是足够好。
NTP 中客户端与服务器时钟偏差 offset 的计算方式是:
offset = ((服务器收包时间 - 客户端发包时间) + (客户端收包时间 - 服务器回包时间)) / 2
(具体可以看 [Wikipedia](
https://en.wikipedia.org/wiki/Network_Time_Protocol#Clock_synchronization_algorithm), 有很清晰的图解)
不难看出这里隐含了一个假定的前提条件:客户端发包和服务器回包,往返双向的网络延迟是相等的。
但事实上在公网传输的流量,双程的延迟并不一定相等,可能因为双向路由不同,也可能因为中间链路的抖动,总之 rt 这个东西是经常都在变化的,这种变化给获取到的 offset 值带来了持续的随机误差。NTP 中有一个专门的值用来衡量这种误差的影响程度叫 jitter, 其数学含义是客户端计算出的过去一段时间内和某个服务器所有 offset 值的均方差。
在理想情况下,jitter 应当是 0, 意味着客户端与服务器之间的网络一直稳定可靠,实际使用中,不难观察到距离越远(此处指 rtt 高)的服务器,其 jitter 也就越大,意味着客户端计算出来的自己同这台服务器之间的 offset 值越不精确。并且在网络繁忙的时段 rtt 可能频繁变化,jitter 也会升高。
这个就是我说 NTP 并不是针对 *不稳定* 网络中授时的原因,也是很多大公司会在自己内网架设 NTP 服务器来进行授时的原因(之一)。当然一般家用或 VPS 上面使用不需要考虑这种问题,误差并没有大到不能忍的地步。(个人经验是中美之间授时 jitter 可能在几十毫秒的量级)
回到楼主的问题,手表是一个需要随身移动并经常出入各种复杂物理环境的东西,首先显然不可能使用有线网络,能通过 wifi 联网的时间不一定稳定或者足够长( NTP 是需要一段时间来完成时间校正的,offset 越大需要的时间越长,和系统内核也有关系),通过移动数据网络的话稳定性应该也不难想象,所以这种情况明显精度高不到哪里去。
而且因为市场上早就有了比较成熟的无线电授时甚至是 GNSS 授时技术,这两者只需要设备在户外或者其他能接收到无线电或者卫星信号的地方,被动接收信号计算偏差,不需要在手表上额外加装信号发射装置,也不要求手表处在有网络覆盖的地区(所以野外也可以使用),显然是更好的选择。
不过话说回来,以上这些除非特别极端情况,一般误差都不会超过 1s, 日常使用多半是感受不到的。
@
CEBBCAT 希望能解答你在 #14 楼的疑问。