Como posso visualizar os tamanhos de fila de envio e recebimento de TCP no Windows?

10

O Linux netstat mostra os tamanhos das filas de envio e recebimento.

Como faço para obter essa informação no Windows, especificamente no Server 2003?

    
por Izzy 21.09.2009 / 21:01

6 respostas

3

(isso é um pouco de despejo cerebral)

De olhar para algumas versões da fonte netstat, parece que a informação que você está procurando está sendo consultada diretamente do kernel (/ proc / net / ...) não através de chamadas relacionadas ao socket que Equivalentes do Windows. Se você está realmente determinado a ter isso, eu vejo como ele está sendo recuperado no netstat e vejo o que você pode encontrar e que fornece algo equivalente.

Provavelmente, você deve analisar ndis.com (Especificação da interface do driver de rede) e PCAUSA.com para informações em nível de driver, porque é provável que seja o melhor local para recuperar essas informações no Windows.

Eu não acredito que getsockopt () ou a maior parte da arena Winsock vá te levar a qualquer lugar útil, mas se você quiser ir nessa direção, veja as informações do MSDN Winsock e confira FAQ do programador do Winsock .

Para entrada, você pode conseguir algo útil da função ioctlsocket () com FIONREAD para obter a quantidade de dados legíveis para um socket; talvez você não consiga fazer isso nos processos e, dependendo do tipo de dados, só possa retornar informações para o primeiro bloco de dados, não para a fila inteira, se houver mais de um item na fila.

Você pode fazer algumas pesquisas sobre o "backlog" nesse contexto, mas a maior parte do que vi pareceu estar relacionada ao ajuste do tamanho máximo para lidar com inundações de SYN, não ao ver o tamanho real do atraso.

Se você estiver realmente determinado, poderá fazer algo com seu próprio Provedor de serviços em camadas , mas isso um caminho estranho e feio cheio de perigos e eu vou sugerir ficar longe disso.

UPDATE: Depois de bisbilhotar um pouco mais, eu definitivamente acho que você deve olhar para a consulta de OIDs NDIS. Encontrar as informações mais relevantes para você é um exercício entre você, MSDN e TechNet.

    
por 04.12.2009 / 01:23
3

Essa pergunta é antiga, mas eu queria adicionar algumas informações. É um resultado de pesquisa bastante alto no Google.

Tanto quanto eu posso dizer, não há uma maneira de fazer isso, mas se alguém puder fazer mais escavações e descobrir uma alternativa válida que seria muito apreciada!

Como @Fencepost apontou em sua resposta, você pode tentar consultar OIDs NDIS. O OID do NDIS mais relevante que encontrei é OID_GEN_TRANSMIT_QUEUE_LENGTH

A maioria dos OIDs NDIS são mapeados para classes WMI, você pode listá-los em powershell com

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

mas parece não haver um para Comprimento da Fila de Transmissão.

@Chris J mencionou Network Interface \ Output Queue Length. Você pode obter esse valor na linha de comando com typeperf .

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

Mas o valor é sempre 0: link

O Windows monitora essas informações apenas no software do driver da NIC, e são apenas pacotes enfileirados por NIC e não distinguem entre o que está na fila por soquete.

Se você quiser fazer depuração de rede na linha de comando, quaisquer contadores que você encontrar em perfmon pode ser consultado usando typeperf ou logman .

    
por 13.01.2014 / 17:23
1

O que você deseja podem ser os resultados das chamadas de função da API do WinSock getsockopt :

  • SO_RCVBUF O total de espaço de buffer por soquete reservado para recebimentos. Isso não está relacionado a SO_MAX_MSG_SIZE e não corresponde necessariamente ao tamanho da janela de recebimento de TCP.

  • SO_SNDBUF O total de espaço de buffer por soquete reservado para envios. Isso não está relacionado a SO_MAX_MSG_SIZE e não corresponde necessariamente ao tamanho de uma janela de envio TCP.

O problema é que se pode pedir soquetes cujo identificador você conhece. Consultar de fora parece ser difícil, dê uma olhada na ferramenta TcpView do sysinternals. Mark Russinovich é realmente um crack e até ele não fornece a informação em sua ferramenta. Tenho certeza que ele teria adicionado uma coluna se ele tivesse uma média para obter os valores facilmente ...

Eu acho que algum driver do kernel poderia ajudar a detalhar o sistema, mas não encontrou nenhuma ferramenta disponível. Os tamanhos podem ser definidos em uma base por soquete para que os valores globais não tenham significado ...

    
por 05.10.2009 / 18:46
1

A coisa mais próxima que posso encontrar é o contador de desempenho Network Interface\Output Queue Length . Isso não é por conexão - apenas por interface e cobre apenas a fila de saída (obviamente, pelo nome).

    
por 30.11.2009 / 17:48
1

Agora, os tamanhos das janelas são diferentes por soquete! As configurações por interface representam apenas os valores padrão.

Não conheço maneira de ver o tamanho da janela de cada soquete. No Solaris, isso pode ser visto com "netstat".

    
por 03.05.2011 / 20:31
0

Dê uma olhada aqui: link .

    
por 21.09.2009 / 21:33