如何在Windows上查看TCP发送和接收队列的大小?


Answers:


3

(这有点脑筋急转弯)

通过查看netstat源的几个版本,似乎正在直接从内核(/ proc / net / ...)查询您要查找的信息,而不是通过具有Windows等效项的套接字相关调用来查询。如果您真的确定要拥有此功能,那么我将看看如何在netstat中检索它,并查看可以找到的功能是否等效。

您可能应该查看ndis.com(网络驱动程序接口规范)和PCAUSA.com以获取驱动程序级别的信息,因为这可能是您在Windows上检索此信息的最佳位置。

我不相信getsockopt()或大多数Winsock领域都可以将您带到有用的地方,但是如果您想朝这个方向发展,请查看MSDN Winsock信息,并查看Winsock程序员的FAQ

对于入站,您可以使用FIONREAD从ioctlsocket()函数中获取有用的信息,以获取套接字的可读数据量。您可能无法跨进程获取此信息,并且根据数据类型的不同,它可能仅返回第一个数据块的信息,而不是整个队列的信息(如果有多个队列)。

在这种情况下,您可能需要对“积压”进行一些挖掘,但是我看到的大部分内容似乎与设置用于​​处理SYN泛洪的最大大小有关,而不是与查看实际积压有多大有关。

如果您确实有决心,则可以与您自己的分层服务提供商一起执行某些操作,但这是一条充满危险的奇怪而丑陋的道路,我建议您远离它。

更新:经过一番探索之后,我绝对认为您应该考虑查询NDIS OID。MSDN和TechNet之间的练习是查找与您最相关的信息。


3

这个问题很旧,但是我想补充一些信息。在Google上的搜索结果相当高。

据我所知,这是没有办法的,但是如果有人可以做更多的挖掘工作,并找出有效的替代方法,将不胜感激!

正如@Fencepost在他的答案中指出的那样,您可以尝试查询NDIS OID。我发现最相关的NDIS OID是OID_GEN_TRANSMIT_QUEUE_LENGTH

大多数NDIS OID都映射到WMI类,您可以使用以下命令在powershell中列出它们:

Get-WmiObject -Namespace root\wmi -List  | Where-Object {$_.name -Match "MSNdis" } | Sort-Object

但似乎没有一个“传输队列长度”。

@Chris J提到了网络接口\输出队列长度。您可以使用typeperf在命令行上获取此值。

typeperf "\Network Interface(*)\Output Queue Length" -sc 1

但是该值始终为0:http : //support.microsoft.com/kb/822226

Windows仅在NIC驱动程序软件中跟踪此信息,并且它仅是每个NIC排队的数据包,并且不区分每个套接字排队的内容。

如果您确实想在命令行上进行网络调试,则可以使用typeperflogman查询在perfmon中找到的任何计数器。


1

您想要的可能是WinSock API函数调用的结果getsockopt

  • SO_RCVBUF 保留用于接收的每个套接字的总缓冲区空间。这与SO_MAX_MSG_SIZETCP接收窗口的大小无关,也不一定与之对应。

  • SO_SNDBUF 保留用于发送的每个套接字的总缓冲区空间。这与SO_MAX_MSG_SIZETCP发送窗口的大小无关,也不一定与之对应。

问题是可以要求您知道其句柄的套接字。从外部查询似乎很困难,请查看sysinternals TcpView工具。马克·鲁西诺维奇(Mark Russinovich)确实是个裂缝,即使他没有在工具中提供信息。我很确定,如果他有一个轻松获得价值的方法,他会增加一列。

我猜有些内核驱动程序可以帮助深入系统,但找不到任何可用的工具。可以在每个套接字的基础上设置大小,以便全局值没有意义...


1

我能找到的最接近的是性能计数器Network Interface\Output Queue Length。但是,这不是每个连接-只是每个接口,仅覆盖出站队列(显然,它的名称)。


1

现在,每个插座的窗口大小都不同!每个接口的设置仅代表默认值。

我不知道如何查看每个套接字的窗口大小。在Solaris中,可以通过“ netstat”看到。


0

在这里看看:http : //support.microsoft.com/kb/224829


1
具体来说,我应该在那儿看什么?

Windows使用各种算法来设置其TCP接收窗口的大小。您可以通过设置注册表项来覆盖默认设置。该程序还可以帮助您:dslreports.com/drtcp
Massimo

Massimo-您将窗口大小与排队的数据混淆了。我对窗口大小不感兴趣。

好的,对不起。无论如何,此信息在Windows中不可用。
Massimo
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.