Windows'ta TCP Gönderme ve Alma Sırası boyutlarını nasıl görüntülerim?


10

Linux netstat, gönderme ve alma kuyruk boyutlarını gösterir.

Bu bilgileri Windows altında, özellikle Server 2003'te nasıl edinebilirim?


Görmek istediğiniz çıktının bir örneğini yapıştırabilir misiniz?
Izzy

Bu bağlantıya göz atın. Netstat'tan Recv-Q ve Send-Q sütunlarına ihtiyacım var. linux-ip.net/html/tools-netstat.html

Yanıtlar:


3

(bu biraz beyin dökümü)

Netstat kaynağının birkaç sürümüne baktığınızdan, aradığınız bilgilerin Windows eşdeğerlerine sahip soketle ilgili çağrılar aracılığıyla değil doğrudan çekirdekten (/ proc / net / ...) sorgulandığı anlaşılıyor. Eğer gerçekten buna sahip olmaya kararlıysanız, netstat'ta nasıl alındığını ve eşdeğer bir şey sağlayan neyi bulabileceğinizi göreceğim.

Sürücü düzeyindeki bilgiler için muhtemelen ndis.com (Ağ Sürücüsü Arabirim Belirtimi) ve PCAUSA.com'a bakmalısınız , çünkü bu bilgiyi Windows'ta almak için en iyi yer olacaktır.

Getsockopt () veya Winsock arenasının çoğunun sizi her yere faydalı kılacağına inanmıyorum, ancak bu yöne gitmek istiyorsanız MSDN Winsock bilgilerine bakın ve Winsock Programcı'nın SSS bölümüne bakın .

Gelen için, bir soket için okunabilir veri miktarını almak üzere FIONREAD ile ioctlsocket () işlevinden yararlı bir şey elde edebilirsiniz; bunu süreçler arasında elde edemeyebilirsiniz ve veri türüne bağlı olarak, birden fazla öğe kuyruğa alınmışsa yalnızca tüm veri bloğu için değil, tüm veri bloğu için bilgi döndürebilir.

Bu bağlamda "biriktirme listesi" üzerinde biraz kazma yapabilirsiniz, ancak gördüğüm şeylerin çoğu, gerçek biriktirmenin ne kadar büyük olduğunu görmekle değil, SYN taşkınlarıyla uğraşmak için maksimum boyutu ayarlamakla ilgili görünüyordu.

Gerçekten kararlıysanız, kendi Katmanlı Servis Sağlayıcınızla bir şeyler yapabilirsiniz , ancak bu tehlikelerle dolu garip ve çirkin bir yol ve bundan uzak durmanızı önereceğim.

GÜNCELLEME: Biraz daha etrafına baktıktan sonra, kesinlikle NDIS OID'lerini sorgulamaya bakmanız gerektiğini düşünüyorum. Sizinle en alakalı bilgileri bulmak, MSDN ile TechNet arasında bir alıştırma olarak bırakılır.


3

Bu soru eski ama biraz bilgi eklemek istedim. Google'da oldukça yüksek bir arama sonucudur.

Bildiğim kadarıyla bunu yapmanın bir yolu yok, ama eğer herkes daha fazla kazma yapabilir ve çok takdir edilecek geçerli bir alternatif bulabilirse!

@Fencepost'un cevabında işaret ettiği gibi, NDIS OID'lerini sorgulamayı deneyebilirsiniz. Bulduğum en alakalı NDIS OID'si OID_GEN_TRANSMIT_QUEUE_LENGTH

NDIS OID'lerinin çoğu WMI sınıflarına eşlenir, bunları powershell'de

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

ancak İletim Kuyruğu Uzunluğu için bir tane görünmüyor.

@Chris J, Ağ Arabirimi \ Çıkış Kuyruğu Uzunluğu'ndan bahsetti. Bu değeri typeperf ile komut satırından alabilirsiniz .

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

Ancak değer her zaman 0'dır: http://support.microsoft.com/kb/822226

Windows bu bilgileri yalnızca NIC sürücü yazılımında izler ve yalnızca NIC başına sıralanan paketlerdir ve soket başına sıralananları ayırt etmez.

Komut satırında ağ hata ayıklaması yapmak istiyorsanız, perfmon'da bulduğunuz tüm sayaçlar typeperf veya logman kullanılarak sorgulanabilir .


1

İstediğiniz, WinSock API işlev çağrılarının sonuçları olabilir getsockopt:

  • SO_RCVBUF Alıcılar için ayrılan soket başına toplam arabellek alanı. Bu ilgisizdir SO_MAX_MSG_SIZEve TCP alma penceresinin boyutuna karşılık gelmez.

  • SO_SNDBUF Gönderme için ayrılan toplam soket başına arabellek alanı. Bu bir alakasızdır SO_MAX_MSG_SIZEve mutlaka bir TCP gönderme penceresinin boyutuna karşılık gelmez.

Sorun şu ki, sapını bildiğiniz soketler istenebilir. Dışarıdan sorgulamak zor görünüyor, sysinternals TcpView aracına bir göz atın . Mark Russinovich gerçekten bir çatlak ve aletinde bilgi sağlamıyor bile. Değerleri kolayca elde etmek için bir sütun olsaydı bir sütun ekleyeceğinden eminim ...

Bazı çekirdek sürücülerinin sisteme inmeye yardımcı olabileceğini tahmin ettim ancak mevcut herhangi bir araç bulamadık. Boyutlar her soket bazında ayarlanabilir, böylece küresel değerlerin anlamı yoktur ...


1

Bulabildiğim en yakın şey performans sayacı Network Interface\Output Queue Length. Bu bağlantı başına değil - yalnızca arabirim başına ve yalnızca giden kuyruğu kapsar (açıkçası, adına göre).


1

Şimdi, pencere boyutları soket başına farklı! Arayüz başına ayarlar yalnızca varsayılan değerleri temsil eder.

Her soketin pencere boyutunu görmenin bir yolunu bilmiyorum. Solaris'te bu "netstat" ile görülebilir.


0

Buraya bir göz atın: http://support.microsoft.com/kb/224829 .


1
özellikle, oraya ne bakmalıyım?

Windows, TCP alma penceresi boyutunu ayarlamak için çeşitli algoritmalar kullanır; bir Kayıt Defteri anahtarı ayarlayarak varsayılanı geçersiz kılabilirsiniz. Bu program size yardımcı olabilir: dslreports.com/drtcp .
Massimo

Massimo- Pencere boyutlarını sıraya alınmış verilerle karıştırıyorsunuz. Pencere boyutlarıyla ilgilenmiyorum.

Tamam üzgünüm. Bu bilgiler zaten Windows'ta mevcut değil.
Massimo
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.