在不更改应用程序协议的情况下测量往返TCP延迟

本文关键字:测量 TCP 延迟 情况下 应用程序 协议 | 更新日期: 2023-09-27 17:52:39

是否有任何方法(最好是在c#中)如何在不改变应用协议和不创建单独的专用连接的情况下定期测量连接层延迟(往返)-例如使用一些类似的SYN-ACK技巧,如tcpping,但不关闭/打开连接?

我通过给定的基于ASCII的协议连接到服务器(并且总是使用TCP_NODELAY)。服务器会向我发送大量离散的消息,我也会定期发送"心跳"有效负载(但心跳没有响应有效负载)。我不能更改协议,而且在许多情况下,我也不能创建到服务器的多个物理连接。

在不更改应用程序协议的情况下测量往返TCP延迟

请记住,TCP执行窗口操作,因此在尝试实现优雅的SEQ/ACK解决方案时可能会导致问题。(你想要的是顺序,而不是同步)

[编辑:剪掉一个非常复杂和令人困惑的解释]

我不得不说,最好的方法是使用一个简单的秒表方法,启动一个计时器,提出一个非常薄的请求或投票,并测量从它回来的时间。如果该查询确实是您可以创建的最轻的查询,那么它应该为您提供您可以合理期望等待的最小时间,这有时比ping(可能会误导)更有价值。

如果您确实只需要网络时间来运行和返回,只需使用ICMP ping。