这是一道非常经典的分布式系统题目,主要考察你对 Cristian's 算法(克里斯蒂安算法) 在时钟同步中误差范围的理解。
Cristian 算法的核心思想是:客户端通过向服务器请求当前时间来进行同步,但由于网络传输需要时间(往返延迟),客户端必须对收到的服务器时间进行补偿。由于网络延迟是不确定的,我们只能计算出一个“真实时间”的区间(最早和最晚的可能时间)。
为了方便说明,我们先将题目中给出的已知条件梳理出来,并统一提取秒数部分进行计算:
- T0 (客户端发送请求时间): 14.740
- T1 (客户端收到响应时间): 15.810
- Tserver (服务器返回的当前时间): 14.970
- 最小单趟延迟 (Min Delay): 0.400s
以下是具体的解题步骤:
1. 计算往返总延迟 (RTT)
往返总延迟是客户端从发出请求到收到响应所经历的本地时间总和。
RTT=T1−T0
RTT=15.810−14.740=1.070
这意味着请求去程(客户端到服务器)加上回程(服务器到客户端)的总时间是 1.070s。
2. 分析单趟延迟的极限值
我们设去程延迟为 dreq,回程延迟为 dresp。
根据 RTT 的定义,我们有:
dreq+dresp=1.070
同时,题目已知任何单趟的延迟都至少为 0.400s,所以:
- dreq≥0.400
- dresp≥0.400
客户端收到消息时的真实时刻,等于服务器写下时间戳的那一刻 (Tserver) 加上消息从服务器传回客户端的回程延迟 (dresp)。
因此,我们需要求出 dresp 的最小值和最大值。
3. 计算最早真实时刻
当回程延迟 (dresp) 达到最小值时,客户端收到的就是最早的真实时刻。
根据题意,最小单趟延迟为 0.400s。
- dresp 的最小值 = 0.400s
- 最早真实时刻 = Tserver+最小回程延迟
- 最早时刻的秒数 = 14.970+0.400=15.370
结论:客户端收到消息的最早真实时刻为 11:45:15.370。
4. 计算最晚真实时刻
当回程延迟 (dresp) 达到最大值时,客户端收到的就是最晚的真实时刻。
因为 dreq+dresp=1.070,要让回程延迟最大,去程延迟 (dreq) 必须最小。
- dreq 的最小值 = 0.400s
- dresp 的最大值 = RTT−dreq 的最小值
- dresp 的最大值 = 1.070−0.400=0.670
- 最晚真实时刻 = Tserver+最大回程延迟
- 最晚时刻的秒数 = 14.970+0.670=15.640
结论:客户端收到消息的最晚真实时刻为 11:45:15.640。
最终答案
- 最早真实时刻为:11:45:15.370
- 最晚真实时刻为:11:45:15.640