Виртуальная сеть для воспроизводимых тестов
Я разрабатываю программный продукт, который использует сетевые функции, такие как связывание устройств по протоколам множественной адресации. Как и при любой разработке протокола, тест-код должен учитывать задержку, отбрасывание пакетов и т. Д. Поэтому я пытаюсь создать виртуальную сетевую среду, в которой я могу проводить контролируемые, воспроизводимые тесты.
Две основные функции, которые я хочу протестировать (например, измерять производительность, стабильность и т. Д.):
- SCTP множественные ассоциации, где клиент использует несколько конечных точек.
- Устройство склеивания нескольких устройств.
Как уже упоминалось, я хочу иметь возможность управлять трафиком между узлами в сети, а также фильтровать трафик для имитации устаревших NAT и т. Д.
Пример теста:
Предполагается, что этот тест будет эмулировать клиента с четырьмя сетевыми картами (Wi-Fi, USB, Bluetooth, Ethernet), обменивающимися данными через Интернет с сервером с одним интерфейсом.
Я хотел бы создать виртуальную сеть, которая имитирует этот макет. Одно устройство эмулирует узел WAN, а четыре других представляют клиентские интерфейсы. Существует ограничение полосы пропускания в 1 Мбит / с между интерфейсами клиента и интерфейсом сервера, а потеря пакетов составляет 1%.
Создается связующее устройство из четырех клиентских интерфейсов. Сервер iperf связан с адресом WAN, а клиент связан с адресом связывающего устройства и подключен к серверу WAN.
1 ответ
Похоже, вы хотите использовать что-то вроде 'tc' (см. http://www.linuxcommand.org/man_pages/tc8.html) на различных интерфейсах, используя компонент ядра 'netem'.
Примером может быть:
tc qdisc add dev eth1 root handle 1: netem delay 500ms 125ms reorder 3% loss 2%
См. http://man.he.net/man8/tc для справочной страницы по 'tc'.
См. http://www.linuxfoundation.org/collaborate/workgroups/networking/netem для получения информации о том, как использовать модуль netem с tc.