Làm cách nào để tôi xem kích thước Gửi và nhận hàng đợi TCP trên Windows?


10

Linux netstat hiển thị gửi và nhận kích thước hàng đợi.

Làm cách nào để có được thông tin này trong Windows, cụ thể là Server 2003?


Bạn có thể dán một ví dụ về đầu ra mà bạn muốn xem không?
Izzy

Kiểm tra liên kết này. Tôi cần các cột Recv-Q và Send-Q từ netstat. linux-ip.net/html/tools-netstat.html

Câu trả lời:


3

(đây là một chút của một bãi rác não)

Từ việc xem xét một vài phiên bản của nguồn netstat, có vẻ như thông tin bạn đang tìm kiếm được truy vấn trực tiếp từ kernel (/ Proc / net / ...) không thông qua các cuộc gọi liên quan đến ổ cắm có tương đương Windows. Nếu bạn thực sự quyết tâm có thứ này, tôi sẽ xem cách nó được truy xuất trong netstat và xem những gì bạn có thể tìm thấy cung cấp thứ gì đó tương đương.

Có lẽ bạn nên xem ndis.com (Đặc tả giao diện trình điều khiển mạng) và PCAUSA.com để biết thông tin cấp trình điều khiển, vì đó có thể là nơi tốt nhất để bạn lấy thông tin này trên Windows.

Tôi không tin rằng getockopt () hoặc hầu hết đấu trường Winsock sẽ giúp bạn có được bất cứ nơi nào hữu ích, nhưng nếu bạn muốn đi theo hướng đó, hãy xem thông tin Winsock của MSDN và cũng xem Câu hỏi thường gặp của Lập trình viên Winsock .

Đối với gửi đến, bạn có thể nhận được một cái gì đó hữu ích từ hàm ioctlsocket () với FIONREAD để lấy lượng dữ liệu có thể đọc được cho một ổ cắm; bạn có thể không có được điều này qua các quy trình và tùy thuộc vào loại dữ liệu, nó chỉ có thể trả về thông tin cho khối dữ liệu đầu tiên không phải cho toàn bộ hàng đợi nếu có nhiều hơn một mục được xếp hàng.

Bạn có thể thực hiện một số hoạt động đào bới "tồn đọng" trong bối cảnh này, nhưng hầu hết những gì tôi thấy dường như liên quan đến việc đặt kích thước tối đa để xử lý lũ lụt, không thực sự là nhìn thấy lượng tồn đọng thực sự lớn đến mức nào.

Nếu bạn thực sự quyết tâm, bạn có thể làm điều gì đó với Nhà cung cấp dịch vụ lớp của riêng bạn , nhưng đó là một con đường kỳ lạ và xấu xí đầy hiểm nguy và tôi sẽ đề nghị tránh xa nó.

CẬP NHẬT: Sau khi chọc ngoáy thêm một chút, tôi chắc chắn nghĩ rằng bạn nên xem xét truy vấn NDIS OID. Tìm kiếm thông tin phù hợp nhất với bạn là một bài tập giữa bạn, MSDN và TechNet.


3

Câu hỏi này đã cũ nhưng tôi muốn thêm một số thông tin. Đó là một kết quả tìm kiếm khá cao trên Google.

Theo như tôi có thể nói không có cách nào để làm điều này, nhưng nếu có ai có thể đào nhiều hơn và tìm ra một giải pháp thay thế hợp lệ sẽ được đánh giá cao!

Như @Fencepost đã chỉ ra trong câu trả lời của anh ấy, bạn có thể thử truy vấn NDIS OID. OID NDIS có liên quan nhất mà tôi tìm thấy là OID_GEN_TRANSMIT_QUEUE_LENGTH

Hầu hết các OID NDIS được ánh xạ tới các lớp WMI, bạn có thể liệt kê chúng trong các quyền hạn với

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

nhưng dường như không có cái nào cho Độ dài hàng đợi truyền.

@Chris J đã đề cập đến Giao diện mạng \ Độ dài hàng đợi đầu ra. Bạn có thể nhận giá trị này trên dòng lệnh bằng typeperf .

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

Nhưng giá trị luôn là 0: http://support.microsoft.com/kb/822226

Windows chỉ theo dõi thông tin này trong phần mềm trình điều khiển NIC và nó chỉ là các gói được xếp hàng trên mỗi NIC và không phân biệt giữa những gì được xếp hàng trên mỗi ổ cắm.

Nếu bạn muốn làm gỡ lỗi mạng trên dòng lệnh, bất kỳ quầy bạn tìm thấy trong perfmon có thể được truy vấn sử dụng typeperf hoặc logman .


1

Những gì bạn muốn có thể là kết quả của các lệnh gọi hàm WinSock API getsockopt:

  • SO_RCVBUF Tổng không gian bộ đệm trên mỗi ổ cắm dành riêng cho nhận. Điều này không liên quan đến SO_MAX_MSG_SIZEvà không nhất thiết phải tương ứng với kích thước của cửa sổ nhận TCP.

  • SO_SNDBUF Tổng không gian bộ đệm trên mỗi ổ cắm dành riêng cho gửi. Điều này không liên quan đến SO_MAX_MSG_SIZEvà không nhất thiết phải tương ứng với kích thước của cửa sổ gửi TCP.

Vấn đề là có thể yêu cầu các ổ cắm có tay cầm mà bạn biết. Truy vấn từ bên ngoài có vẻ khó khăn, hãy xem công cụ TcpView của hệ thống . Mark Russinovich thực sự là một vết nứt và thậm chí anh ta không cung cấp thông tin trong công cụ của mình. Tôi khá chắc chắn rằng anh ta đã thêm một cột nếu anh ta có ý nghĩa để có được các giá trị một cách dễ dàng ...

Tôi đoán một số trình điều khiển hạt nhân có thể giúp đi sâu vào hệ thống nhưng không tìm thấy bất kỳ công cụ có sẵn nào. Các kích thước có thể được đặt trên cơ sở mỗi ổ cắm để các giá trị toàn cầu không có ý nghĩa ...


1

Điều gần nhất tôi có thể tìm thấy là bộ đếm hiệu suất Network Interface\Output Queue Length. Đây không phải là mỗi kết nối mặc dù - chỉ trên mỗi giao diện và chỉ bao gồm hàng đợi bên ngoài (rõ ràng, theo tên của nó).


1

Bây giờ, kích thước cửa sổ là khác nhau cho mỗi ổ cắm! Các cài đặt trên mỗi giao diện chỉ đại diện cho các giá trị mặc định.

Tôi biết không có cách nào để xem kích thước cửa sổ của mỗi ổ cắm. Trong Solaris, điều này có thể được nhìn thấy bằng "netstat".


0

Có một cái nhìn ở đây: http://support.microsoft.com/kb/224829 .


1
cụ thể, tôi nên nhìn gì ở đó?

Windows sử dụng các thuật toán khác nhau để đặt kích thước cửa sổ nhận TCP của nó; bạn có thể ghi đè mặc định bằng cách đặt khóa Sổ đăng ký. Chương trình này cũng có thể giúp bạn: dslreports.com/drtcp .
Massimo

Massimo- bạn đang nhầm lẫn kích thước cửa sổ với dữ liệu xếp hàng. Tôi không quan tâm đến kích thước cửa sổ.

Được rồi xin lỗi. Thông tin này không có sẵn trong Windows, dù sao.
Massimo
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.