WindowsでTCP送信および受信キューのサイズを表示するにはどうすればよいですか?


10

Linux netstatは、送信および受信キューのサイズを示します。

Windows、特にServer 2003でこの情報を取得するにはどうすればよいですか?


見たい出力の例を貼り付けることができますか?
Izzy、

このリンクをチェックしてください。netstatのRecv-Q列とSend-Q列が必要です。 linux-ip.net/html/tools-netstat.html

回答:


3

(これはちょっとした脳のダンプです)

netstatソースのいくつかのバージョンを見ると、探している情報は、Windowsの同等機能を持つソケット関連の呼び出しではなく、カーネル(/ proc / net / ...)から直接照会されているようです。これが本当に決まっている場合は、netstatでどのように取得されているかを調べ、同等のものを提供しているものを見つけます。

あなたはおそらく見ておくべきであるndis.com(ネットワークドライバインタフェース仕様)とPCAUSA.comそれはWindows上でこの情報を取得するためにあなたの最高の場所になりそうだから、ドライバレベルの情報を参照してください。

getsockopt()またはほとんどのWinsockアリーナが役立つ場所になるとは思いませんが、その方向に進みたい場合は、MSDN Winsock情報を確認し、Winsock Programmer's 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ごとにキューに入れられたパケットのみであり、ソケットごとにキューに入れられているものを区別しません。

コマンドラインでネットワークデバッグを実行する場合は、perfmonで見つかったカウンターをtypeperfまたはlogmanを使用して照会できます。


1

WinSock API関数呼び出しの結果が必要な場合がありますgetsockopt

  • SO_RCVBUF 受信用に予約されたソケットごとの合計バッファースペース。これはSO_MAX_MSG_SIZE、TCP受信ウィンドウのサイズとは無関係であり、必ずしも対応しているわけではありません。

  • SO_SNDBUF 送信用に予約されたソケットごとの合計バッファースペース。これはSO_MAX_MSG_SIZE、TCP送信ウィンドウのサイズとは無関係であり、必ずしも対応しているわけではありません。

問題は、ハンドルがわかっているソケットを要求できることです。外部からのクエリは難しいようです。sysinternalsTcpViewツールを確認してください。マーク・ルシノビッチは本当に亀裂であり、彼も彼のツールで情報を提供していません。彼が値を簡単に取得する手段を持っていたら、彼は列を追加したと思います...

一部のカーネルドライバーはシステムのドリルダウンに役立つ可能性がありますが、使用可能なツールが見つかりませんでした。サイズはソケットごとに設定できるため、グローバル値は意味を持ちません...


1

私が見つけることができる最も近いものは、パフォーマンスカウンターNetwork Interface\Output Queue Lengthです。ただし、これは接続ごとではありません。インターフェイスごとのみであり、送信キューのみをカバーします(当然のことですが、名前です)。


1

現在、ウィンドウサイズはソケットごとに異なります。インターフェイスごとの設定は、デフォルト値のみを表します。

各ソケットのウィンドウサイズを表示する方法がわかりません。Solarisでは、これは「netstat」で確認できます。


0

1
具体的には、何を見ていると思いますか?

Windowsはさまざまなアルゴリズムを使用して、TCP受信ウィンドウサイズを設定します。レジストリキーを設定することにより、デフォルトを上書きできます。このプログラムは、dslreports.com / drtcpにも役立ちます。
マッシモ

Massimo-キューに入れられたデータとウィンドウサイズを混同しています。ウィンドウのサイズには興味がありません。

すみません。とにかく、この情報はWindowsでは利用できません。
マッシモ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.