Администрирование Сеть Как измерить полосу пропускания канала сети (iperf) Wed, October 30 2024  

Поделиться

Нашли опечатку?

Пожалуйста, сообщите об этом - просто выделите ошибочное слово или фразу и нажмите Shift Enter.


Как измерить полосу пропускания канала сети (iperf) Печать
Добавил(а) microsin   

Открыл для себя очень удобную утилиту iperf ( http://dast.nlanr.net/Projects/Iperf/ ). Работает под всеми системами, бесплатная, с открытыми исходниками. Под Windows не требует установки. Пример установки на FreeBSD здесь.

Меряет довольно точно - по крайней мере, результаты правдоподобные, и совпадают друг с другом при нескольких измерениях. Программу нужно запускать на двух компьютерах, по обе стороны тестируемого канала (с одной стороны - в режиме сервера, с другой - в режиме клиента). Скорость (полоса канала) тестируется при этом только в одном направлении - от клиента к серверу, то есть клиент передает данные, а сервер принимает. Чтобы протестировать полосу канала в обратном направлении, сервер и клиент меняются местами на концах канала. iperf может генерить трафик "в никуда", например на несуществующий адрес. С помощью этого можно загрузить канал или сетевой интерфейс на необходимую величину - см. Пример 4. Хорошая инструкция от РТКом по использованию программы здесь. Для получения подсказки об использовании утилиты достаточно набрать iperf –help.

Пример 1 (тестирование по TCP-порту 5001, для другого порта нужно использовать ключ -p).
Запуск сервера (у которого IP 10.50.xx.yy):
>iperf -s
Запуск клиента:
>iperf -c 10.50.xx.yy

Пример 2 (тестирование по UDP-порту 4000):
Запуск сервера (у которого IP 10.50.xx.yy):
>iperf -s -u -p4000
Запуск клиента:
>iperf -c 10.50.xx.yy -u -p 4000

При тестировании UDP лучше задавать полосу канала, величиной немного более ожидаемой, с помощью ключа -b. Если ключ -b не указать, то предполагается по умолчанию полоса 1 мбит/сек, и скорость при тестировании не будет превышать этой величины. В примере ожидается, что полоса канала должна быть 2 мегабита:
Запуск сервера (у которого IP 10.50.xx.yy):
>iperf -s -u -p4100
Запуск клиента:
>iperf -c 10.50.xx.yy -u -p 4100 -b 2100000

Пример 3.
Скрипт, который устанавливает iperf на удаленной машине как сервис, и запускает его - с помощью этого можно быстро протестировать канал (без проблем с копированием на удаленный компьютер, запуском его и проч.). Для того, чтобы скрипт отработал, пользователь UserName и пароль Pass должны принадлежать пользователю с правами админа.

'Файл install_iperf.vbs - инсталляция утилиты iperf.exe
' и запуск её на удаленной машине.
Dim RemoteSystem
'IP удаленной машины
RemoteSystem = "10.20.0.35"

'1. Копируем iperf.exe на удаленный компьютер
Set FSO = CreateObject("Scripting.FileSystemObject")
' тут указывается путь до локальной копии iperf.exe
Set File = FSO.GetFile("C:\Distrib\Tools\net\iperf\iperf.exe")
File.Copy "\\" + RemoteSystem + "\ADMIN$\system32\"

'2. Install iperf as service on remote machine
On Error Resume Next
Set objSWbemLocator = CreateObject("WbemScripting.SWbemLocator")
UserName = "domain_mame\admin" 'имя пользователя
Pass = "admin_pass"
Set objServices = objSWbemLocator.ConnectServer(RemoteSystem, "root\CIMV2", UserName, Pass, Null, Null, 0)
If Err.Number <> 0 Then
  WScript.Echo Err.Number & ": " & Err.Description
  WScript.Quit
End If
Set objClass = objServices.Get("Win32_Process")
' информация на удаленном компьютере будет выводиться в лог, находящийся
'  в системной папке ADMIN$\system32
Res = objClass.Create("iperf -s -D -o iperflog.txt", Null, Null, PID)
If Res <> 0 Then
  WScript.Echo "error code: " & Res
End If

'3. Start iperf service on remote machine
Set objWMIService = GetObject("winmgmts:" _
 & "{impersonationLevel=impersonate}!\\" & RemoteSystem & "\root\cimv2")
Set colListOfServices = objWMIService.ExecQuery _
 ("SELECT IPerfService FROM Win32_Service WHERE State = 'Stopped' and StartMode = " _
 & "'Auto'")
For Each objService in colListOfServices
  objService.StartService()
Next

При желании можно добавить к скрипту другие вкусности - обработку командной строки, где указывается remote IP, порт для тестирования, протокол UDP или TCP и проч.

Пример 4 (загрузка канала пустым трафиком, с обратной стороны сервера iperf может и не быть):
>iperf -c 192.168.3.125 -u -b 100m -t 60
Здесь в качестве IP адреса (192.168.3.125) может быть даже отсутствующий (невидимый) в сети host, протокол указан UDP (-u), указана полоса загрузки 100 мегабит (-b 100m), время посылки пакетов 60 секунд (-t 60).

Пример 5. На скорость может иногда влиять размер окна TCP (TCP window size). Этот параметр можно задать опцией -w. Если не задавать, то по умолчанию размер окна принимается величиной 8 кБайт.
>iperf -s -p4100 -w1400
Здесь указан размер окна 1400 байт.  Размер окна есть смысл указывать только на сервере, поскольку он является приемником данных. Можно также указывать величину окна в килобайтах, например -w9k, -w10k, -w40k.

Пример 6. Запуск в режиме демона (как служба, она в списке служб будет называться IPerf Service), протокол UDP, порт по умолчанию 5001:
>iperf -D -u -s
Остановка и удаление службы:
>iperf -R -s

Следующая информация по TCP window size взята из хорошей статьи "Оптимизация работы протокола ТСР в распределенных сетях".

В системе Windows NT размер приемного окна может увеличиваться на величину, кратную максимальному размеру сегмента (Maximum Segment Size, MSS). Значение MSS определяется во время установления соединения. По умолчанию приемное окно задает размер данных 8 Кбайт для Windows NT 4.0 и 16 Кбайт для Windows NT 5.0. Такой размер окна выставляется в реестре операционной системы (параметр ТсрWindowSize — столбец 2 табл. 1). Размер окна, устанавливаемый в сетях Ethernet, позволяет передать 8760 байт информации (8 Кбайт, размещенные в шести сегментах по 1460 байт) для операционной системы Windows NT 4.0 и 17520 байт (16 Кбайт, размещенные в 12 сегментах по 1460 байт) для Windows NT 5.0.

Таблица 1. Параметры реестра Windows NT, регулирующие работу протокола TCP

Параметр ТсрWindowSize Tcp1323Opts
Ключ в реестре Tcpip\Parameters, Tcpip\Parameters\Interface\ Tcpip\Parameters
Тип записи REG_DWORD — Number of bytes (количество байтов) REG_DWORD — Number (флаги)
Возможные значения 0 — 0x3FFFFFFF (десятичное — 1073741823) 0, 1, 2, 3
Значение по умолчанию 17 520 (для сети Ethernet) 3

Для ОС Microsoft Windows NT 5.0 размер окна рассчитывается следующим образом. Первый запрос на установление соединения, посылаемый удаленному абоненту, предлагает установить размер окна, определяющий 16 Кбайт (16 384 байт) данных. После формирования соединения размер приемного окна округляется до объема данных, кратных максимальному размеру сегмента MSS, который был оговорен в процессе установления соединения. Если размер приемного окна определяет объем данных, близкий к четырехкратному значению MSS, то окно выравнивается до значения 4MSS, которое сохранится до тех пор, пока не будет активизирован алгоритм масштабирования окна.

В операционной системе Windows NT 5.0 окно масштабируется автоматически, если параметр ТсрWindowSize реестра установлен в значение, превосходящее 64 Кбайт. Масштабирование окна можно запретить вручную параметром Tcp1323Opts (столбец 3 табл. 1).

Работать с окном, размер которого превышает 64 Кбайт, можно только в том случае, если абонент поддерживает эту опцию. Значение по умолчанию устанавливается как наименьшее из следующих величин: 0xFFFF; значение дополнительного параметра GlobalMaxTcpWindowSize в реестре ОС Windows NT; наибольшее из четырехкратного значения максимального размера данных TCP в сети и значения 16 384, выравненного до кратного размера данных протокола TCP. Значение по умолчанию для сети Ethernet составляет 17 520 байт (в реализации TCP для Windows NT 5.0). Оно может быть немного уменьшено, если соединение установлено с абонентом, который поддерживает алгоритмы SACK и временные метки (time stamp), так как они увеличивают размер заголовка протокола TCP сверх обычного 20-байтного размера, оставляя меньше места для данных.

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

Параметр Tcp1323Opts может принимать следующие значения: 0 - применение опций RFC 1323 запрещено, 1 — разрешено использовать только масштабирование окна; 2 — разрешено применять только временные метки; 3 — разрешено использовать обе опции. 

 


На рисунке иллюстрируется пример тестирования канала связи между IP 10.81.23.103 (на нем запущена сессия RDP и в ней командная строка для запуска ipef) и IP 10.50.0.246 UDP-трафиком на порте 4100 (-u -p4100) в течение 2 минут (-t 120):iperf01.jpg

На заднем плане видно окно RDP компьютера 10.81.23.103, в котором запущен taskmgr в режиме отрображения утилизации сети (слева вверху) и iperf в режиме сервера (справа вверху). Внизу запущены два такие же окна на локальной машине 10.50.0.246 (iperf работает в режиме клиента). Ожидаемая полоса пропускания канала должна быть 40 мегабит, поэтому в командной строке клиента (он посылает трафик на сервер) указана несколько бОльшая полоса - 41 мегабит (-b 41000000). На диаграмме taskmgr хорошо видно, что пакеты до сервера дошли не все - у taskmgr сервера загрузка сетевого интерфейса во время теста была несколько меньше, чем у клиента (в среднем 37% против 41%). Это хорошо согласуется с результатами выдачи iperf - скорость отправки 39.4 мегабита, скорость приема 35.1 мегабит, потеряно 11% пакетов. Итак, по результатам теста полоса пропускания в направлении от хоста 10.50.0.246 к хосту 10.81.23.103 примерно соответствует заявленной полосе 40 мегабит.

[Ссылки

1FreeBSD: установка iperf
2Технология измерения пропускной способности канала на оборудовании Cisco.

 

Комментарии  

 
0 #1 Пользователь 21.12.2010 01:34
Здравствуйте. Вы могли бы мне помочь и разъяснить. Подключили интернет в Интертелекоме, тариф безлимит 1x, но этот тариф самый дешевый, так как скорость его 156 кб/c, при подключении к интернету 112кб/c. Реальная скорость при загрузке какого либо файла составляет от 2кб/c до 7кб/c Когда я телефон использовал в место модема то при подключении скорость составляла 112кб/c при загрузке была прыгала от 5 кб/c до 15-22 кб/c. Может кто сможет помочь хоть на немного увеличить скорость интернета.

microsin: Вы провайдеру такие вопросы задавайте. Поинтересуйтесь у него, что означает "156 кб/c" - или это 156 килобайт в секунду, ли это 156 килобит в секунду? В последнем случае у Вас и будет все еле-еле качаться.
Цитировать
 

Добавить комментарий


Защитный код
Обновить

Top of Page