繁体   English   中英

如何获得打开TCP连接的进程的“延迟”?

[英]How can I get the “Latency” of a process that has a TCP connection open?

我希望获得TCP连接的“Latency”字段。 我注意到Windows资源监视器有这个字段,我想知道是否有一种方法可以找到它。 最好不使用WMI。

如果您不确定我在说什么字段,请打开“任务管理器”,转到“性能”选项卡,然后单击“资源监视器”按钮。

资源监视器打开后,展开“TCP连接”区域,您将看到“延迟”字段。 无论如何以编程方式访问它?

谢谢!

我假设资源监视器查看给定TCP表条目的往返时间(RTT)。 这给出了整体网络延迟的合理指示。

您可以使用API​​来访问这些统计信息,即GetPerTcpConnectionEStats 这允许您检索有关特定TCP连接的大量统计信息。

您基本上首先使用GetTcpTable获取tcp连接列表,然后找到所需的行,并将其传递给GetPerTcpConnectionEStats ,并将TcpConnectionEstatsPath作为EstatsType参数,以便获得TCP_ESTATS_PATH_ROD_v0结构。

此结构中包含许多RTT统计信息,其中最有用的可能是SumRtt和CountRtt成员,您可以使用它们来获取该特定TCP表行的平均RTT计算。

请注意,这些功能仅存在于Vista及更高版本中,但资源监视器也是如此,所以我认为没问题。

我认为您无法通过任何API访问此信息。 资源监视器可能通过查看数据包被回复所需的时间来计算它。

要在您的应用中执行此操作,请执行以下操作(伪代码):

startTime = now
socket = openSocket()
endTime = now
latency = endTime - startTime

它不会非常精确,但它应该非常接近实际的网络延迟。 但是,请记住, Nagle的算法可能会影响延迟计算。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM