Измерение задержки в сети (Linux)


8

Я хотел бы измерить задержку сети для запроса SNMP GET. Существует бесплатный инструмент командной строки, timeкоторый можно использовать для поиска статистики времени для различных команд. Например, его можно использовать snmpgetследующим образом:

$ time snmpget -v 2c -c public 192.168.1.3 .1.3.6.1.2.1.2.2.1.10.2
IF-MIB::ifInOctets.2 = Counter32: 112857973

real    0m0.162s
user    0m0.069s
sys 0m0.005s

Согласно руководству, статистика состоит из:

  • прошедшее реальное время между вызовом и завершением,

  • пользовательское процессорное время (сумма значений
    tms_utime и tms_cutime в структуре tms, возвращенная
    times (2)),

  • системное время ЦП (сумма значений
    tms_stime и tms_cstime в структуре tms, возвращаемых
    times (2)).

Как видите, ни один из этих параметров не позволяет измерить реальное время задержки в сети (за исключением статистики времени выполнения других программ). Есть ли способ сделать это? Может быть, не используя инструмент времени, а скорее некоторые хаки ядра?

Я хотел спросить, прежде чем я начну писать свою собственную программу.

Спасибо Петр

Ответы:


5

В tcpdump(8)программах -tttфлаг может быть только то , что вам нужно:

00:00:00.000031 IP haig.mdns > 224.0.0.251.mdns: 0 PTR (QM)? 1.0.168.192.in-addr.arpa. (42)
00:00:01.897031 IP haig.45240 > stackoverflow.com.www: Flags [F.], seq 866615166, ack 62506321, win 123, options [nop,nop,TS val 6026371 ecr 419296939], length 0
00:00:00.000030 IP haig.45242 > stackoverflow.com.www: Flags [F.], seq 853537650, ack 61102072, win 123, options [nop,nop,TS val 6026371 ecr 419296939], length 0
00:00:00.000019 IP haig.45243 > stackoverflow.com.www: Flags [F.], seq 863535366, ack 62086489, win 123, options [nop,nop,TS val 6026371 ecr 419296939], length 0

Отметка времени в начале строк показывает время в микросекундах с момента предыдущего пакета. Задав -tв командной строке другое число , вы можете получить абсолютное время, относительное время с момента первого пакета или относительное время между пакетами.

Я только что показал случайные MDNS и веб-трафик, потому что это то, что легко найти в моей системе; Вы можете легко фильтровать SNMP-трафик, tcpdump(8)чтобы получать только те пакеты, которые вам интересны. (Это было бы неплохо, поскольку сброс всего трафика из загруженных систем может привести к огромной нагрузке.)


-tttttтакже может быть полезным - вместо отображения микросекунд с момента последнего пакета он показывает микросекунды с начала трассировки.
Алекс Д

8

Попробуйте пинговать:

$ ping -U 192.168.1.3

Из руководства по пингу:

-U Печать полной задержки между пользователями (старое поведение). Обычно ping печатает сетевое время приема-передачи, которое может быть разным, например, из-за сбоев DNS.


Спасибо за ответ, но я хотел бы измерить задержку, специфичную для запроса на получение SNMP.

5

Запустите вашу программу и тем временем перехватите сетевой трафик с помощью tcpdumpили wireshark. Проверьте время запроса и ответа и выполните простое вычитание.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.