|
1
26
我最近上了一个小时的这门课,时间还不够长,但我会尽量把它浓缩起来,让你知道正确的方向。准备学一点代数。 让我们根据服务器来计算时间。根据客户的要求,让c等于时间。设d=s-c。d是添加到客户机的时间中,以将其更正为服务器的时间,这是我们需要解决的问题。 首先,我们从服务器向客户机发送一个带有时间戳的数据包。当客户机接收到该数据包时,它将给定的时间戳和自己的时钟之间的差异存储为t1。 然后,客户机向服务器发送一个带有自己时间戳的数据包。服务器将时间戳和它自己的时钟之间的差异作为t2发送回客户机。 注意,t1和t2都包括包的“旅行时间”t加上两个时钟d之间的时间差。假设旅行时间在两个方向上相同,我们现在有两个未知的方程,可以求解:
诀窍来了,因为旅行时间并不总是恒定的,证明你的ping之间的50和200毫秒。它证明了最准确的时间戳使用最小ping时间。这是因为ping时间是“裸机”延迟加上在路由器队列中等待的任何延迟的总和。每隔一段时间,一个幸运的数据包就会在没有任何排队延迟的情况下通过,因此您可以使用该最小时间作为最可重复的时间。 还要记住,时钟的运行速率是不同的。例如,我可以将家里的电脑重置为毫秒,一天后它会慢8秒。这意味着你必须不断地重新调整d。你可以用不同的d值的斜率来计算你的漂移,并在两次测量之间进行补偿,但这超出了这里的回答范围。 希望这能帮你指明正确的方向。 |
|
|
2
2
除非你能使用一些统计方法,否则你的算法不会精确得多。首先,10英镑可能不够。第一个也是最简单的改变是收集100个运输时间样本,然后去掉x最长和最短的样本。 另一个需要补充的是,两个客户机在每个数据包中都发送自己的时间戳。然后你也可以计算他们的时钟有多不同,并检查时钟之间的平均差异。 您还可以具体检查STNP和NTP的实现,因为这些协议是专门做这项工作的。 |