Как я могу получить «задержку» процесса с открытым TCP-соединением? - PullRequest
4 голосов
/ 16 июня 2010

Я ищу, чтобы получить поле "Задержка" TCP-соединения.Я заметил, что в Windows Resource Monitor есть это поле, и мне было интересно, есть ли способ найти его.Желательно без использования WMI.

Если вы не уверены, о каком поле я говорю, откройте диспетчер задач, перейдите на вкладку «Производительность» и нажмите кнопку «Монитор ресурсов».

После открытия монитора ресурсов развернитеобласть TCP-соединений, и вы увидите поле задержки.Есть ли какой-либо доступ к этому программно?

Спасибо!

Ответы [ 2 ]

3 голосов
/ 23 декабря 2010

Я предполагаю, что монитор ресурсов просматривает время кругового обхода (RTT) для данной записи таблицы TCP.Это дает разумное указание общей задержки сети.

Существует API, который вы можете использовать для доступа к этой статистике, а именно GetPerTcpConnectionEStats .Это позволяет вам получать множество статистических данных о конкретном TCP-соединении.

Вы в основном получаете список соединений tcp, сначала используя GetTcpTable , затем находите нужную строку и передаваете ее GetPerTcpConnectionEStats с TcpConnectionEstatsPath в качестве параметра EstatsType, так что вы должны получить структуру TCP_ESTATS_PATH_ROD_v0 .

В этой структуре имеется ряд характеристик RTT, наиболее полезными из которых, вероятно, являются члены SumRtt и CountRtt, которые можно использовать для получения среднего значения RTT для этой конкретной строки таблицы TCP.

Обратите внимание, что эти функции существуют только в Vista и выше, но также и в Resource Monitor, поэтому я считаю, что все в порядке.

0 голосов
/ 16 июня 2010

Я не думаю, что вы можете получить доступ к этой информации через любой API. Монитор ресурсов, вероятно, рассчитывает его, видя, сколько времени требуется для ответа на пакеты.

Чтобы сделать это в своем приложении, сделайте что-то вроде этого (псевдокод):

startTime = now
socket = openSocket()
endTime = now
latency = endTime - startTime

Это не будет очень точно, но должно быть достаточно близко к фактической задержке сети. Однако имейте в виду, что алгоритм Нейгла может привести к путанице с вычислениями задержки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...