ฉันจะดูขนาด TCP Send and Receive Queue บน Windows ได้อย่างไร


10

Linux netstat แสดงขนาดการส่งและรับคิว

ฉันจะรับข้อมูลนี้ได้จาก Windows โดยเฉพาะ Server 2003 ได้อย่างไร


คุณสามารถวางตัวอย่างผลลัพธ์ที่คุณต้องการดูได้หรือไม่
อิซซี่

ลองลิงค์นี้ ฉันต้องการคอลัมน์ Recv-Q และ Send-Q จาก netstat linux-ip.net/html/tools-netstat.html

คำตอบ:


3

(นี่เป็นบิตของการถ่ายโอนข้อมูลสมอง)

จากการดูแหล่งที่มาของ netstat สองรุ่นดูเหมือนว่าข้อมูลที่คุณกำลังค้นหานั้นถูกสอบถามโดยตรงจากเคอร์เนล (/ proc / net / ... ) ที่ไม่ได้ใช้การโทรที่เกี่ยวข้องกับซ็อกเก็ตที่มี Windows เทียบเท่า หากคุณตั้งใจแน่วแน่ที่จะมีสิ่งนี้ฉันจะดูว่ามันถูกดึงมาในเน็ตสแตทและดูว่าคุณสามารถค้นหาสิ่งใดที่ให้สิ่งที่เทียบเท่า

คุณควรดูndis.com (ข้อมูลจำเพาะอินเตอร์เฟสไดรเวอร์เครือข่าย) และPCAUSA.comสำหรับข้อมูลระดับคนขับรถเพราะนั่นน่าจะเป็นที่ที่ดีที่สุดในการเรียกข้อมูลของคุณบน Windows

ผมไม่เชื่อว่า getsockopt () หรือส่วนใหญ่ของเวที Winsock เป็นไปเพื่อให้คุณได้รับประโยชน์ที่ใดก็ได้ แต่ถ้าคุณต้องการที่จะไปดูว่าทิศทางที่ข้อมูล MSDN Winsock และตรวจสอบออกWinsock Programmer ของคำถามที่พบบ่อย

สำหรับขาเข้าคุณอาจได้รับสิ่งที่มีประโยชน์จากฟังก์ชั่น ioctlsocket () พร้อมกับ FIONREAD เพื่อรับจำนวนข้อมูลที่อ่านได้สำหรับซ็อกเก็ต คุณอาจไม่สามารถรับสิ่งนี้ข้ามกระบวนการและขึ้นอยู่กับชนิดของข้อมูลมันอาจส่งคืนข้อมูลสำหรับบล็อกแรกของข้อมูลไม่ใช่คิวทั้งหมดหากมีคิวมากกว่าหนึ่งรายการ

คุณอาจทำการขุดใน "งานในมือ" ในบริบทนี้ แต่สิ่งที่ฉันเห็นส่วนใหญ่ดูเหมือนจะเกี่ยวข้องกับการกำหนดขนาดสูงสุดสำหรับการรับมือกับน้ำท่วม SYN ไม่ใช่การเห็นว่ามีงานในมือที่แท้จริงมากเพียงใด

หากคุณตั้งใจแน่วแน่จริงๆคุณอาจทำอะไรกับผู้ให้บริการเลเยอร์ของคุณเองแต่นั่นเป็นถนนที่แปลกและน่าเกลียดที่เต็มไปด้วยอันตรายและฉันจะแนะนำให้อยู่ห่าง ๆ

UPDATE: หลังจากโผล่ไปอีกสักหน่อยฉันคิดว่าคุณควรดูการสืบค้น NDIS OID การค้นหาข้อมูลที่เกี่ยวข้องกับคุณมากที่สุดคือการออกกำลังกายระหว่างคุณ MSDN และ TechNet


3

คำถามนี้เก่า แต่ฉันต้องการเพิ่มข้อมูล มันเป็นผลการค้นหาที่ค่อนข้างสูงใน Google

เท่าที่ฉันสามารถบอกได้ว่าไม่มีวิธีการทำเช่นนี้ แต่ถ้าใครสามารถขุดเพิ่มเติมและหาทางเลือกที่ถูกต้องที่จะได้รับการชื่นชมมาก!

ตามที่ @Fencepost ชี้ให้เห็นในคำตอบของเขาคุณสามารถลองสอบถาม NDIS OID ได้ NDIS OID ที่เกี่ยวข้องที่สุดที่ฉันพบคือOID_GEN_TRANSMIT_QUEUE_LENGTH

NDIS OIDs ส่วนใหญ่จะถูกแมปกับคลาส 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

ปัญหาคือว่าสามารถขอซ็อกเก็ตที่มีด้ามจับที่คุณรู้ การสืบค้นจากภายนอกดูเหมือนจะเป็นเรื่องยากลองดูที่เครื่องมือsysinternals TcpView Mark Russinovich เป็นรอยร้าวจริงๆและแม้ว่าเขาจะไม่ได้ให้ข้อมูลในเครื่องมือของเขา ฉันค่อนข้างแน่ใจว่าเขาจะเพิ่มคอลัมน์ถ้าเขามีค่าเฉลี่ยเพื่อให้ได้ค่าอย่างง่ายดาย ...

ฉันเดาว่าเคอร์เนลไดรเวอร์บางตัวสามารถช่วยเจาะลึกเข้าไปในระบบ แต่ไม่พบเครื่องมือใด ๆ ขนาดสามารถตั้งค่าบนฐานต่อซ็อกเก็ตเพื่อให้ค่าทั่วโลกไม่มีความหมาย ...


1

Network Interface\Output Queue Lengthสิ่งที่อยู่ใกล้ฉันสามารถหาเป็นนับประสิทธิภาพการทำงาน นี่ไม่ใช่การเชื่อมต่อ แต่เพียงสำหรับแต่ละอินเทอร์เฟซและครอบคลุมเฉพาะคิวขาออกเท่านั้น


1

ตอนนี้ขนาดหน้าต่างจะแตกต่างกันต่อซ็อกเก็ต! การตั้งค่าต่ออินเตอร์เฟสแสดงถึงค่าเริ่มต้นเท่านั้น

ฉันรู้ว่าไม่มีวิธีดูขนาดหน้าต่างของแต่ละซ็อกเก็ต ในโซลาริสสิ่งนี้สามารถเห็นได้ด้วย "netstat"


0

มีลักษณะที่นี่: http://support.microsoft.com/kb/224829


1
โดยเฉพาะสิ่งที่ฉันควรจะดูที่นั่น?

Windows ใช้อัลกอริทึมต่าง ๆ เพื่อตั้งค่า TCP รับขนาดหน้าต่าง คุณสามารถแทนที่ค่าเริ่มต้นได้ด้วยการตั้งค่าคีย์รีจิสทรี โปรแกรมนี้ยังสามารถช่วยให้คุณ: dslreports.com/drtcp
Massimo

Massimo- คุณกำลังสับสนขนาดของหน้าต่างด้วยข้อมูลที่อยู่ในคิว ฉันไม่สนใจขนาดหน้าต่าง

โอเคขอโทษ ยังไม่มีข้อมูลนี้ใน Windows
Massimo
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.