Iperf — тест пропускной способности интернет канала. Iperf ростелеком


Как измерить скорость канала передачи данных?

архитектура измерения с iperf проста

Нередко случается необходимым измерить пропускную способность или просто скорость передачи данных между двумя узлами в IP сети. Некоторые для этого прибегают, например, к передаче файлов. Недостатком такого способа является значительная зависимость от особенностей работы файловых систем узлов (а также дисковой подсистемы вообще) и протокола передачи файлов между ними. Есть более прямой, простой и надёжный способ измерения, о котором мы сегодня расскажем.

От чего вообще зависит скорость передачи данных в сети TCP/IP?

При передаче данных поверх TCP, скорость будет зависеть не только от ширины каналов каждого из участников передачи, но также от задержки в передаче данных (round trip time, RTT — время прохождения пакета туда-обратно) и наличии ошибок передачи в канале.

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

Ошибка передачи вызывает в TCP необходимость повторной передачи данных, которые не были удачно доставлены (и подтверждены).

Нужно заметить, что в современных реализациях стека TCP/IP имеется множество оптимизаций поведения при задержках и ошибках.

В общем случае, производительность TCP ограничена следующей формулой:

Rate < (MSS/RTT)*(1 / sqrt(p))

Здесь:

  • MSS — максимальный размер сегмента, Байт (например — 1500)
  • RTT — время прохождения и возврата, секунд
  • p — вероятность потери данных при передаче

Хорошей визуальной демонстрацией этого принципа является Allocation of Bandwidth by TCP на Wolfram Demonstration Project:

The transmission rates of Internet traffic flows are controlled by TCP (Transmission Control Protocol), using an algorithm developed by Van Jacobson in 1988.

Какие есть способы измерения скорости TCP/IP?

Измерение скорости передачей файлов

Это, возможно, наиболее интуитивно понятный способ. В нём всё довольно просто:

  1. выберите большой хороший файл
  2. используя ваш файловый менеджер, передайте файл с одного компьютера на другой
  3. измерьте время передачи самостоятельно, или воспользуйтесь данными вашего файлового менеджера
  4. разделите размер вашего файла на полученное время и вы получите среднюю скорость передачи

Собственно всё.

Более продвинутые файловые менеджеры позволяют записать временную характеристику изменения скорости, но, обычно, средняя скорость передачи — это всё, что можно получить данным способом.

К недостаткам данного способа можно отнести следующее:

  1. Зависимость от работы дисковой и файловой подсистемы узлов — на других системах с  тем же каналом можно получить другие данные
  2. Зависимость от прикладного протокола передачи и его реализации. Да, FTP и CIFS будут передавать данные с разной скоростью.
  3. Однопоточность передачи. Далеко не все файловые менеджеры способны передавать данные в несколько потоков, что существенно ограничивает их возможности по использованию полосы пропускания.

Измерение скорости с помощью Интернет-сервисов

Этот вариант стоит немного в стороне, поскольку измеряет скорость передачи данных не между двумя вашими узлами, а между сервером сервиса и вашим узлом.

Тем не менее, это весьма хороший способ оценки скорости передачи данных в Интернет, как рядом с вами, так и на другой континент.

Примерами таких сервисов являются:

Другими вариантами являются аналогичные сервисы, предоставляемые Интернет-провайдерами, например AT&T, Verizon, AKADO.

Или даже тестовое скачивание файла для абонентов Ростелеком

Как видно, вышеуказанные сервисы работают в браузере или даже в flash-приложении для соответствующего плагина браузера. Это вполне может добавлять своих накладных расходов на измерение. И снова, есть зависимость от реализации прикладной части. Нет гарантий, что измеряя в разных браузерах (или разных реализациях Flash) вы будете получать одинаковые результаты.

Измерение скорости передачи данных специальными программами

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

Примерами таких программ являются:

  • iperfiperfjperf — графическая оболочка для iperf на Java:jperf
  • NTttcpNTttcp
  • NetCPSnetcps

Единственный значительный недостаток, присущий данному способу, — это зависимость от особенностей реализации стека TCP/IP в операционных системах узлов, с которых производится измерение.

Для преодоления этого барьера возможно использовать специализированные программно-аппаратные комплексы. Два одинаковых устройства с двух сторон канала передачи позволят достигнуть, пожалуй, наилучшей точности измерения параметров канала — как пропускной способности, так и задержек, джиттера и потерь.

Измерение пропускной способности сети с использованием iperf

Да, всё это затевалось для того чтобы рассказать немного про iperf. Это замечательная бесплатная утилита, но, к сожалению, о ней знают далеко не все.

Что такое iperf

Программа iperf изначально была разработана NLANR/DAST в качестве современного средства измерения пропускной способности TCP и UDP/

IPERF представляет собой инструмент измерения максимальной пропускной способности TCP, с возможностью подстройки большого числа параметров, а также характеристик передачи с использованием UDP.

IPERF позволяет измерять пропускнуя способность (bandwidth), задержку (delay) и вариацию задержки (jitter), потерю датаграм (datagram loss).

Архитектура IPERF является клиент-серверной в одном исполнимом файле. Для запуска сервера используется ключ -s, для запуска клиента — ключ -c.

Возможности iperf

Что же может эта замечательная утилита:

  •  Для TCP:
    • измерить пропускную способность
    • показать размеры MSS/MTU и другие.
    • поддерживает регулирование размера TCP window за счёт буфера сокета.
    • многопоточность, в средах где есть pthreads или Win32 threads. И клиент и сервер могут иметь множество одновременных соединений.
  • Для UDP:
    • Клиент может создавать потоки UDP с заданной скоростью.
    • измерение потерь пакетов
    • измерение задержки и джиттера
    • может работать на мультикаст
    • многопоточность, в средах где есть pthreads. И клиент и сервер могут иметь множество одновременных соединений (не работает в системах Windows).
  • отдельные параметры, соответственно типу, могут быть казаны с десятичными множителями K (kilo-) и M (mega-). Например, 128K вместо 131072 байт.
  • Тест может быть ограничен как по времени, так и по объёму переданных данных.
  • Автоматчески выбирает единицы измерения для вывода результатов.
  • Сервер обрабатывает несколько соединений, а не закрывается после первого теста.
  • выводит периодические, промежуточные результаты измерений с заданным интервалом.
  • в linux-системах серверный процесс может быть запущен как демон (daemon).
  • в системах Windows NT (NT4, 2000, XP, Vista, 2003, 7, 2008, 8, 2012) серверный процесс может быть запущен как сервис (Windows NT Service)
  • Возможно использование репрезентативного источника данных для передачи (representative streams) для проверки работы систем сжатия и TCP-оптимизации.

Простое измерение с использованием iperf

Схема теста выглядит так:

архитектура измерения с iperf простаЗапустите серверную часть на машине, назначенной сервером:

iperf -s

Здесь всё просто: сервер запустится и будет ожидать подключений от клиентов.

iperf server waiting for connections

У клиентской части несколько больше параметров. Запустите клиентскую часть следующим образом:

iperf -c <server IP> -P 8 -i 10 -p 5001 -f k -t 60

Ключи означают следующее:

  • -P — число потоков (8)
  • -i — интервал вывода промежуточных результатов (10 сек)
  • -p — порт сервера — по умолчанию 5001
  • -f — формат вывода результатов (k — кбит/сек, m — мбит/с и т.п.)
  • -t — время проведения теста (60 сек)

После исполнения с указанными параметрами, вывод на стороне клиента примет примерно такой вид:

simple iperf measurement resultsВ последней строке вывода указан окончательный результат измерений.

Недостатки измерения с использованием iperf

Никто не идеален. Проблема iperf состоит в том, что эта утилита измеряет число байт, отправленных поверх TCP или UDP. Байты, принадлежащие к заголовкам нижележащих протоколов — Ethernet, PPP, MPLS, IP, UDP, TCP и прочих — не учитываются в измерении. выполненном iperf.

В типичном пакете в простой сети можно найти:

  • 18 байт Ethernet: MAC-адреса, тип, FCS. Ещё 4 байта добавит использование тегов VLAN по IEEE802.1Q. Ещё 8 байт на преамбулу и разделитель.
  • 20 байт (больше, если есть опции) в заголовке IPv4 или от 40 и более (расширения) в заголовке IPv6
  • до 20 байт на заголовок TCP или 8 байт в заголовке UDP

Весь этот «избыток» создаёт погрешность измерения, которая тем больше, чем меньше размер полезной нагрузки пакета.

Однако, нужно понимать, что результаты, измеряемые iperf не являются априори неправильными. Просто они могут быть обманчивы, поскольку iperf измеряет параметры передачи данных поверх транспортного уровня. В то же время, полоса пропускания, выделяемая оператором связи — это полная («сырая») ширина канала.

Также, он не учитывает сопутствующее потребление ресурса канала со стороны сервисных протоколов, таких как ARP, сколь бы малым оно не казалось.

Как выход из данной ситуации, можно предложить использовать iperf в качестве генератора трафика. Полученный в канале трафик следует перехватить, например используя программу Wireshark. Записав таким образом фрагмент передачи существенной длительности, можно воспользоваться возможностями анализатора пакетов по расчёту статистических показателей для нахождения реальной загрузки канала.

Denis Borchev

Computer Networking Engineer with 10 years of experience; MSc Applied CS, CCNP/CCDP.

Latest posts by Denis Borchev (see all)

blog.netcube.ru

Тестирование пропускной способности сети с Iperf

Iperf – консольная утилита с открытым исходным кодом, предназначенная для тестирования пропускной способности сети. С ее помощью довольно просто измерить максимальную пропускную способность сети между сервером и клиентом, провести нагрузочное тестирование канала связи или маршрутизатора

Утилита Iperf является кроссплатформенной и не требует установки, достаточно просто скопировать ее на два компьютера, пропускную способность сети между которыми нужно оценить.

Работает утилита Iperf в режиме клиент-сервер. На первом компьютере утилита Iperf запускается в режиме сервера (ожидает трафик от клиента), а на втором, на котором Iperf запускается в режиме клиента, осуществляется генерация TCP и UDP трафика и проводится измерение скорости передачи данных.

Чтобы оценить пропускную способность сети между двумя узами сети, запустим сначала утилиту iperf  в серверном режиме:

iperf.exe -s -w 32768

Важно. Аргументы утилиты iperf  регистрозависимы.

Iperf в Windows в режиме сервера

-s –утилита запускается в серверном режиме (получающая сторона)-w 32768 – зададим размер окна TCP в 32 KB (по умолчанию около 8 Кб)

По умолчанию утилита слушает TCP порт 5001.В зависимости от настроек файерволов между клиентом и сервером, порт можно изменить с помощью аргумента -p [номер_порта].

На стороне клиента запустим iperf со следующими опциями:

iperf.exe -c 10.0.0.44 -P 8 -t 30 -w 32768

-c 10.0.0.44 – IP адрес сервера iperf-w 32768 — увеличиваем размер TCP окна-t 30 – время в секундах, в течении которого выполняется тестирование (по умолчанию 10 секунд)-P 8 — число альтернативных потоков для увеличения пропускной способности

Измеряем скорость сети между двумя точками с iperf

В нашем примере тестирование длилось 30 секунд. В итоговом отчете нас интересует значения столбца Bandwidth последней строки [SUM]. В нашем случае средняя пропускная способность сети между двумя системами – 2,85 Гбит/с. С помощью аргумента –f можно изменить формат скорости (биты, килобиты, мегабайты). При продолжительных тестах, когда нужно оценивать производительность в течении нескольких минут, с помощью опции –i можно указать интервал через который нужно отображать промежуточные результаты.

По-умолчанию утилита генерирует TCP трафик, если требуется осуществить тестирование для протокола UDP, необходимо использовать ключ  -u.

Во время выполнения теста график загрузки сети в Task Manager выглядит так:

Загрузка LAN интерфейса ethernet с помощью iperf

Важно отметить, что при тестировании Iperf используем всю доступную пропускную способность канала связи между клиентом и сервером, что может негативно повлиять на продуктивные приложения и пользователей. Поэтому такое тестирование нужно проводить обдуманно.

Если необходима оценка пропускной способности сети в обоих направлениях (в дуплексом режиме), дополнительно на клиенте нужно указать опцию –d:

iperf.exe -c IP -P 8 -t 30 -w 32768 -d

iperf - тестирование в дуплексном режиме

Полный список опций утилиты можно получить так:

iperf –help

Скачать версию iperf для Windows можно на softpedia.com (iperf-2.0.5-2-win32.zip) или здесь.

Скачать архив iperf для Windows

Для тех, кто предпочитает графический интерфейс управления, имеется и графический аналог  iperf — утилита jperf, написания на Java (для работы на компьютере должна быть установлена Java-машина).  Помимо графических рюшечек к CLI интерфейсу, Jperf умеет в реальном времени строить графики пропускной способности канала связи.

Jperf 2.0.2 - графический интерефейс

Итак, резюмируя,  Iperf – простая и удобная сетевая утилита, которая может измерить производительность и качество соединения между двумя системами.  И не смотря на то, что развитие  программы давно прекращено, ее функционала вполне хватает для поставленной задачи.

winitpro.ru

Iperf. Что такое и как использовать.

Существует множество статей, как работать Iperf’ом, но ни одна статья не ответила мне на вопрос как его запустить из под windows 7\8\10 (а вот понадобилось), очень мало статей упонинает какую скорость он измеряет, что подразумевается под пропускной способностью канала. Итак, все по порядку.

Что такое iperf?

Iperf это клиент-серверная утилита котороя позволять производить замеры пропускной способности канала. Клиент-серваная утилита подразумевает под собой, что для проверки скорости между двумя ПК необходимо будет запустить iperf на одном ПК в режиме «сервер», а на другом ПК в режиме «клиент». Скорость измеряется от клиента к серверу, т.е. если вы на своем компьютере запустили iperf в режиме «клиент», то результатом будет «исходящая» скорость. Чтобы измерить входящую, небоходимо запустить iperf в режиме сервер, либо воспользоваться ключиком -d для измерения скорость входящей+исходящей. Важно отметить, что гененирует трафик только клиентская часть.

Iperf и  unix

Iperf в unix-подобных система находится во всех репозиториях и, чтобы его установить, необходимо запусть стандартную инсталляционную команду для вашего дистрибутива, например для debian это:

#aptitude install iperf

Для работы с утилитой прото вызываем iperf, например запустить данную утилиту в режиме сервера на 3600 секунд(1 час)

# iperf -s -t 3600

Iperf и windows.

Iperf не входит в стандартный дистрибутив windows, поэтому его надо скачать, например тут

Далее, необходимо поместить этот файл для удобства на диск С:

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

  1. Зайдите в командную строку Пуск->выполнить->cmd или если Windows 10 в поиске необходимо набрать Cmd, он сам автоматически найдет то, что нам нужно.cmd-v
  2. В открывшейся командной строке, надо перейти в папку, куда вы поместили скаченный iperf, в нашем случае она будет лежать на диске C:/, выполнив команду: cd c:/
  3. cmd-cdЧтобы запустить iperf, например, в режиме клиента, необходимо выполнить команду: iperf -c <ip-адрес серверной части> -t 30 -i 10,  где -t — время теста, -i — интервал обновления данных теста

Как видим, исходящая скорость исходящая скорость до сервера x.x.x.201 в среднем 15 мегабит\сек

Что умеет iperf?

Вообще, все написано в хелпе к данной утилите, но если кто-то любит читать на русском, то ключи ниже.

Общие: -f, —format, [kmKM] формат отчёта: Kbits, Mbits, KBytes, MBytes

-i, —interval n, пауза секунд между периодическими отчётами

-l, —len n[KM], задёт длину на чтение/запись буфера (по умолчанию 8 KB)

-m, —print_mss, показать максимальный размер сегмента (MTU — TCP/IP в заголовке)

-o, —output <filename>, Запись отчёта в указанный файл

-p, —port n, задаёт порт к которому конектится или на котором вешать сервер (по умолчанию 5001)

-u, —udp, использовать UDP, а не TCP

-w, —window n[KM], TCP размер окна (размер буфера сокета)

-B, —bind <host>, привязки к хосту, интерфейсу или групповому адресу

-C, —compatibility, для использования с более старыми версиями не шлёт екстра сообщения

-M, —mss n, задать TCP максимальный размер сегмента (MTU — 40 байт)

-N, —nodelay, задать TCP без задержки, отключение алгоритма Нэгла

-v, —version, напечатать информацию о версии и выйти

-V, —IPv6Version, Использовать IPv6

-x, —reportexclude, [CDMSV] исключить C(соединение), D(данные), M(Multicast) S(настройки)V(сервер) в отчетности

-y, —reportstyle C|c, если установлено в C или c Отчёт будет в результатах CSV (значения, разделенные запятыми)

Конкретные варианты SERVER -s, —server, запустить в режиме сервера

-U, —single_udp, работать в однопоточном режиме UDP

-D, —daemon, запустить сервер как демон

Конкретные варианты CLIENT-b, —bandwidth n[KM], установить пропускную способность в бит/сек (по умолчанию 1 Мбит/сек.). Эта установка требует UDP (-u).

-c, —client <host>, запустить в режиме клиента, при подключении к <host>

-d, —dualtest, двунаправленный тест одновременно

-n, —num n[KM], количество байт для передачи (вместо -t)

-r, —tradeoff, У двунаправленный тест индивидуально

-t, —time n, время передачи в секундах (по умолчанию 10 секунд)

-F, —fileinput <name>, читать отсылаемый контент серверу из файла

-I, —stdin, самому писать что отдавать серверу

-L, —listenport n, порт клиента двунаправленный

-P, —parallel n, число параллельных потоков клиента для запуска

-T, —ttl n, время жизни, для multicast (по умолчанию 1)

-Z, —linux-congestion <algo>, алгоритм управления перегрузками TCP (Linux только)

netwild.ru

Iperf — тест пропускной способности интернет-канала

При необходимости измерить фактическую полосу пропускания интернет канала можно воспользоваться консольной утилитой iperf. Это своего рода «генератор» TCP/UDP трафика.

Iperf — кроссплатформенная консольная клиент-серверная программа, предназначена для тестирования пропускной способности интернет канала между двумя компьютерами.

Как работает.

Измерение осуществляется следующим образом, на одном ПК запускаем iperf в режиме «сервер», на втором в режиме «клиент» с указанием ip-адреса первого ПК («сервера»). Через заданное время показывается измеренная информация.

Установка.

Посмотрим, есть ли эта утилита в портах FreeBSD:

# whereis iperf

iperf: /usr/ports/benchmarks/iperf

Есть. Устанавливаем:

# cd /usr/ports/benchmarks/iperf

# make install clean

Несколько секунд и всё готово, можно пользоваться.

Как было сказано ранее iperf кроссплатформенная, по ссылке в конце статьи можно скачать версию для Windows.

Ключи и опции iperf.

Опции для режима «сервер»:

-s - запуск утилиты в режиме сервера

-U - запуск в одном многопоточном режиме UDP

-D - запуск утилиты в режиме сервера как процесс

Опции для режима «клиент»:

-c - запуск режиме клиента

-d - одновременно двунаправленный тест

-n - количество байт для передачи

-r - двунаправленный тест по отдельности

-t – время теста в секундах (по умолчанию 10 секунд)

-F – указать имя файла входных данных, подлежащих передаче из файла

-P - число параллельных потоков для запуска клиента

Общие опции:

-f - [KmKM] формат для отчета: Кбит, Мбит, Кбайт, Мбайт

-h - помочь

-i – задать интервал в секундах между отчетами пропускной способности

-l - [KM] задать длину буфера чтения/записи (по умолчанию 8 КБ)

-m - показывать максимальный размер сегмента (MTU - TCP / IP заголовке)

-o - вывод отчета в указанный файл

-p - установить порт для прослушивания/подключения (по умолчанию 5001)

-u - использовать UDP (по умолчанию TCP)

-w - задать размер окна (размер буфера сокета)

-B - задать интерфейс или групповой адрес

-M - установка максимального размера сегмента (MTU - 40 байт)

-v - информация о версии утилиты

-V - использование IPv6

-y – использовать CSV формат (значения, разделенные запятыми)

Примеры использования.

Запустить утилиту в режиме «сервер»:

# iperf –s

Запустить утилиту в режиме «сервер», прослушивать порт 49001 с работой только по UDP протоколу:

# iperf –s –u –p 49001

Запустить утилиту в режиме «клиент» с указанием на сервер с ip-адресом 192.168.5.39:

# iperf –c 192.168.5.39

Запустить утилиту в режиме «клиент» с указанием на сервер с ip-адресом 192.168.5.39 с прослушиванием на порт 49001 протоколом UDP и тестировать две минуты:

# iperf –c 192.168.5.39 –t 120 –u –p 49001

Запустить утилиту в режиме «клиент» с указанием на сервер с ip-адресом 192.168.5.39 с прослушиванием на порт 49001 и тестировать 30 секунд с выводом результата каждые 5 секунд:

# iperf –c 192.168.5.39 –t 30 –p 49001 –i 5

Запустить утилиту в режиме «клиент» с указанием на сервер с ip-адресом 192.168.5.39 с выводом результата каждые 5 секунд до тех пор, пока по трафику не пройдёт 200 Мбайт информации:

# iperf –c 192.168.5.39 –n 200М –i 5

Запустить утилиту в режиме «клиент» с указанием на сервер с ip-адресом 192.168.5.39 и тестировать 20 секунд с выводом результата каждые 5 секунд в обе стороны:

# iperf –c 192.168.5.39 –t 20 –i 5 –r

Полезные ссылки:

https://code.google.com/p/iperf/ - домашняя страница проекта

http://alexof.ru/download/iperf.zip - скачать windiws версию

http://alexof.ru/page/jperf - графическая java-надстройка для Iperf

alexof.ru


Смотрите также