Ответ 1
WANem делает именно это. Мы использовали его как на виртуальной машине на рабочем столе, так и на специализированном старом ПК, и он отлично работал. Он может имитировать все виды разбитых подключений.
Упрощен, у меня есть приложение, в котором данные предназначены для потока через Интернет между двумя серверами. В идеале, я бы хотел проверить, в какой момент программное обеспечение перестает функционировать. На каком нижнем пределе (пропускная способность, латентность, упавшие пакеты) все перестает работать, чтобы проверить надежность программного обеспечения.
Я думал, что сделаю следующее:
Это звучит как хорошая идея или есть более простые/лучшие способы сделать это? Я не настолько удобен в Linux, и мои товарищи по команде еще меньше.
WANem делает именно это. Мы использовали его как на виртуальной машине на рабочем столе, так и на специализированном старом ПК, и он отлично работал. Он может имитировать все виды разбитых подключений.
FreeBSDs ipfw имеет положения для имитации ссылок с заданной полосой пропускания, латентностью или частотой ошибок. Вы можете использовать эту машину FreeBSD как свою машину "посередине" в вашей предыдущей настройке.
Вероятно, вы также можете запустить хотя бы одну из конечных точек на одном компьютере, если хотите уменьшить количество задействованных серверов.
Кто-то действительно упаковал настройки и еще не все необходимое для решения этой проблемы FreeBSD, и они называют это DUMMYNET.
Он моделирует/устанавливает ограничения на очереди и пропускную способность, задержки, потери пакетов и эффекты многолучевого распространения. Он также реализует вариант взвешенной Fair Queuing под названием WF2Q+. Он может использоваться на пользовательских рабочих станциях или на машинах FreeBSD, выступающих в роли маршрутизаторов или мостов.
Он может точно имитировать то, что вам нужно, и его бесплатно и будет загружаться на товарное оборудование. У них даже есть консервированная установка, которая достаточно мала, чтобы надеть гибкий диск (!), Который вы можете скачать по этой ссылке.
Возможно, пришло время немного узнать о Linux, потому что добавление 50 мс задержек на каждый исходящий пакет может быть сделано при вводе только одной строки:
tc qdisc add dev eth0 root netem delay 50ms
Подробнее см. Linux HOWTO управления трафиком
У нас было аналогичное требование около десяти лет назад - я посмотрю, смогу ли я вспомнить, как нам это удалось.
Если я помню, мы написали прокси-программу сокета, которая контролировалась inetd в ящике UNIX. Этот сокет будет принимать соединения от клиента и открывать эквивалентные сеансы на сервере. Затем он будет контуром, передавая сообщения в обоих направлениях.
То, как мы достигли характеристик WAN, заключалось в том, чтобы вводить случайные задержки (с верхним и нижним пределами) как в установлении соединения, так и при передаче данных после того, как связь была вверх.
У этой функции также была возможность периодически удалять ссылку, поскольку WAN-ссылки были менее надежными для нас, чем локальный.
Я помню, что нам пришлось сделать его потоковым, чтобы остановить задержки, влияющие на обратный трафик по ссылке.
Существует очень хорошее (и бесплатное) решение Microsoft для этого, мы используем его в течение довольно долгого времени, и он отлично работает, он может очень легко имитировать каждую вещь (потеря пакетов, низкая пропускная способность, отключение, задержка... ) Это лучшее решение, которое я нашел для среды Windows.
Более подробную информацию и ссылку для загрузки можно найти здесь: Запись в блоге MARCO
этот продукт прошел некоторую эволюцию, и теперь он интегрирован в визуальную студию как часть тестирования автоматизации, но я нашел использование автономного (что довольно сложно найти, так что держите локальную копию) работать намного лучше, имейте в виду, что вам нужно как минимум два компьютера (или виртуальные машины), так как вам нужно пройти через сетевой адаптер, чтобы приложение могло использовать свою магию.