Задний план
Один из наших клиентов страдает от периодически возникающей проблемы с Интернетом, когда он отбрасывает пакеты, когда пользователь загружает большой файл (их ИТ-специалисты изучают проблему).
У меня есть приложение, состоящее из веб-сервера под управлением Windows 2008 R2 IIS7.5 и клиента под управлением Windows 7, Chrome, который использует длительный XMlHttpRequest для передачи «сообщений» от сервера к клиенту.
Эта проблема.
Мое приложение должно быть достаточно невосприимчивым к этим потерям пакетов, но на практике это не так.
Я хочу протестировать приложение в различных сценариях сетевых проблем, например, при случайной потере пакетов в 1% и при скачкообразной потере пакетов, например, при полной потере пакетов на 4000 мс и т. Д.
Я ищу решение, которое позволит мне «воспроизвести» сценарий и протестировать мое приложение. Я мог бы использовать 3G или отключать сетевой кабель, но эффекты не очень воспроизводимы.
Вопрос.
Есть ли приложение / драйвер, который я могу установить на свой компьютер, чтобы имитировать "хитрые" интернет-соединения? Или, возможно, устройство или прокси-сервер, который я могу использовать в сети, чтобы имитировать эти сценарии?
Я предполагаю, что это не очень просто сделать на современном компьютере, потому что я ожидаю, что большая часть TCP-стека выгружена на сетевую карту, но я бы подумал, что это довольно популярная вещь, которую можно попробовать, но я не не повезло с Google. Я более разбираюсь в Windows, но решение, использующее Linux в качестве клиента или прокси, будет приветствоваться.
Простой Linux-маршрутизатор посередине может сделать это безупречно. Просто почитай netem
. Вы можете реплицировать все, включая потерянные пакеты, переупорядоченные пакеты, поврежденные пакеты и даже задержку. Я сам использую его для моделирования спутниковых каналов.
Для этого я использовал TMNetSim. Он проксирует любой порт, который вы хотите, поэтому его можно использовать для большинства приложений.
http://www.tmurgent.com/Tools.aspx
Возможно, вы захотите выполнить коррелированный захват пакетов как на стороне клиента, так и на стороне сервера, и определить, получает ли клиент пакет RST. Если да, то с вашего сервера. И происходит ли это в предсказуемое время, например, после пяти минут бездействия.