1. 当前位置: 网站首页 >  路由器百科 >  手机时间从来不会错,路由器一断电就归零?NTP对时是怎么回事,我发了个包看了看

手机时间从来不会错,路由器一断电就归零?NTP对时是怎么回事,我发了个包看了看

NTP对时原理:手机电脑路由器三种设备对时方式对照与NTP服务器stratum分层

上个月在我妈家修那台定时断网不执行的路由器,病根查出来是断电后系统时间归零,八点半的定时任务它按1970年算,我在路由器时间不对那篇里写过整过程。当时我妈在旁边看热闹,随口问了一句:那手机咋从来不用人对表?

就这一句,把我问住了。是啊,手机插卡就有时间,飞行模式连WiFi也有时间,十年没见谁手机时间错过。路由器断个电就失忆,电脑拔了电源三年时间照样走。同样是电子产品,差距怎么这么大?回家我把这件事从头到尾拆了一遍,还自己发了几个包看它到底怎么对时的。

先说清楚:三种设备,三种活法

把手机、电脑、路由器摆一起对比,答案就出来了——区别在「有没有人给它养着表」。

手机最舒服。插着卡的时候,基站会通过蜂窝网络的控制信道直接把日期时间推下来,这功能有个名字叫NITZ,运营商白送的。就算手机没流量、没打电话,只要在网内就能收到。连WiFi的时候手机还会再走NTP对一遍,两套保险互相兜着。

电脑靠硬件。主板上一颗CR2032纽扣电池,养着一颗走时芯片,学名RTC,实时时钟。机器关机拔电源,电池接着供芯片走时,所以电脑放半年不开机,开机时间还是对的。系统起来之后Windows自带的Windows Time服务再定期跟time.windows.com校准一次,把电池走出来的微小漂移掰回来。

路由器最惨。成本抠得狠,电池没有,走时芯片也没有,内存一断电就空。通电那一瞬间,它连今天是几年几月都不知道,全指望联网之后NTP把它拉回来。我家那台老AC2100改的IoT专网AP就这德行,断电再来,后台日志时间直接从0点起算。

设备断电后时间靠什么对时
手机不归零(基站+网络双保险)基站NITZ推送 + NTP
电脑不归零(纽扣电池养RTC)主板RTC + Windows Time
路由器归零,从1970年起算只有NTP一根救命稻草

NTP就是一通问时间的电话,包小得离谱

NTP说白了就是给「问现在几点」这件事定了个统一格式,走UDP 123端口——对,就是跟DNS查询一样走UDP,小包一问一答,不用建立连接,这块在TCP和UDP那篇里讲过为什么小问答用UDP划算。

我拿python写了几行,亲手发了一个。请求包48个字节,有意思的地方在于:只有第一个字节是有内容的0x1B,剩下的47个字节全是零。就这一个字节里塞了三件事——版本号3、我是客户端、麻烦回我一声。服务器收到,原样回一个48字节的包,里面带着它此刻的准确时间。

回包里能看到啥?我把阿里、腾讯、国家授时中心三家各问了一遍,数据摆出来:

服务器层级(stratum)往返耗时标准偏移
ntp.tencent.com266.7ms-0.1ms
ntp.aliyun.com254.6ms+8.2ms
ntp.ntsc.ac.cn3(另一次查到4)136.5ms+22.0ms

偏移就是「它比我快多少」。腾讯那台跟我本地钟几乎分毫不差,阿里快8毫秒出头,这点差距人对表都看不出来,无所谓。但「往返耗时」这一列有讲究——路要走几十毫秒,表怎么知道误差里多少是路费?NTP的算法很聪明:请求发出记一个时刻,服务器收到、回复各记一个,回到本地再记一个,四个时刻一减,去程返程各摊一半,路费就扣掉了。这就是它能对到毫秒级的底气。

时间也有族谱:stratum分层

回包里那个stratum字段,是这条时间链上「离真钟隔几层」的意思。

最顶上是stratum 0,原子钟、GPS星上的钟,准是真准,但它们不直接对外服务,怕被问挂。靠它们直接对时的服务器是stratum 1,各个国家的时间中心、大机构养着这批机器。再往下问stratum 1要时间的,就是stratum 2——阿里腾讯的公共NTP实测都是2。你家路由器问完阿里,自己就是stratum 3,家里的设备再跟路由器对,就是stratum 4。

这里有个反直觉的事。国家授时中心的公开NTP,我实测拿到的是stratum 3,另一次查到4——好些人第一反应是「国家中心怎么也得是1吧」。不是它不行,是公开查询流量太大,机房在真正的守时钟前面挂了好几层分发,你问到的是外面那几层。包里还有个更有意思的字段:服务器自己上回跟上游对时的时刻。阿里那台给我回的是02:38:46,就在我查询前几分钟——它不是天天守着原子钟,而是每隔一阵自己往上对一次,平时拿本地钟撑着。

顺带说个冷知识。NTP时间戳不是从1970年起算的,是1900年,比Unix纪元早70年。而且秒数那栏只有32位,2的32次方秒约等于136年——也就是说2036年2月就翻篇了。新标准有换代处理,但老设备老固件到时候犯什么浑,谁也说不好。另外它小数那栏还有32位,能表达到0.23纳秒。表能读到纳秒,路要走几十毫秒,精度瓶颈从来都在路上,不在表上。

手机为啥不用管:基站在天上给它对表

回到我妈那个问题。手机插卡就有时间,靠的是上面说的NITZ——运营商基站的广播信道里本来就带着日期时间,手机开机搜到网,顺手就把表对好了,不用跑任何流量。这就是为什么老人机、功能机没有WiFi没有NTP,时间照样准。

真正会遇到时间漂的是两类:没插卡的WiFi平板,还有用了七八年的老手机——内部晶振老化,一天能漂出去几十秒,这时候才轮到NTP出手。安卓的「自动确定日期和时间」开关,插卡时走NITZ,连WiFi时走NTP,两边都断才歇菜。

路由器为什么归零之后还能救回来?靠启动流程最后那几步。通电自检、读配置、开WiFi、拨号,全干完了才轮到对时这一步——我在路由器启动要干六件事那篇里掐过表,对时恰恰是六件事里最慢的那个。所以断电重启后头一两分钟,后台时间还停在1970年,这期间如果你马上去看定时规则,看到的全是「不生效」的假象,等等就好。

时间不对,坏的不止定时这一件事

定时任务乱只是最容易被发现的那个。我家路由器时间归零那几天,连坐的还有一串:

日志全废。排查断网要看运行日志,结果日志里记的「凌晨3点掉线」真实时间可能是下午,对着日志找规律能把自己绕进去。定时重启的执行时刻也跟着挪窝,这些我吃过亏。

更隐蔽的是证书。HTTPS的证书有生效和过期时间,设备系统时间要是错得太离谱——比如停在1970年——浏览器和App会认为证书「还未生效」直接拒绝连接。明明网是通的,就是死活打不开,多少人把这当成断网修,查线路查DNS折腾一圈。传输加密那套我在http和https的区别里写过,时间戳就是证书的命根子之一。

还有家长的定时断网。我表姐家孩子那台路由器时间飘了二十分钟,9点半的断网到点没执行,孩子多玩了二十分钟才被发现——水星和腾达的家长控制、WiFi定时开关全都吃系统时间,这些功能的设置入口我在WiFi定时开关那篇里挨个列过。

家里该填哪三个,实测说话

结论先给:ntp.aliyun.com、ntp.tencent.com、ntp.ntsc.ac.cn,三个全填,别单吊一个。

按实测数据说话。腾讯偏移最小、层也稳;阿里速度最快;授时中心虽然远了点、层还深一层,但它是国家队,留着当第三条腿。别图洋气去填time.windows.com——我实测往返130多毫秒,还剩两年多就2036年了,老实现心里没底。更别填教程里常见的pool.ntp.org,那是国外随机节点池,国内访问时通时不通,腾达路由器默认就填的这个,坑我在时间那篇里记过。

有一个情况无解,提前说清楚:NTP走UDP 123,有些公司网络会把UDP流量掐得只剩53和443,这种环境下路由器对不上时不是路由器的错,是路被封了。好在家庭宽带不干这事。

收尾给个顺序。路由器时间不对,先去后台确认NTP服务器填的是上面仨(各品牌的设置入口在时间不对怎么调那篇里);还不对,看固件是不是老到没有自动对时选项;都不行再手动设一次时间救急——但记住手动设的只是把表拨对,断电还会归零,根上还是得让NTP能跑通。

场景该干啥
定时任务半夜不执行后台看系统时间,九成归零了,查NTP服务器
时间飘了几分钟NTP服务器年久失效,换阿里腾讯任一
公司网环境对不上时UDP 123可能被掐,无解,别怪路由器
路由器换了新的NTP设置不跟着迁移,新机要重填一遍
展开全文


版权说明 手机扫码阅读
版权所有:《数巢笔记》 => 《手机时间从来不会错,路由器一断电就归零?NTP对时是怎么回事,我发了个包看了看》
本文地址:https://www.shunot.com/lybk/1187.html
除非注明,文章均为 《SHUNOT》 原创,欢迎转载!转载请注明本文地址,谢谢。

发表评论

联系我们

在线咨询:点击这里给我发消息

微信号:master_135

工作日:9:00-23:00,节假日休息

扫码关注