Имитация плохого интернет-соединения

Я разрабатываю встроенное устройство, которое имеет доступ к Интернету через локальную сеть. Сейчас я нахожусь на этапе тестирования, и я хотел бы проверить, как устройство работает при плохом подключении к Интернету. В настоящее время устройство подключено к маршрутизатору через концентратор, который я использую для мониторинга пакетов с помощью Wireshark. Каков наилучший способ снизить скорость интернет-соединения устройства, чтобы имитировать сценарий, который может произойти?

Могу ли я сделать это через ПК? Нужен ли мне доступ к роутеру? Если да, то можно ли ограничить скорость каждого IP в интерфейсе роутера?

На самом деле, друг предложил мне приобрести сетевую карту usb2lan ethernet и подключить подключение ПК к локальной сети к встроенному устройству, а затем использовать программный ограничитель QoS. как вы думаете, это сработает?


person stdcall    schedule 06.08.2012    source источник
comment
Это может лучше подойти для переполнения стека, вы можете отметить свой вопрос и переместить его.   -  person Scott Chamberlain    schedule 06.08.2012
comment
@ScottChamberlain Это не вопрос программирования. По крайней мере, это не должно быть. Любой, кто может настроить брандмауэр, может имитировать плохое сетевое соединение (если у вас есть поддерживающее его программное обеспечение брандмауэра, например ipfw + dummynet).   -  person Spiff    schedule 06.08.2012
comment
Я не знаю о локальной сети, но если вам когда-нибудь понадобится это в беспроводной сети, просто переместите свой мобильный телефон между маршрутизатором и приемником ... помехи точно имитируют плохую потерю пакетов и дрожание.   -  person Thomas    schedule 06.08.2012
comment
На самом деле, друг предложил мне приобрести сетевую карту usb2lan ethernet и подключить подключение ПК к локальной сети к встроенному устройству, а затем использовать программный ограничитель QoS. как вы думаете, это сработает?   -  person stdcall    schedule 06.08.2012
comment
Проверьте эту старую ветку SO. Может помочь... stackoverflow.com/questions/7026251/   -  person Rod Burns    schedule 13.08.2012
comment
См. этот дубликат на сайте разработчиков игр для получения дополнительных ответов: gamedev.stackexchange.com/questions/61483/   -  person MichaelHouse    schedule 31.08.2013
comment
возможный дубликат сетевых инструментов, имитирующих медленное сетевое соединение   -  person om-nom-nom    schedule 07.10.2013


Ответы (4)


Вы можете попробовать использовать "Fiddler"

У вас есть варианты для имитации плохой сети (например, старые модемы 33k или 56k).

Вам необходимо подключить устройство к компьютеру и включить прокси-сервер (каждый запрос будет передаваться через Fiddler).

Затем вы можете протестировать свой код с плохой сетью, а затем посмотреть, что происходит;)

person Pouki    schedule 09.04.2013

Если у вас есть под рукой Mac, у Mac есть встроенное средство ядра под названием dummynet, которым вы управляете через ipfw. Он позволяет имитировать медленное соединение, случайным образом отбрасывать пакеты с определенной вероятностью и многое другое.

Такая же возможность существует в Linux и других операционных системах.

На главной странице dummynet:

По состоянию на февраль 2010 года мы выпустили третью основную версию dummynet, которая теперь работает на всех основных платформах: FreeBSD, Mac OS X как часть нативных дистрибутивов, а версии для Linux, OpenWRT и Windows вы можете найти здесь.

Он может многое сделать для вас:

ограничьте общий входящий TCP-трафик до 2 Мбит/с, а UDP — до 300 Кбит/с

ipfw add pipe 2 in proto tcp
ipfw add pipe 3 in proto udp
ipfw pipe 2 config bw 2Mbit/s
ipfw pipe 3 config bw 300Kbit/s

ограничить входящий трафик до 300 Кбит/с для каждого хоста в сети 10.1.2.0/24.

ipfw add pipe 4 src-ip 10.1.2.0/24 in
ipfw pipe 4 config bw 300Kbit/s queue 20 mask dst-ip 0x000000ff

имитировать ADSL-канал на Луну:

ipfw add pipe 3 out
ipfw add pipe 4 in
ipfw pipe 3 config bw 128Kbit/s queue 10 delay 1000ms
ipfw pipe 4 config bw 640Kbit/s queue 30 delay 1000ms
person Spiff    schedule 06.08.2012
comment
Существует также панель управления преобразователем сетевых ссылок, которая добавляет к ней простой пользовательский интерфейс, доступный в Xcode 4.x. - person Mike C.; 05.04.2013
comment
ipfw больше не работает на Yosemite, есть ли способ имитировать медленное соединение на новой OSX? Спасибо - person Igal; 07.10.2015
comment
@Igal см. другие ответы / комментарии, в которых упоминается кондиционер сетевых каналов. - person Spiff; 07.10.2015
comment
@Spiff, Дело в том, что мне нужно использовать команду из автоматических тестов, а у НЖК нет внешнего API... - person Igal; 07.10.2015
comment
Как я могу получить джиттер и проследить маршрут? - person Mehul Tank; 23.10.2018

Вы можете использовать (почти) любой дистрибутив Linux из liveCd (например, ubuntu, mandriva и другие), чтобы запустить его на любом оборудовании, которое вы хотите, и использовать инструмент на основе ядра netem, также известный как "Эмуляция сети" с инструментами пакета "iproute2". Это позволяет вам контролировать задержки, потерю пакетов, повреждение, дублирование и другие возможные проблемы глобальной сети.

Существует список наиболее часто используемых симуляций, таких как:

  • Контроль скорости с помощью Token Bucket Filter:

    tc qdisc add dev eth0 root handle 1:0 netem delay 100ms
    tc qdisc add dev eth0 parent 1:1 handle 10: tbf rate 256kbit buffer 1600 limit 3000
    
  • Задержать все пакеты на фиксированное время: tc qdisc add dev eth0 root netem delay 100ms

  • Потеря посылки: tc qdisc change dev eth0 root netem loss 0.1%
person mrówa    schedule 05.04.2013
comment
Обратите внимание, что вам нужно использовать qdisc add, прежде чем вы сможете использовать qdisc change, на случай, если кто-то попытается использовать эту последнюю команду самостоятельно. - person davidA; 17.11.2020

Это еще одно решение для OSX, взгляните на Network Link Conditioner.

Следующая цитата взята из следующего блога (все заслуги ниже должны принадлежать Мэтту Геммеллу):

http://mattgemmell.com/2011/07/25/network-link-conditioner-in-lion/

Получите инструменты аппаратного ввода-вывода для Xcode. Для этого перейдите в меню Xcode, затем выберите «Открыть инструмент разработчика» и, наконец, «Дополнительные инструменты разработчика…». Вы попадете на сайт загрузок Apple для разработчиков; вам следует загрузить «Аппаратные инструменты ввода-вывода для Xcode».

Полученный образ диска будет содержать (среди прочего) панель настроек для системных настроек, которая называется «Кондиционер сетевых каналов». Дважды щелкните файл prefpane и выполните аутентификацию, чтобы разрешить его установку. Затем вы увидите панель в Системных настройках.

Вы можете выбрать различные типы сетевых условий, используя всплывающее меню «Профиль».

Вы также можете добавить свои собственные профили, щелкнув «Управление профилями» либо с нуля, либо путем дублирования существующего профиля.

Чрезвычайно удобно для имитации неоптимальных сетевых условий при тестировании приложения. Только не забудьте потом его выключить!

person Ardesco    schedule 07.04.2013