2016-05-06 3 views
1

iperf - отличный инструмент для измерения сетевой статистики, такой как потеря, пропускная способность, джиттер. Я использовал его много. Но мне просто интересно, как он вычисляет эти статистические данные. Для пропускной способности он может просто измерить количество полученных байтов за определенный период времени; Для джиттера он может просто измерять время прибытия пакета. Но, для UDP потери, как он может вычислить. Я предполагаю, что он сконструировал свою полезную нагрузку специально, введя порядковые номера. Таким образом, сервер может предсказать, какие пакеты потеряны. Кто-нибудь знает, что является содержимым полезной нагрузки пакета iperf?Как iperf вычисляет статистику сети

Другое дело, что в конце соединения клиент iperf (отправитель) получит отчет о сервере (который имеет статистику). Какой номер порта отправляется этому отчету? В этом отчете используются TCP или UDP? Я не могу зафиксировать его с помощью tcpdump.

Я попытался найти в Интернете, чтобы найти ответы на мои вышеуказанные вопросы. Но я могу только найти, как использовать iperf. Похоже, что ни один документ/сайт не объясняет, как работают iperf WORK. Может кто-то дать некоторое представление или указать на некоторые документы?

ответ

0

Я не разработчик Iperf, но, глядя на исходный код, это было довольно легко найти место, где число пакетов копируется в сообщение ПДП, искать packet_count здесь: https://github.com/esnet/iperf/blob/master/src/iperf_udp.c

1

Я смотрел в исходном коде, а также взял некоторые tcpdumps для iperf3. У меня есть следующее понимание для iperf3.

В пакетах UDP-пакета iperf временная метка и порядковый номер (исходный код iperf вызывает его pcount) записываются в полезную нагрузку отправителем. Когда получатель получает пакет, он извлекает метку времени для джиттера и порядковый номер для подсчета потерь пакетов.

Дрожание рассчитывается путем сравнения отметки времени и текущего времени для обнаружения задержки, D_current, в первую очередь. Затем найдите | D_current - D_previous | (разница отменяет синхронизацию часов между отправителем и получателем), чтобы внести вклад в дрожание.

Утрата - это просто для того, чтобы накапливать разницу между текущим количеством и ожидаемым количеством, которое ранее было получено pcount плюс один.

Независимо от того, что iperf udp (с опцией -u на стороне клиента) или tcp, при запуске iperf будет установлено управление TCP-соединением. Это управляющее TCP-соединение используется для обмена статистикой на стороне клиента и на стороне сервера, которая включает в себя вычисления процессора, дрожание и потери, вычисленные выше, в конце теста.

Из журнала iperf2 я не обнаружил, что управляет TCP-соединением.

Смежные вопросы