Как ограничить / ограничить скорость передачи данных WiFi на моем устройстве Android?

9

Я тестирую приложение для Android, и мне нужно понять, как оно работает на разных скоростях интернета. Пример тестового примера: 1. установите максимальную пропускную способность 20 кбит / с и проверьте, как она работает; 2. установите максимальную пропускную способность 50 кбит / с и проверьте, как она работает ... и т. Д.

Проблема в том, что я не знаю, как ограничить трафик.

Я использую WiFi и Charles Proxy . Я использую Чарльза, чтобы проверить, как приложение реагирует. К сожалению, я не могу регулировать использование Charles - по какой-то причине ограничения Charles не влияют на мое приложение вообще.

В любом случае, кто-нибудь может мне помочь с этой проблемой? У вас есть идеи, как ограничить пропускную способность?

Заранее спасибо.

Максимум
источник
Похоже, вам лучше использовать другой прокси, который поддерживает троттлинг.
GAThrawn

Ответы:

8

ДЛЯ УСТРОЕННОГО УСТРОЙСТВА (скопировано из ответа Мансура на этот пост )

Оформить заказ BradyBound . Это общесистемный формирователь / ограничитель скорости загрузки. Несколько вещей, чтобы отметить:

  • Приложение требует root-доступа.
  • Это работает, отбрасывая пакеты, используя iptables. Это приводит к потере некоторого трафика - насколько это зависит от типа трафика (например, длительная загрузка, просмотр веб-страниц).
  • Измерение скорости выполняется по количеству пакетов вместо байтов, поэтому ограничение скорости не будет точным.
  • Это ограничивает только TCP-трафик (нет смысла отбрасывать UDP-пакеты).

Обратите внимание, что я являюсь автором этого приложения.

Редактировать № 1:

Объяснение:

Данные делятся на небольшие части, называемые пакетами, для передачи по сети.

Он может быть передан с использованием TCP (протокол управления передачей) или UDP (протокол дейтаграмм пользователя)

Давайте возьмем пример:

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

Теперь каждый созданный пакет будет содержать такую ​​информацию, как IP-адрес источника (ваш) и IP-адрес назначения (мой), а также некоторые дополнительные данные (номер последовательности, размер данных, время жизни и т. Д.)

Вы отправите эти пакеты, и они могут связаться со мной через маршрутизаторы. Не обязательно, чтобы все пакеты приходили ко мне по одному и тому же маршруту. Они могут прийти ко мне по различным доступным маршрутам.

Когда они достигают меня, появляется TCP / UDP.

Если вы использовали TCP для передачи, когда пакет достигает меня, вам отправляется подтверждение о том, что пакет достиг меня.

Эта функция отсутствует в UDP. Если вы использовали UDP, в отличие от TCP, он не отправляет вам подтверждения. Это означает, что вы, как сервер, понятия не имеете, достигают ли меня пакеты или нет. В случае, если он потерян в передаче, он потерян навсегда.

Падающие пакеты

Отбрасывание пакетов означает отбрасывание пакетов. Поэтому, в принципе, когда я отброшу отправленный вами пакет, вам будет отправлено подтверждение (в случае TCP), что пакет был потерян при передаче, поэтому вам придется отправить его снова.

Таким образом, это тратит трафик и ограничивает скорость, в то же время я получаю весь файл.

Если я отброшу UDP-пакеты, я не получу весь файл. По этой причине приложение не контролирует трафик UDP.

И да, привилегия root является обязательной, поскольку доступ к iptable возможен только с правами суперпользователя.

Аш-Ishh ..
источник
Можно ли ограничить только скорость загрузки, а не загрузку?
Ракки с
Кажется, трудно контролировать только скорость загрузки ... но я постараюсь обновить ответ, как только найду способ сделать это.
Аш-ишх ..
Разве невозможно заставить приложение работать и на некорневых устройствах? Вы сказали, что отбрасывание пакетов с помощью iptables приводит к потере некоторого трафика, что вы подразумеваете под отходами? Я знаю, что ограничение скорости не будет точным, но мне все еще нужно, чтобы оно было достаточно точным, скажем, отклонение 10%. что вы подразумеваете под "это ограничивает только TCP-трафик (не UDP-пакеты)"? Извините, я не знаю, что такое TCP и UDP.
Ракки с
0

Если вы используете Mac OS X, вы можете использовать «Network Link Conditioner».

Вы можете установить его в xcode из:

Xcode> Open Developer Tool> Дополнительные инструменты разработчика

Он откроет веб-страницу ресурсов от Apple (вам может потребоваться войти в систему). В списке ресурсов найдите последние «Аппаратные средства ввода-вывода» и загрузите их. Затем установите «Network Link Conditioner», он добавит параметр в вашу панель настроек Mac.

Идея состоит в том, чтобы получить ваш Mac на Ethernet. Поделитесь своей связью по wifi. Ограничьте трафик с помощью Network Link Conditionner. И подключите свой андроид на своем Mac Wi-Fi.

редактировать: кажется, Squid-кеш поддерживает регулирование сети. http://www.tldp.org/HOWTO/Bandwidth-Limiting-HOWTO/index.html

HiroKenshin
источник
0

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


источник