【问题标题】:How to measure one-way latency?如何测量单向延迟?
【发布时间】:2021-06-07 18:18:45
【问题描述】:

我想测量吞吐量从客户端到服务器的时间。目前我只能测量整个行程(从客户端到服务器并返回到客户端),我可以通过测量我们发送数据包之前的时间并在我们从服务器接收到它之后测量它来做到这一点。从技术上讲,如果我要分配整个行程时间,我会得到每个单程吞吐量的平均值。

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

在我创建的图像中,从客户端到服务器的吞吐量是 30 毫秒,从服务器到客户端是 90 毫秒。如果数据具有这样的到达率,那么测量整个往返行程并将其除以 2 将无法得出准确的单程到达时间。如何准确测量单程到达时间?

【问题讨论】:

    标签: java networking latency


    【解决方案1】:

    如何准确测量单程到达时间

    TL;DR - 你不能

    这实际上是一个非常深刻的哲学问题,在物理学的核心(宇宙的底部“金属”)中没有得到解答。物理学并没有明确地知道单向光速,只知道双向光速。到目前为止,我们设计的任何实验都无法回答这个问题。见The One-Way Speed of Light

    虽然可以测量双向路径上的平均速度,但在一个方向或另一个方向上的单向速度是不确定的(而且不仅仅是未知的),除非可以在两个方向上定义什么是“同一时间”不同的位置。为了测量光从一个地方传播到另一个地方所花费的时间,有必要知道在同一时间尺度上测量的开始和结束时间。这需要两个同步时钟,一个在开始处,一个在结束处,或者需要某种从开始到结束瞬时发送信号的方法。没有已知的即时传输信息的方式。因此,平均单向速度的测量值取决于用于同步开始和结束时钟的方法。这是约定俗成的问题。

    您可以通过同步时钟在非相对论情况下任意接近,但您如何知道时钟保持同步?对于您的情况,您必须同意在同一时间信号上进行同步,但传播延迟可能会引入数十到数百毫秒的延迟和抖动。

    因此,如果您想将单向时间确定为小于时钟抖动的准确度,那么您就不走运了。这是ntpq peer 在我的一个 Linux 系统上的输出。

         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 毫秒以内。

    【讨论】:

    • 所以你说没有准确的方法来衡量单向延迟?但是,如果我们将往返时间除以 2,我们能得到一个近似值吗?
    • 没错。如果除以 2,则得到平均延迟。在您的具体示例中,平均延迟为 60 毫秒。您可以通过在每一端添加时间戳来计算单向延迟,但准确性将取决于您同步时钟的能力。
    猜你喜欢
    • 2013-02-17
    • 2021-06-08
    • 1970-01-01
    • 1970-01-01
    • 2019-03-11
    • 1970-01-01
    • 2010-11-17
    • 2015-01-23
    • 2021-01-02
    相关资源
    最近更新 更多