Назад | Перейти на главную страницу

Можно ли вызвать искусственную потерю сетевых пакетов или задержку?

Я пытаюсь воспроизвести некоторые проблемы в развернутом приложении, в котором сервер и клиент MSSQL работают на двух разных машинах. Я думаю, что между двумя машинами могут быть проблемы с сетью, поэтому я хотел бы попытаться воспроизвести эти условия на двух виртуальных машинах Hyper-V (на одном виртуальном сервере). Конечно, сеть для этих виртуальных машин является «локальной», поэтому на самом деле она далека от условий в реальной среде.

Есть ли программа, которую я могу запустить на любой виртуальной машине, которая снизит производительность сети? Или может быть какая-то другая работа? Например, одним из способов воспроизвести условия может быть запуск виртуальных машин на отдельных серверах Hyper-V в географически удаленных местах (чтобы трафик SQL проходил через VPN или что-то в этом роде), но я думаю, что это немного затянуто. Должен быть способ попроще.

В Linux вы должны использовать netem, в FreeBSD - dummynet.

Ни одно из этих решений не будет работать на одной машине Windows с Hyper-V. Я искал и не могу найти никаких сетевых эмуляторов, совместимых с Windows Hyper-V.

Вы можете разместить две виртуальные машины на двух разных физических машинах, установив между ними ящик Linux или FreeBSD. Но не похоже, что есть какое-то решение, которое будет делать именно то, что вы хотите, на одном хосте виртуальной машины.

Дополнительным методом является автономный набор инструментов Network Emulator Toolkit (NEWT), который, несмотря на свой возраст, вполне способен и работает с операционными системами Windows x86 и x64.

https://blog.mrpol.nl/2010/01/14/network-emulator-toolkit/

Используя прилагаемые XML-шаблоны с установщиком, вы можете быстро приступить к работе по моделированию задержки, пропускной способности, джиттера и других сетевых переменных.

Я тестировал и использовал это приложение на всех версиях Windows от XP -> Windows 10.

Dummynet должен работать на вас: http://info.iet.unipi.it/~luigi/dummynet/

Он устанавливает службу на сетевой адаптер, а затем через командную строку вы устанавливаете свои параметры.

Я использовал его для тестирования доступа к веб-сайту по ссылке с высокой задержкой или низкой пропускной способностью в Windows XP, и он работает очень хорошо.

Мой друг что-то настроил, используя dummynet и FreeBSD в ESX. Я знаю, что это не Hyper-V, но вы можете изменить его, чтобы он работал на вас. http://apocryph.org/2009/05/15/simulating-slow-wan-links-with-dummynet-and-vmware-esx/

Похоже, тебе нужно netem

Вы можете вставить потерю пакетов, задержку, джиттер и т. Д.

Если это просто для задержки пакетов, в Linux вы можете просто использовать tc и дисциплины последовательного подключения (например, HTB):

[...] HTB как дочерний по отношению к другому HTB НЕ совпадает с классом другого класса в том же HTB. Это потому, что когда класс в HTB может отправлять, он будет отправлен, как только сможет аппаратное оборудование. Таким образом, задержка нижнего предельного класса ограничивается только оборудованием, а не предками. В HTB в случае HTB внешний HTB моделирует новое оборудование со всеми последствиями (большая задержка)

убытки также могут быть внесены с iptables и random модуль:

# for randomly dropping 10% of incoming packets:
iptables -A INPUT -m statistic --mode random --probability 0.1 -j DROP

# and for dropping 10% of outgoing packets:
iptables -A OUTPUT -m statistic --mode random --probability 0.1 -j DROP