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, возвращаемые
    раз (2)),

  • системное время процессора (сумма
    Значения tms_stime и tms_cstime в структуре tms, возвращаемые
    раз (2)).

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

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

Спасибо Петр

3 ответа3

6

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

$ ping -U 192.168.1.3

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

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

6

Флаг 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) чтобы получать только те пакеты, которые вам интересны. (Что было бы хорошей идеей, поскольку сброс всего трафика из загруженных систем может привести к огромной нагрузке.)

5

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .