Как протестировать скорость сети, измеряем ширину канала Интернет
Задача: Как быстро протестировать скорость канала локальной сети или ширину Интернет канала?
Провайдер сделал VPN между большим количеством точек, возникла необходимость принять работу, а для этого надо протестировать все каналы на скорость.
Была найдена методика тестирования рекомендованная ЗАО «ТрансТелеКом» как раз для тестирования емкости предоставленного порта.
Для тестирования берется бесплатная программа iperf которая умеет нагружать канал по полной генерируя необходимое количество трафика.
Для работы необходимо запустить ее на одном конце в режиме сервера, а с другого конца как клиентом измерять скорость.
Судя по всему разработчики забросили дальнейшее развитие программы но тем не менее функционала ее вполне достаточно для тестирования скорости сети.
Знание английского при работе с программой приветствуется, но на всякий случай переведу краткую информацию по ключам:
iperf –help – Показать подсказку
Usage: iperf [-s|-c host] [options] Использование –S (Сервер) –С IP адрес хоста(Клиент)
iperf [-h|--help] [-v|--version] посмотреть помощь
Client/Server:
-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 <host> bind to <host>, 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 <host> run in client mode, connecting to <host> - запустить как клиент и соединится на IP <host>
-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 <name> 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) – время жизни пакета (лучше не трогать)
Miscellaneous:
-h, --help print this message and quit
-v, --version print version information and quit
[KM] Indicates options that support a K or M suffix for kilo- or mega-
The TCP window size option can be set by the environment variable
TCP_WINDOW_SIZE. Most other options can be set by an environment variable
IPERF_<long option name>, such as IPERF_BANDWIDTH.
И так, как я уже говорил iperf работает в двух режимах: клиентском и серверном. Программа запущенная в серверном режиме на одном конце сети будет ожидать запуска клиентского варианта на другом конце. Клиентская программа инициирует соединение и начинает передачу трафика для тестирования. Будет ли запускаться программа в режиме сервера или клиента зависит от того используется ли ключ -s или -c соответственно.
Кстати для FreeBSD iperf лежит в портах /ports/benchmark/iperf
Для прочих *nix-ов можно взять на sf.net (http://sourceforge.net/project/showfiles.php?group_id=128336)
Для Windows выкладываю тут.
Кстати, для выбора UDP протокола служит ключ -u иначе используется TCP протокол.
А теперь практика: Как произвести нагрузочное тестирование канала связи, маршрутизатора.
Методика тестирования требует соблюдения некоторых условий:
- для измерения необходимо наличие двух компьютеров передающего и принимающего
- необходимо на время тестов исключить весь трафик, кроме трафика от генераторов
- измерение максимально допустимой полосы следует проводить с использованием протокола TCP
Проведем тестирование 2-х машин . В качестве подопытных будут выступать машины w2k3srvr 192.168.0.210 (сервер) и Home 192.168.0.120 (клиент).
На серверной стороне выполняется команда
после этого на клиентской стороне выполняется команда
Отчет со стороны сервера:
------------------------------------------------------------
Server listening on TCP port 1111
TCP window size: 85.3 KByte (default)
------------------------------------------------------------
[ 6] local 192.168.0.210 port 1111 connected with 192.168.0.120 port 43410
[ ID] Interval Transfer Bandwidth
[ 6] 0.0-180.1 sec 79.6 MBytes 3.71 Mbits/sec
Отчет со стороны клиента:
------------------------------------------------------------
Client connecting to 192.168.0.210, TCP port 1111
TCP window size: 16.0 KByte (default)
------------------------------------------------------------
[ 5] local 192.162.0.120 port 43410 connected with 192.168.0.210 port 1111
[ ID] Interval Transfer Bandwidth
[ 5] 0.0-180.2 sec 81488 KBytes 3705 Kbits/sec
[ 5] MSS size 1444 bytes (MTU 1500 bytes, ethernet)
в данном случае измерялся 4M канал, реально измерения показали емкость на 7% меньше. Допустимая погрешность измерения до 10-15% определяется ростом очередей на маршрутизаторе при утилизации физического канала свыше 80%.
Оказалось что для тех кто не любит CLI есть графический интерфейс к этой утилите написанный на Java. Он кроме всего прочего строит графики и показывает другие рюшечки.
Называется Jperf, взять можно на SF.Net http://sourceforge.net/project/showfiles.php?group_id=128336&package_id=268197
для работы требует Java http://java.com/ru/download/manual.jsp
Iperf — удивительно простая в обращении сетевая утилита, предназначенная для измерения производительности сетевого интерфейса системы. При тестировании Iperf работает и как клиент по запросу, и в режиме проверки сервера. При этом одна система выступает в качестве сервера Iperf на одном из портов (по умолчанию — TCP 5001), а другая — в качестве клиентской системы, на которой запущен клиент Iperf. В обеих системах используется один и тот же исполняемый файл, в котором предусмотрена возможность выбора одной из ролей — сервера или клиента, так что при необходимости системы легко поменять местами. После ввода основных данных для тестирования запускается быстрая проверка качества соединения между двумя системами.
Скачать iperf для Windows
Комментарии
6 комментариевПрога работает как мне показалось не совсем хорошо. При соединении 2 гигабитных карт средняя скорость 8 Мбайт/сек, в то время как скачивание большого файла с интернета достигает 10 Мбайт. Как такое может быть остается загадкой.
в windows 7 не работает, в ХР все ок
в windows 7 не пашет, с java тоже не хочет работать, в ХР вроде все ок
порт 5001 троянский
Не думаю, что от того что этот порт решил использовать какой-то троян он сразу стал "троянским".
Если по каким-то причинам не нравится 5001 можно использовать какой либо другой порт, хоть 5005 хоть 10101...
Автар жжёт!
Спасибо!
Очень помогло!