Iperf - утиліта для тестування пропускної здатності мережі, для системного адміністратора

Натрапив на цікаву статтю про утилітки для тестування пропускної здатності мережі. Є один додаток, вкрай залежне від все цієї фігні, і якимось чином треба протести і знайти слабке місце. Для початку просто опублікую статтю, а потім сам напишу невеликий огляд, з тестом. Понеслася.

Як вчинити, якщо необхідно провести тестування навантаження каналу зв'язку, маршрутизатора і при цьому залишитися при своїх грошах? Не знаєте? Запитайте мене :). Вихід є.

У комплект утиліти входить документація, в якій розписані ключики для запуску виконуваного файлу. Все досить докладно, тому я тут розповім про приклади використання iperf і особливості роботи з ним.

Перш за все, нам необхідні два комп'ютери. Один з них буде генерувати трафік, він називається клієнтом. а інший - приймати пакети і вести підрахунок статистики, він називається сервером. На обох машинах запускається один і той же виконуваний файл, але з різними ключами.

Перевірка на TCP трафіку.

iperf -c server_host

Щоб збільшити тривалість з'єднання, необхідно додати в рядок запуску клієнта параметр -tnsec. де nsec - тривалість з'єднання в секундах.

Не менш корисним буде ключик -insec. Тут nsec відповідає періоду (в секундах, природно), через який буде виводитися статистика.

Перевірка на UDP трафіку.

Для запуску iperf в режимі UDP необхідно додати і клієнту і серверу ключі -u.

Протокол UDP більш "тупий", що дає нам як деякі переваги, так і недоліки. Втім, для цілей тестування, недоліки знову-таки перетворюються в переваги.

Отже, що ми можемо:

  • змінювати довжину переданих пакетів
  • змінювати смугу переданого трафіку
  • працювати на односторонніх каналах
  • використовувати iperf без запуску сервера, якщо канал не наскрізний, а необхідно просто генерувати заданий трафік для навантаження

Для зміни довжини пакета використовується ключ -llength. Варто тільки пам'ятати, що при length = 0 реальна довжина Ethernet-фрейми становитиме 54 байта і робити в своїх розрахунках відповідну поправку.

Для зміни смуги трафіку використовується ключ -bbandwidth. Параметр bandwidth виражається в бітах в секунду і може містити десяткову точку і суфікси k і M. відповідні приставок кіло і мега.

При роботі на односторонніх каналах слід пам'ятати, що клієнт в таких випадках статистику не відображає і при завершенні сесії виводить повідомлення про помилку, яке можна з спокійно проігнорувати.

Запуск декількох потоків трафіку.

Ми можемо запустити кілька екземплярів клієнтів і серверів на одній і тій же машині. Для розв'язки трафіку використовується призначення різних портів за допомогою параметра -pport його значення на клієнті і відповідаю щем сервері повинно бути однаковим (за замовчуванням, він має значення 5001).

Практика показала, що при запуску декількох клієнтів на одній машині, iperf захоплює практично всі ресурси ЦП, через що в деяких потоках можливо пропажа пакетів. Тут, мабуть, є якась помилка в коді, що викликає некоректну роботу при context switching. Все вищевказане справедливо для iperf. Netperf працює під Linux цілком коректно.

У файлах допомоги ви знайдете ще параметр -S. дозволяє встановлювати значення Type Of Servise (TOS) в IP заголовку. Змушений вас розчарувати, під Windows це не працює. (Що характерно, я не зміг встановити це поле і в стандартному ping для Windows).

Схожі статті