|
|
楼主 |
发表于 2025-6-23 16:44:59
|
显示全部楼层
本帖最后由 lxl1638 于 2025-6-24 12:04 编辑
不是PING延时,那方法太low,大概原理我用大家能懂的意思说下(有些词只能用类似生活中的词才方便大家理解,不够专业的),有4个时间戳:
T1是你电脑向授时服务器发送授时请求的时间;
T2是授时服务器收到你请求的时间;
T3是授时服务器将处理好的数据发回给你电脑的时间;
T4是你电脑收到授时服务器答复(专业称响应包)的时间。
注意T1和T4是同一个时钟,是你电脑时钟的时间,而T2和T3是另一个时钟,是服务器时钟的时间,这两个时钟是不同的,因为你电脑时钟的时间一般不正确。
T4 - T1就是往返延迟,我限定超过1秒为超时(以前的时间同步工具一般限定为3秒或5秒,因为以前网络环境差,现在网络环境好,我限定要求就高)。
有了上面四个时间戳后,就简单说下同步时间方法,比较好处理有三种方案:
1、直接用T3作正确时间,很多时间同步工具就这样,如论坛发了一个有源码的(我看过源码),这种方案对低延迟的服务器授时请求也够用,它比正确时间会慢大概0.几秒,慢的时间就是回程时间,从T3到T4的时间(此T3、T4要理解成地点)。
2、用T3加回程时间作补偿,这个方案比第1个方案肯定准确,回程时间不能用T4-T3计算,因为T3、T4不是同一时钟,计算方法是 [(T4 - T1) - (T3 - T2)]/2,为什么这样计算自己去理解。这种方法在网络上行和下行速度相等(也叫延迟对称)时,时间精度理论上是没有偏差了,但网络基本不是延迟对称,因而有第3种最常用的简单方法。
3、就是用上面的四个时间戳计算时间偏差(NTP时间协议中用θ表示,这个计算推导过程稍复杂,在此省略),时间偏差的实际意义就是你电脑时间比服务器的快(慢)多少,T4+θ就是正确时间。
GetNetTime用第3种方案,非延迟对称的网络比第2个方案准确,延迟对称时与第2个方案精确度一样。当然针对不同网络环境,不同精度要求,不同应用场所,还有更多方案可选择,但一般的同步时间,上述3种方案就够了。
|
|