[笔记] NTP协议时差计算
NTP数据包中记录了4个事件:
- 客户端发送
- 服务器接收
- 服务器发送
- 服务器接收
在客户端\(C\)的时钟下,四个事件的时间分别为\(c_1,c_2,c_3,c_4\),其中\(c_1\)和\(c_4\)被记录在NTP数据包中。
在服务端\(S\)的时钟下,四个事件的时间分S别为\(s_1,s_2,s_3,s_4\),其中\(s_2\)和\(s_3\)被记录在NTP数据包中。如表:
| 事件 | 客户端\(C\)的时钟 | 服务端\(S\)的时钟 | NTP数据包记录的 |
|---|---|---|---|
| 1: 客户端发送 | \(c_1\) | \(s_1\) | \(c_1\) |
| 2: 服务器接收 | \(c_2\) | \(s_2\) | \(s_2\) |
| 3: 服务器发送 | \(c_3\) | \(s_3\) | \(s_3\) |
| 4: 服务器接收 | \(c_4\) | \(s_4\) | \(c_4\) |
设客户端和服务器的时钟差为\(\triangle t = s_1-c_1 = s_2-c_2=s_3-c_3=s_4-c_4\)(实际计算时取平均值)
假定往返时间间隔相等,均为\(T\),现求\(T\):
同一个轴上的时间差,即\(c_4-c_1\)和\(s_3-s_2\),是准确的。不同轴上的时间差,如\(s_2-c_1\)是不准确的。不难看出客户侧总时间与服务侧总时间有相等关系\(c_4-c_1 = T + (s_3-s_2) + T\)
从而解出\(T = \frac{(c_4-c_1)-(s_3-s_2)}{2}\)
由\(c_2 = c_1 + T\),可求得\(\triangle t_2 = s_2-c_2 = s_2 - (c_1 + T) \\ = s_2 - c_1 - \frac{(c_4-c_1)-(s_3-s_2)}{2} \\ = \frac{-c_1+3s_2-s_3-c_4}{2}\)
同理可求出\(\triangle t_4 = s_4-c_4 = s_3 + T - c_4 \\ = s_3 - c_4 + \frac{(c_4-c_1)-(s_3-s_2)}{2} \\ = \frac{-c_1-s_2+3s_3-c_4}{2}\)
在1,3点的偏差分别与2,4点相同。
将这四个\(\triangle t'\)求平均,可得\(\triangle t = \frac{s_2-c_1+s_3-c_4}{2}\)
在4处的准确时间应当是\(c_4 + \triangle t\)