`

如何测量服务器之间的时间差?

 
阅读更多

问题:

每台服务器都有自己的本地时钟,跨服务器的本地时钟比较是没有意义的。

例如:服务器A上的本地时间ta=1,服务器B上的本地时间tb=2,虽然ta<tb,但我们并不能说ta一定早发生,因为两台服务器的本地时间会有差异。

既然两台服务器的本地时间存在差值,如何来测量两台服务器之间的时间差呢?

 

发包测量法:


     
 

发包流程如上图:

1)服务器A记录一个本地时间Ta1,然后向服务器B发送一个报文;

2)服务器B接收到报文后取本地时间Tb放入到报文中,并将报文发回给服务器A;

3)服务器A收到回复报文后,记录本地时间Ta2。

很容易知道,Ta1和Ta2取的是服务器A的本地时间,Tb取的是服务器B的本地时间。

假设报文往返耗时是相同的(这个假设很合理),那么

x = (Ta2 – Ta1)/2

如果,你硬要说这个x通过一次测量不准确的话,可以发1亿次往返请求,来求出一个相对精确的x值。

假设服务器A与服务器B的绝对时间是相同的(这个假设不合理),那么

Tb = Ta1 + x = (Ta2 + Ta1)/2

可实际上,服务器A与服务器B存在一个时间差,不妨设时间差是“德尔塔”,那么

Tb + “德尔塔” = Ta1 + x= (Ta2 + Ta1)/2

于是,“德尔塔” = (Ta2 + Ta1)/2– Tb

这个“德尔塔”就是服务器A与服务器B的时间差。

 

 

 

  • 大小: 5.2 KB
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics