Открыл для себя очень удобную утилиту 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):
На заднем плане видно окно 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 мегабит.
[Ссылки]
1. FreeBSD: установка iperf. 2. Технология измерения пропускной способности канала на оборудовании Cisco. |
Комментарии
microsin: Вы провайдеру такие вопросы задавайте. Поинтересуйтесь у него, что означает "156 кб/c" - или это 156 килобайт в секунду, ли это 156 килобит в секунду? В последнем случае у Вас и будет все еле-еле качаться.
RSS лента комментариев этой записи