Бывают ситуации, когда необходимо измерить фактическую скорость передачи данных между двумя узлами по каналу связи Ethernet (скорость передачи данных по локальной сети). Протестировать скорость локальной сети можно несколькими способами: передать большой файл по FTP или HTTP и засечь время передачи файла, затем поделим размер файла в МБ (мегабайтах) на время передачи (в секундах) и получим скорость нашего канала в МБ/с (магабайт в секунду), если разделин это значение на 8, то получим значение скорости в Мб/с (мегабит в секунду). А можно для тестирования скорости локальной сети использовать специализированные программы. Одной из таких программ является IPERF (http://iperf.sourceforge.net/). Iperf — кроссплатформенная консольная клиент-серверная программа — генератор TCP и UDP трафика для тестирования пропускной способности локальной или распределённой сети. Iperf не требует установки. Iperf для измерения ёмкости канала пользуются даже крупные провайдеры.
Iperf проста в использовании. Для тестирования скорости локальной сети вам понадобятся:
- два компьютера (один будет выступать в роли сервера, другой в роли клиента), подключенные к сети и с назначенными IP-адресами
- собственно, iperf (под Linux или Windows) на каждом компьютере
- компьютеры должны пинговаться
если тестироваться будет определённый порт TCP или UDP, то доступ на этот порт должен быть открыт.
Общая методика измерений скорости локальной сети Ethernet,передачи данных с помощью утилиты iperf
Для повышения точности измерений скорости передачи данных по локальной сети с помощью утилиты iperf рекомендуется придерживаться следующих правил:
- Закрыть или остановить все программы, передающие данные по сети на обоих компьютерах.
- Закрыть или остановить максимум программ для обеспечения необходимых ресурсов процессора и памяти на обоих компьютерах.
- Обеспечить возможность прохождения тестовой информации по рабочим портам соответствующими разрешениями в настройках файрволов.
- Документировать полученные результаты.
Итак, если все вышеуказанные требования выполнены, приступаем к настройке iperf:
Сначала необходимо запустить серверную часть программы, затем клиентскую.
Для «сервера» запуск iperf происходит следующим образом:
iperf -s -p 80
параметр -s указывает на то, что этот компьютер будет сервером, параметр -p 80 указывает что тестировать будем 80-й TCP порт.
Если нужно протестировать UDP порт, то нужно добавить флаг -u (использовать UDP пакеты):
iperf -s -u -p 80
На клиенте запуск iperf производится со следующими параметрами:
iperf -c 172.16.12.1 -p 80 -t 180
здесь -с указывает что это клиентская часть, 172.16.12.1 – ip адрес сервера, -t 180 указывает, что тестировать скорость локальной сети в течение 180 секунд (3 минуты).
Перечень всех параметров iperf с переводом:
- -f, —format [kmKM] format to report: Kbits, Mbits, KBytes, Mbytes В каком формате показывать скорость
- -i, —interval # seconds between periodic bandwidth reports – с какими интервалами отображать промежуточные результаты
- -l, —len #[KM] length of buffer to read or write (default 8 KB) — размер буфера (можно не менять)
- -m, —print_mss print TCP maximum segment size (MTU — TCP/IP header) — показывать инфрмацию по пакетам
- -p, —port # server port to listen on/connect to порт на котором сервер будет принимать соединения а клиент соединятся (по умолчанию 5001)
- -u, —udp use UDP rather than TCP — использовать UDP вместо TCP
- -w, —window #[KM] TCP window size (socket buffer size) — размер окна TCP
- -B, —bind bind to , an interface or multicast address — для сервера, если несколько интерфейсов указывает на каком начинать принимать трафик
- -C, —compatibility for use with older versions does not sent extra msgs — режим совместимости со старыми версиями( не интересен)
- -M, —mss # set TCP maximum segment size (MTU — 40 bytes) — позволяет изменить MSS
- -N, —nodelay set TCP no delay, disabling Nagle’s Algorithm – меняет опции TCP (тоже трогаем)
- -V, —IPv6Version Set the domain to IPv6 – использовать IP версии 6 (пока не актуально)
Server specific: Опции для сервера
- -s, —server run in server mode — запустить как сервер и отображать всю информацию на экран
- -D, —daemon run the server as a daemon — запустить как сервер и не отображать информацию
Client specific: Опции клиента
- -b, —bandwidth #[KM] for UDP, bandwidth to send at in bits/sec (default 1 Mbit/sec, implies -u) — используемая полоса для UDP (По умолчанию 1Mbit/sec)
- -c, —client run in client mode, connecting to — запустить как клиент и соединится с IP
- -d, —dualtest Do a bidirectional test simultaneously — тестировать линию в обе стороны
- -n, —num #[KM] number of bytes to transmit (instead of -t) — установить предел для передаваемого трафика
- -r, —tradeoff Do a bidirectional test individually — не делать двунаправленное тестирование
- -t, —time # time in seconds to transmit for (default 10 secs) — тестировать и усреднять по времени
- -F, —fileinput input the data to be transmitted from a file — не генерирует трафик а передает готовый файл
- -I, —stdin input the data to be transmitted from stdin
- -L, —listenport # port to recieve bidirectional tests back on — порт на котором клиент будет принимать двунаправленный трафик
- -P, —parallel # number of parallel client threads to run — запустит параллельно несколько потоков
- -T, —ttl # time-to-live, for multicast (default 1) – время жизни пакета для мультикаста
Протестировать скорость локальной сети с помощью iperf — задача довольно простая. Единственная сложность в том, что если сеть распределённая, и необходимо померить скорость передачи канала связи между разными частями города, или между разными городами, то придётся искать человека на другом конце канала, чтобы он запустил серверную/киентскую часть iperf.