Недавно один из заказчиков TestLab² пожелал узнать, как будет работать его инсталлятор (с закачкой всякого на лету) на разных каналах. Внезапно первые подходы показали, что нам везет и обычные edge, umts и wimax-каналы (не говоря о проводных) в нашей округе как-то уж очень хорошо работают.
Чтобы создать тяжелые условия мы нашли и применили специализированный инструмент WANem, о котором я расскажу под катом.
Это дистрибутив на основе knoppix, который позволяет эмулировать различные условия сетевого подключения клиентов. В первую очередь, это полезно для тестирования и отладки приложений, которым предстоит работать в не-пойми-каких условиях без физического погружения в эти самые условия.
Правила для работы можно создавать как вручную, так и через более-менее удобный web-интерфейс.
Взять любую систему виртуализации и загрузить в ней LiveCD. Или, если вы используете решения VMWare — скачать готовую виртуальную машину. В дальнейшем я буду исходить из загрузки с LiveCD.
Открываем в браузере http://IP виртуалки/WANem/ и видим интерфейс для управления. Из меню доступны:
Внутри себя WANem оперирует правилами, которые можно задавать явно в Advanced Mode, или по-простому выбирать из доступных в Basic Mode. Самый простой сценарий применения — включить режим, скажем ISDN 128 Kbps и задержку в 500 миллисекунд. После сохранения этих настроек нужно скомандовать машине, на которой установлено тестовое приложение, направлять весь свой трафик через WANem.
После этого нехитрого действия достаточно сделать traceroute от тестовой машины до внешнего мира и убедиться, что первый хоп — это IP виртуалки с WANem и что задержка пакетов ±совпадает с заданной в настройках.
Убедившись с помощью Basic Mode, что наша тестовая станция заворачивает весь сетевой трафик через эмулятор, можно переходить к более тонкой настройке. В первую очередь, стоит обратить внимание на обширные настройки случайного распределения задержек, ошибок ипатерь покетов потерь пакетов. Очередной небольшой шажок к реалистичности эмуляции.
Заранее расшифрую самые непонятные опции:
Например можно задать параметры пропадания и восстановления связи, можно сэмулировать наличие соединения но непрохождение пакетов с данными, потерю или повреждение % пакетов.
При необходимости WANem может работать с несколькими сетевыми интерфейсами одновременно (создавая для них разные правила), что позволяет реализовать самую изощренную сетевую конфигурацию.
Мне известен платный продукт для Windows, под названием SoftPerfect Connection Emulator ($99/$149).
UPD: Для OS X goshakkk_reborn рекомендует Network Link Conditioner из XCode.
UPD: Для Windows x1shn1k подсказал также TMnetSim Network Simulator (freeware, есть версии ×32 и ×64)
Отличный, достаточно простой и эффективный инструмент. Мне лично немного не хватает логирования на стороне WANem, но подозреваю, что это решается third-party утилитами, с которыми еще предстоит разобраться.
Вот пара примеров профилей, которые мы использовали для тестов: CDMA EV-DO rev.A, EDGE.
Официальный сайт: wanem.sourceforge.net, дистрибутив ~400мб
Последняя версия: 2.3, 15.03.2011
Чтобы создать тяжелые условия мы нашли и применили специализированный инструмент WANem, о котором я расскажу под катом.
Что такое WANem?
Это дистрибутив на основе knoppix, который позволяет эмулировать различные условия сетевого подключения клиентов. В первую очередь, это полезно для тестирования и отладки приложений, которым предстоит работать в не-пойми-каких условиях без физического погружения в эти самые условия.
Правила для работы можно создавать как вручную, так и через более-менее удобный web-интерфейс.
Как применять WANem?
Взять любую систему виртуализации и загрузить в ней LiveCD. Или, если вы используете решения VMWare — скачать готовую виртуальную машину. В дальнейшем я буду исходить из загрузки с LiveCD.
Подготовка WANem
- Создаем новую виртуальную машину (1core/256ram будет вполне достаточно), указываем источником загрузки LiveCD
- Подтверждаем загрузку с LiveCD
- Подтверждаем конфигурацию всех сетевых интерфейсов через DHCP (или отказываемся, и позже указываем IP вручную)
- Стартовый скрипт создает юзера perc и спрашивает, какой пароль ему установить (ssh разрешен по умолчанию)
- Указав пароль, мы можем подключиться к SSH
- Мы попадаем в интерфейс командной строки WANem. Начнем с простой команды help, которая выведет список всех доступных команд с их кратким описанием
- help — вывод помощи
- about — вывод версии и копирайтов
- clear — очистка экрана
- reset — сброс сетевых настроек и перезапуск сервисов
- shutdown — выключение системы
- restart — перезапуск системы
- status — вывод текущего статуса системы (IP-адреса, маршруты, состояния сервисов)
- wanemreset — сброс правил самого WANem (если вы там намудрили злого и доступ к web-интерфейсу плохо работает)
- assign — указать IP-адрес вручную (если ранее отказались от DHCP)
- quit — выйти из консоли WANem
Открываем в браузере http://IP виртуалки/WANem/ и видим интерфейс для управления. Из меню доступны:
- WANalyzer — простое средство проверки параметров и свойств соединения, выдающее вот такие результаты
- Basic Mode — простой режим настроек эмуляции, позволяющий ограничить пропускную способность и добавить задержку обработки пакетов в миллисекундах
- Advanced Mode — расширенный режим настроек эмуляции, позволяющий указывать не только более детальные настройки, но и их временное распределение, что приближает эмуляцию еще на шаг ближе к реальности.
- Save/Restore — сохранение текущих настроек в локальный файл профиля для повторного использования (пример формата)
Проверка работоспособности
Внутри себя WANem оперирует правилами, которые можно задавать явно в Advanced Mode, или по-простому выбирать из доступных в Basic Mode. Самый простой сценарий применения — включить режим, скажем ISDN 128 Kbps и задержку в 500 миллисекунд. После сохранения этих настроек нужно скомандовать машине, на которой установлено тестовое приложение, направлять весь свой трафик через WANem.
- Windows: route add 0.0.0.0 mask 0.0.0.0 WANemIPaddress
- Debian: route add default gw WANemIPaddress eth0
- Всякие другие ОС: http://tinyurl.com/4yovdph
После этого нехитрого действия достаточно сделать traceroute от тестовой машины до внешнего мира и убедиться, что первый хоп — это IP виртуалки с WANem и что задержка пакетов ±совпадает с заданной в настройках.
Тонкая настройка
Убедившись с помощью Basic Mode, что наша тестовая станция заворачивает весь сетевой трафик через эмулятор, можно переходить к более тонкой настройке. В первую очередь, стоит обратить внимание на обширные настройки случайного распределения задержек, ошибок и
Заранее расшифрую самые непонятные опции:
- MTTF — среднее время до возникновения ошибки
- MTTR — среднее время до восстановления после ошибки
- Jitter — в контексте IP-сетей термин детально раскрыт в RFC 3393, а вкратце — это разница (в миллисекундах) между задержкой доставки пары пакетов
Например можно задать параметры пропадания и восстановления связи, можно сэмулировать наличие соединения но непрохождение пакетов с данными, потерю или повреждение % пакетов.
При необходимости WANem может работать с несколькими сетевыми интерфейсами одновременно (создавая для них разные правила), что позволяет реализовать самую изощренную сетевую конфигурацию.
Альтернативы WANem
Мне известен платный продукт для Windows, под названием SoftPerfect Connection Emulator ($99/$149).
UPD: Для OS X goshakkk_reborn рекомендует Network Link Conditioner из XCode.
UPD: Для Windows x1shn1k подсказал также TMnetSim Network Simulator (freeware, есть версии ×32 и ×64)
Выводы
Отличный, достаточно простой и эффективный инструмент. Мне лично немного не хватает логирования на стороне WANem, но подозреваю, что это решается third-party утилитами, с которыми еще предстоит разобраться.
Вот пара примеров профилей, которые мы использовали для тестов: CDMA EV-DO rev.A, EDGE.
Официальный сайт: wanem.sourceforge.net, дистрибутив ~400мб
Последняя версия: 2.3, 15.03.2011