如何测量单向延迟?

3

我想测量客户端到服务器的吞吐时间,但目前只能测量完整的往返时间(从客户端到服务器再返回客户端)。我可以通过在发送数据包之前测量时间,并在从服务器返回后测量时间来实现。从技术上讲,如果将往返时间除以2,则会得到每个单向吞吐量的平均值。

但是,如果某些吞吐量实际上需要更长的时间才能到达,就像这样:

enter image description here

在这张图片中,我创建了从客户端到服务器的吞吐时间为30毫秒,从服务器到客户端为90毫秒。如果数据具有这样的到达速率,则测量完整的往返时间并除以2不会给出准确的单向到达时间。如何准确地测量单向到达时间?

2个回答

2
我该如何精确地测量单向到达时间?
简而言之,你无法做到。
这实际上是一个非常深刻的哲学问题,在物理学的核心(宇宙的底层“金属”)没有得到明确答案。物理学并不确定光的单向速度,只知道双向速度。到目前为止,我们所设计的实验都无法回答这个问题。参见光的单向速度
虽然可以测量两个方向上路径的平均速度,但在任何一个方向上的单向速度都是未定义的(并不仅仅是未知),除非能够定义在两个不同位置上的“相同时刻”。要测量光从一个地方到另一个地方所需的时间,必须知道在同一时间标度上测得的起始和结束时间。这要求有两个同步时钟,一个在起点,一个在终点,或者有某种立即将信号发送从起点到终点的方法。目前没有已知的即时传输信息的手段。因此,平均单向速度的测量值取决于用于同步起点和终点时钟的方法。这是一个惯例问题。
你可以通过同步时钟来达到非相对论情况下的任意接近,但是如何知道时钟保持同步呢? 对于您的情况,您必须同意在同一时间信号上进行同步,但传播延迟可能会引入十几到几百毫秒的延迟和抖动。
因此,如果您想将单向时间精度固定在小于时钟抖动的精度之内,那么您就没有办法了。以下是我Linux系统中ntpq peer的输出结果。
     remote           refid      st t when poll reach   delay   offset  jitter
==============================================================================
*unifi.versadns. 71.66.197.233    2 u  289 1024  377    2.298   -0.897   0.747
+eterna.binary.n 68.97.68.79      2 u  615 1024  377   42.258   -3.640   0.430
+homemail.org    139.78.97.128    2 u  160 1024  377   45.257   -0.209   0.391
-time.skylineser 130.207.244.240  2 u  418 1024  103   24.829    2.066   1.376

如果两个系统使用相同的主时钟进行同步,并且有足够的时间让延迟和抖动稳定下来,那么您可能能够将单向时间精确到5毫秒以内。

那么你的意思是说没有准确的方法来测量单向延迟吗?但如果我们将往返时间除以二,那么我们就可以得到一个近似值了吗? - Ineversurrender93
这是正确的。如果你除以2,你会得到平均延迟时间。在你的具体例子中,平均延迟时间为60毫秒。你可以通过在每一端进行时间戳来计算单向延迟时间,但准确性将取决于你能够多好地同步时钟。 - Jim Garrison

0

OWAMP - owping 需要同时运行客户端和服务器, 使用NTP或chrony同步时间。 还有昂贵的硬件可以在机器之间同步时间。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接