编辑
2026-06-20
日常
00

目录

1. 计算往返总延迟 (RTT)
2. 分析单趟延迟的极限值
3. 计算最早真实时刻
4. 计算最晚真实时刻
最终答案

这是一道非常经典的分布式系统题目,主要考察你对 Cristian's 算法(克里斯蒂安算法) 在时钟同步中误差范围的理解。 Cristian 算法的核心思想是:客户端通过向服务器请求当前时间来进行同步,但由于网络传输需要时间(往返延迟),客户端必须对收到的服务器时间进行补偿。由于网络延迟是不确定的,我们只能计算出一个“真实时间”的区间(最早和最晚的可能时间)。

为了方便说明,我们先将题目中给出的已知条件梳理出来,并统一提取秒数部分进行计算:

  • T0T_0 (客户端发送请求时间): 14.740
  • T1T_1 (客户端收到响应时间): 15.810
  • TserverT_{server} (服务器返回的当前时间): 14.970
  • 最小单趟延迟 (Min Delay): 0.400s

以下是具体的解题步骤:

1. 计算往返总延迟 (RTT)

往返总延迟是客户端从发出请求到收到响应所经历的本地时间总和。

RTT=T1T0RTT = T_1 - T_0

RTT=15.81014.740=1.070RTT = 15.810 - 14.740 = 1.070

这意味着请求去程(客户端到服务器)加上回程(服务器到客户端)的总时间是 1.070s

2. 分析单趟延迟的极限值

我们设去程延迟为 dreqd_{req},回程延迟为 drespd_{resp}。 根据 RTT 的定义,我们有:

dreq+dresp=1.070d_{req} + d_{resp} = 1.070

同时,题目已知任何单趟的延迟都至少为 0.400s,所以:

  • dreq0.400d_{req} \ge 0.400
  • dresp0.400d_{resp} \ge 0.400

客户端收到消息时的真实时刻,等于服务器写下时间戳的那一刻 (TserverT_{server}) 加上消息从服务器传回客户端的回程延迟 (drespd_{resp})。 因此,我们需要求出 drespd_{resp} 的最小值和最大值。

3. 计算最早真实时刻

当回程延迟 (drespd_{resp}) 达到最小值时,客户端收到的就是最早的真实时刻。 根据题意,最小单趟延迟为 0.400s

  • drespd_{resp} 的最小值 = 0.400s
  • 最早真实时刻 = Tserver+最小回程延迟T_{server} + \text{最小回程延迟}
  • 最早时刻的秒数 = 14.970+0.400=15.37014.970 + 0.400 = 15.370

结论:客户端收到消息的最早真实时刻为 11:45:15.370

4. 计算最晚真实时刻

当回程延迟 (drespd_{resp}) 达到最大值时,客户端收到的就是最晚的真实时刻。 因为 dreq+dresp=1.070d_{req} + d_{resp} = 1.070,要让回程延迟最大,去程延迟 (dreqd_{req}) 必须最小

  • dreqd_{req} 的最小值 = 0.400s
  • drespd_{resp} 的最大值 = RTTdreqRTT - d_{req} 的最小值
  • drespd_{resp} 的最大值 = 1.0700.400=0.6701.070 - 0.400 = 0.670
  • 最晚真实时刻 = Tserver+最大回程延迟T_{server} + \text{最大回程延迟}
  • 最晚时刻的秒数 = 14.970+0.670=15.64014.970 + 0.670 = 15.640

结论:客户端收到消息的最晚真实时刻为 11:45:15.640


最终答案

  • 最早真实时刻为:11:45:15.370
  • 最晚真实时刻为:11:45:15.640