【问题标题】:How to can I implement one way latency measurment using C#?如何使用 C# 实现单向延迟测量?
【发布时间】:2013-02-17 03:11:03
【问题描述】:

我需要测量两个通过 LAN 通信的应用程序之间的单向延迟测量,并将结果报告给数据收集服务器。

客户端应用程序使用多播发送数据,然后它通过两个服务器,最后一个服务器是此测试的终点,如下所示:

Agent -> multicast cloud -> server 1 -> server 2

我考虑过使用 NTP(或 LAN 的 PTP)来同步“代理”和“服务器 2”,但我想知道实现此功能的正确算法是什么,其精度如何。

如何执行此测量(使用 C#)?它的精度是多少?

更新:请注意,代理和服务器 2 之间正在处理数据,因此测量不是纯粹的网络方式。

【问题讨论】:

  • 一般来说,无法确定单向延迟。您能做的最好的事情(除非两端都有准确的时钟)是往返时间(然后除以 2)。
  • 我需要测量应用延迟 - 而不是网络延迟,所以除以 2 对我不起作用:(
  • 好的,等效地您可以使用 PTP 来同步两端(尽管这对延迟 = RTT/2 做出等效假设),然后将时间戳数据包从代理发送到服务器。
  • 我正在测试的延迟包括对此数据的处理操作。处理时间仅以一种方式发生(代理到服务器 2)。

标签: c# networking latency ntp


【解决方案1】:

根本问题是在两台或多台机器之间同步时钟。

Synchronization (of clocks) between two remote computers

一旦你有了这个,你只需在创建/发送数据包时添加一个“构造时间”到数据包本身。从开始到结束的单向延迟是“到达时间”减去“构建时间”

如果您不能信任中间节点,那么您必须让代理向服务器注册,它希望在特定时间发送数据包。那么从开始到结束的单向延迟就是“到达时间”减去“预期到达时间”

【讨论】:

  • 您能否更具体地了解一下是使用 C# 还是使用已知协议来实现?如果您还附上一个简单的算法,我会很高兴:)
  • 如果有帮助,我可以模拟一下这个想法。
  • 当然,那很好,但即使是简单的算法也可以。
  • 时钟同步问题基本上是这里的主要问题,所以我们仍然面临这个问题没有解决方案。
猜你喜欢
  • 2021-06-07
  • 2015-01-23
  • 2021-06-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-02-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多