Як я бачу розміри черги для надсилання та отримання TCP у Windows?


10

Linux netstat показує розміри черги для надсилання та отримання.

Як отримати цю інформацію в Windows, зокрема Server 2003?


Чи можете ви вставити приклад результату, який ви хочете побачити?
Іззи

Перевірте це посилання. Мені потрібні стовпці Recv-Q і Send-Q від netstat. linux-ip.net/html/tools-netstat.html

Відповіді:


3

(це трохи мозковий дамп)

Переглядаючи пару версій джерела netstat, схоже, що шукану інформацію запитують безпосередньо з ядра (/ proc / net / ...), а не через дзвінки, пов’язані з сокетом, які мають еквіваленти Windows. Якщо ви дійсно налаштовані на це, я б подивився, як це отримується в netstat, і побачу, що ви можете знайти, що забезпечує щось еквівалентне.

Ви, мабуть, варто переглянути інформацію про рівень драйверів на ndis.com ( специфікація мережевого драйвера) та PCAUSA.com , оскільки це, можливо, найкраще знайти цю інформацію в Windows.

Я не вірю, що getsockopt () або більша частина арени Winsock допоможуть вам отримати корисні місця, але якщо ви хочете піти в цьому напрямку, перегляньте інформацію про MSDN Winsock, а також ознайомтеся з поширеними запитаннями програміста Winsock .

Для вхідних даних ви можете отримати щось корисне з функції ioctlsocket () за допомогою FIONREAD, щоб отримати кількість читабельних даних для сокета; можливо, ви не зможете отримати це через процеси, і залежно від типу даних він може повертати інформацію лише для першого блоку даних, а не для всієї черги, якщо в черзі є більше одного елемента.

У цьому контексті ви можете викопати "відставання", але більшість того, що я побачив, здавалося, стосується встановлення максимального розміру для боротьби з паводками SYN, а не насправді з того, наскільки великий фактичний відставання.

Якщо ви дійсно налаштовані, ви, можливо, зможете щось зробити зі своїм власником багатошарових послуг , але це дивна та негарна дорога, повна небезпеки, і я пропоную триматися подалі від неї.

ОНОВЛЕННЯ: Після роздумування трохи більше, я, безумовно, думаю, що ви повинні переглянути запити OID OID. Пошук найбільш актуальної для вас інформації залишається вправою між вами, MSDN та TechNet.


3

Це питання старе, але я хотів додати трохи інформації. Це досить високий результат пошуку в Google.

Наскільки я можу сказати, немає способу це зробити, але якщо хтось може більше викопати та розробити дійсну альтернативу, це буде дуже вдячно!

Як @Fencepost вказував у своїй відповіді, ви можете спробувати запитувати OID NDIS. Найбільш релевантний NDIS OID, який я знайшов, є OID_GEN_TRANSMIT_QUEUE_LENGTH

Більшість OID NDIS відображаються у класах WMI, ви можете перелічити їх у шкалах повноважень

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.

Проблема полягає в тому, що можна попросити розетки, чию ручку ви знаєте. Запит ззовні здається важким, ознайомтеся з інструментом TcpView для sysinternals . Марк Русинович - справді тріщина, і навіть він не надає інформацію у своєму інструменті. Я впевнений, що він додав би стовпець, якби мав на меті легко отримати значення ...

Я думаю, що якийсь драйвер ядра міг би допомогти просвердлити систему, але не знайшов жодного доступного інструменту. Розміри можна встановлювати на базі сокета, щоб глобальні значення не мали значення ...


1

Найближче, що я можу знайти, - лічильник ефективності Network Interface\Output Queue Length. Однак це не за з'єднання - лише за інтерфейс і охоплює лише вихідну чергу (очевидно, за її назвою).


1

Тепер розміри вікон різні в розетці! Установки для інтерфейсу представляють лише значення за замовчуванням.

Я не знаю жодного способу переглянути розмір вікна кожної розетки. У Solaris це можна побачити з "netstat".


0

Подивіться тут: http://support.microsoft.com/kb/224829 .


1
конкретно, що я повинен дивитись там?

Windows використовує різні алгоритми для встановлення розміру вікна прийому TCP; ви можете змінити типовий параметр, встановивши ключ реєстру. Ця програма також може вам допомогти: dslreports.com/drtcp .
Массімо

Massimo- ви плутаєте розміри вікон із даними у черзі. Мене не цікавлять розміри вікон.

Добре вибач. Ця інформація в будь-якому випадку недоступна в Windows.
Массімо
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.