Soru Windows'ta TCP Gönderme ve Alma Kuyruğu boyutlarını nasıl görüntüleyebilirim?


Linux netstat, sıra boyutlarını gönderiyor ve alıyor.

Bu bilgiyi Windows, özellikle Server 2003 altında nasıl edinebilirim?


10
2017-09-21 19:01


Menşei


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


Cevaplar:


(Bu biraz bir beyin dökümü)

Netstat kaynağının birkaç versiyonuna baktığınız zaman, aradığınız bilginin, Windows eşdeğerleri olan soketle ilgili çağrılarla değil, doğrudan çekirdekten (/ proc / net / ...) sorgulanması gibi görünüyor. Buna gerçekten sahip olursanız, netstat'ta nasıl alındığına bakar ve eşdeğer bir şey sağlayan neleri bulabileceğinizi görürüm.

Muhtemelen bakmak gerekir ndis.com (Ağ Sürücü Arabirim Özelliği) ve PCAUSA.com Sürücü düzeyinde bilgi için, çünkü bu bilgiyi Windows'da almak için en iyi yer olabilir.

Getsockopt () ya da Winsock arenasının çoğunun sizi bir yere götüreceğini düşünmüyorum, ama eğer o yöne gitmek istiyorsanız MSDN Winsock bilgilerine bakıp Winsock Programcının SSS'si.

Gelen için, bir soket için okunabilir veri miktarını almak üzere FIONREAD ile ioctlsocket () işlevinden yararlı bir şey elde edebilirsiniz; Bunu işlemlerden geçiremeyebilirsiniz ve verilerin türüne bağlı olarak, birden fazla öğe sıraya alındıysa, yalnızca tüm kuyruk için olmayan ilk veri bloğu için bilgi döndürmesi mümkün olabilir.

Bu bağlamda "backlog" üzerine biraz araştırma yapabilirsiniz, ancak gördüğüm çoğu SYN taşkınlarıyla uğraşmak için maksimum boyutu belirleme ile ilişkiliydi, gerçek birikimin ne kadar büyük olduğunu görmekle değil.

Gerçekten kararlıysan, kendinle bir şeyler yapabilirsin. Katmanlı Hizmet Sağlayıcıama bu tehlikelerle dolu tuhaf ve çirkin bir yol ve ondan uzak durmayı önereceğim.

GÜNCELLEME: Biraz daha fazla uğraştıktan sonra, kesinlikle NDIS OID'lerini sorgulamaya bakmanız gerektiğini düşünüyorum. Sizinle en alakalı bilgileri bulmak, MSDN ve TechNet arasında bir egzersiz olarak bırakılmıştır.


3
2017-12-04 00:23





Bu soru eski ama bazı bilgiler eklemek istedim. Google’da oldukça yüksek bir arama sonucu var.

Anlayabildiğ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 cevabında belirttiği gibi NDIS OID'lerini sorgulamaya çalışabilirsiniz. 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 ile listeleyebilirsiniz.

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, Network Interface \ Output Queue Length'den bahsetti. Bu değeri komut satırında typeperf.

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

Ama değer her zaman 0: 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ıraya giren paketler olup, her soket için kuyruğa ayrılanları ayırt etmez.

Komut satırında ağ hata ayıklama yapmak istiyorsanız, istediğiniz tüm sayaçlar perfmon kullanarak sorgulanabilir typeperf veya logman.


3
2018-01-13 16:23





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

  • SO_RCVBUF  Alınanlar için ayrılmış toplam yuva başına arabellek alanı. Bu ilgisizdir SO_MAX_MSG_SIZE ve TCP alma penceresinin boyutuna karşılık gelmez.

  • SO_SNDBUF  Gönderilen toplam yuva başına arabellek alanı. Bu ilgisizdir SO_MAX_MSG_SIZE ve bir TCP gönderme penceresinin boyutuna karşılık gelmez.

Sorun, sapını bildiğiniz soketler için sorulabilir. Dışarıdan sorgulama zor görünüyor, sysinternals bir göz var TCPView aracı. Mark Russinovich gerçekten bir çatlak ve hatta kendi aracında bilgi vermez. Değerleri kolayca elde etmek için bir sebebi varsa bir sütun ekleyeceğine eminim ...

Bazı çekirdek sürücülerinin sisteme girmesine yardımcı olabileceğini, ancak herhangi bir uygun araç bulamadığını düşünüyorum. Boyutlar, her bir soket tabanı üzerinde ayarlanabilir, böylece küresel değerlerin anlamı yoktur.


1
2017-10-05 16:46





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


1
2017-11-30 16:48





Şimdi, pencere boyutları soket başına farklı! Arabirimdeki ayarlar sadece varsayılan değerleri temsil eder.

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


1
2018-05-03 18:31





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


0
2017-09-21 19:33



özellikle, neye bakmalıyım?
Windows, TCP alma penceresi boyutunu ayarlamak için çeşitli algoritmalar kullanır; Kayıt defteri anahtarını ayarlayarak varsayılanı geçersiz kılabilirsiniz. Bu program ayrıca size yardımcı olabilir: dslreports.com/drtcp. - Massimo
Massimo- kuyruğa alınmış verilerle pencere boyutlarını karıştırıyorsunuz. Pencere ölçüleriyle ilgilenmiyorum.
Tamam üzgünüm. Bu bilgi, Windows'ta mevcut değildir. - Massimo