如何更准确地测量单向网络延迟?

问题描述

据我所知,有两种方法可以得到单向网络延迟的近似值:

  1. 一个选项是测量来自网络的双向延迟并将其除以 2。这样您就可以得到一个“粗略”的时间估计。
  2. 第二种方法是利用网络时间协议,其中两台计算机都使用同步时钟来测量单向延迟。

如果还有其他方法欢迎分享。但我的问题是:估计单向延迟的更合适方法是什么?什么方法会更准确?

解决方法

为了使用 NTP 计算单向网络延迟,只有一台计算机必须运行 NTP 服务。另一个只需要充当 NTP 客户端,创建一个 NTP 数据包并从另一个查询时间,这可以使用任何带有 NTP 客户端模块(例如 Java 或 Python)的编程语言来完成。网络延迟是两台计算机时钟之间相对时间的增量,而不是一个时钟到另一个时钟的绝对时间。

如果您向远程 NTP 服务器发送 NTP 查询数据包,则可以根据本地时钟的时间和结果响应中远程服务器的时间计算往返延迟。

  • t1 = 请求离开时客户端的本地时间 服务器
  • t2 = 请求到达时在服务器上的接收时间 客户
  • t3 = 响应离开时在服务器上的传输时间 为客户
  • t4 = 客户端收到 NTP 消息的本地时间

往返延迟 d 和时钟偏移 c 为:

     delay = (t4 - t1) - (t3 - t2)
     clock offset = (t2 - t1 + t3 - t4)/2

NTP standard 中所定义,“上述隐含假设是单向延迟在统计上是往返延迟的一半,并且客户端和服务器时钟的固有漂移率很小且接近到相同的值”。