Вимірювання затримки в мережі (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

Згідно з посібником, статистика складається з:

  • минулий реальний час між викликом та припиненням,

  • час CPU користувача (сума значень
    tms_utime та tms_cutime у структурі tms, повернених
    часом (2)),

  • час системного процесора (сума значень
    tms_stime та tms_cstime у структурі tms, повернута
    часом (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

З посібника з ping:

-U Роздрукувати повну затримку користувача до користувача (стара поведінка). Зазвичай ping друкує мережевий час у зворотному напрямку, який може бути різним, через збої DNS.


Дякую за відповідь, але я хотів би виміряти затримку, характерну для запиту отримання SNMP.

5

Запустіть програму, а тим часом фіксуйте мережевий трафік за допомогою tcpdumpабо wireshark. Перевірте час запиту та відповіді та виконайте просте віднімання.

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