Skip to content

算法Algorithm

四时间戳时钟估计

Four-timestamp clock estimation · NTP offset and delay estimation

从一次请求与回复的四个读数扣除处理时间,推导偏移可行区间,并区分对称估计、不可识别的不对称延迟与过期观测。

形式陈述 ​

四个读数来自四个不同事件 ​

在消息传递系统里,一次请求经过发送、服务端接收、服务端回复、客户端接收四个事件。将它们的真实时刻记为t₁≤t₂≤t₃≤t₄;同一个请求的四个时钟读数为T₁=A(t₁)、T₂=B(t₂)、T₃=B(t₃)、T₄=A(t₄)。必须配对到同一次交换,不能将一条旧回复与另一条新请求的发送时间拼接。

本页先采用可精确推导的模型:在整个交换窗口内,两钟以相同单位、单位速率运行,A(t)=t+a、B(t)=t+b,偏移θ=b−a恒定。单向传播延迟d_f=t₂−t₁、d_b=t₄−t₃均非负;服务端处理时间p=t₃−t₂也非负。报文内容和打点诚实,暂不加入量化误差、时间回绕与系统钟跳变。

由事件次序直接得到

T2−T1=θ+df,T3−T4=θ−db.

因此全部可行偏移恰为闭区间

I=[T3−T4, T2−T1],δ=(T4−T1)−(T3−T2)=df+db.

区间长度是δ。通常使用的中点估计为

θ^=(T2−T1)+(T3−T4)2,θ^−θ=df−db2.

这就是NTP四戳计算所用的偏移与往返公式;本页明确区分其估计值和模型中的真实偏移。[1, §8, pp.28–30]

直觉

每一程只提供偏移的一侧限制 ​

客户端发送时读到100,服务端收到时读到134。差34可能来自服务端钟快34而传播为零,也可能来自钟快30、传播4。只知道消息不能倒着走,能断定的只是θ≤34。

返回一程提供反向限制。服务端发送136,客户端收到112;差24意味着服务端至少快24,否则回复得在发送之前收到。两程合起来,把θ夹在24与34之间。把这条区间压成一个中点数字,方便显示和校正,却不会增加观测中的信息。

处理时间属于来回等待,不属于传播 ​

客户端经过T₄−T₁=12个单位才收到回复;其中服务端从134处理到136用了2个单位。传播往返应是12−2=10,而不是12。只用客户端RTT再除二,会把服务端排队或处理也误算成链路延迟。

处理时间能够这样相减,依赖两端在此窗口内速率相同。若服务端读数跳了一次,或两端秒的长度不同,T₃−T₂便不再直接等于真实处理时长,必须换成带误差或速率界的模型。

例子与边界

一组读数,多个真实世界 ​

取A(t)=t+100、B(t)=t+130,四个真实时刻依次0、4、6、12。观测是(100,134,136,112),算出p=2、δ=10、I=[24,34]、中点29;真偏移30,中点误差−1。

更关键的是,同一份观测也兼容下面三组参数。每行都满足两条观测方程,处理时间仍为2。

偏移θ 去程d_f 回程d_b 中点误差
24 10 0 +5
30 4 6 −1
34 0 10 −5

对任意θ∈I,都可以令d_f=T₂−T₁−θ、d_b=θ−(T₃−T₄),得到非负延迟并重现四戳。因此I不仅是保守包围,也是当前模型下无法进一步排除的完整集合。中点的最坏误差δ/2在两个端点达到;只有另知d_f=d_b时,才有中点等于真值。

多次测量先求交,再检查合同 ​

如果若干次交换共用同一恒定θ,每条都给一条必须满足的区间,所以可以求交:

四戳T₁/T₂/T₃/T₄ 本次可行区间 累计交集
100/134/136/112 [24,34] [24,34]
200/232/233/205 [28,32] [28,32]
300/331/332/304 [28,31] [28,31]

第三次后仍不能从记录中唯一确定30。反复得到同样的非对称延迟,也不会仅靠样本增多把它变成对称延迟。

再加入(400,441,442,405),得到[37,41],与前面交集为空。这应返回“不相容”:可能恒偏移假设失效,也可能打点或配对有误。把四个中点平均成一个漂亮数字,不是修复矛盾的证明。附件拒绝T₄<T₁、T₃<T₂或δ<0;这是拒绝本页模型不允许的输入,不是在断言真实NTP实现不可能计算出负表观延迟。[1, p.30]

观测会变旧 ​

恒偏移是假设,不是四戳自己测出来的永久事实。若另外有相对偏移变化界:从已知真实参考时刻t₀到t₀+Δ,变化量不超过γΔ,那么I=[L,U]只能传播为[L−γΔ,U+γΔ]。例如[28,32]、γ=1/10、Δ=10,得到[27,33]。

这里Δ是有保证的真实经过时长;若只拿另一个有漂移的本地持续时间来代替,还需用其速率界换算。每个交换窗口内已有漂移时,也不能先当作精确恒偏移区间,再仅在结束后补一点误差。

推论与应用

用区间判断,保留不确定出口 ​

若要判断两个异机日志事件的真实先后,可以先把各自读数转成同一参考上的时间区间。两区间严格分离才能由这份时间证据确定顺序;重叠时应保留未知。未知不等于同时发生,也不等于因果并发,因果还要检查消息与进程内顺序。

偏移估计也不同于租约的速率保证:两个钟此刻显示相同读数,不能证明以后走得一样快;反过来,知道各自持续时间的速率界,即使绝对读数相差很远,也能推导保守期限。

算术成本与对时服务分开 ​

处理一条四戳记录只需常数次加减、比较和除二;流式求m条区间的交集为O(1+m)时间、O(1)额外状态。保存所有测量证书则需O(m)输出。以上按定宽读数单位成本计,附件用Fraction精确表示有理数,大整数乘除及约分的位成本另计。

完整NTP还要处理源选择、滤波、频率校正、时间编码和报文验证。本任务没有实现这些部分,也不由一次探测证明对端忠实、网络对称或未来误差有确定上界。[1, §§9–11,15]

在时钟证书终结任务中,交付四戳、处理时间、区间、三份延迟见证和空交集出口;改变去程和回程而保持往返总和,观察中点如何移动。

参考资料
  1. D. Mills、J. Martin、J. Burbank、W. Kasch,RFC5905: Network Time Protocol Version 4,2010,§8,pp.28–30的四戳与延迟计算;§4、pp.8–9区分偏移、频率误差与随时间增长的不确定性。本页的非负延迟可行集合、端点不可识别证书和有理数例子为所声明模型下的直接推导。
关系图谱5 个相邻概念 · 1 类关系

拖动节点调整位置。

显示关系

显示:依赖

  1. 前置三跳
  2. 前置二跳
  3. 前置一跳
  4. 当前条目
  5. 后续一跳
  6. 后续二跳
  7. 后续三跳
文字版关系按与当前条目的最短距离分组