Como limitar / acelerar a velocidade dos dados WiFi no meu dispositivo Android?

9

Estou testando um aplicativo Android e preciso entender como o aplicativo se comporta em diferentes velocidades da Internet. Um exemplo de caso de teste é: 1. defina a largura de banda máxima para 20kbps e verifique como funciona; 2. defina a largura de banda máxima para 50kbps e verifique como funciona ... etc.

O problema é - não tenho idéia de como limitar o tráfego.

Estou usando o WiFi e o Charles Proxy . Eu uso Charles para verificar como o aplicativo reage. Infelizmente, não consigo acelerar o uso do Charles - por algum motivo, os limites de Charles não afetam meu aplicativo.

Enfim, alguém pode me ajudar com esse problema? Você tem alguma idéia de como limitar a largura de banda?

Desde já, obrigado.

Máx.
fonte
Parece que seria melhor usar um proxy diferente que suporte a otimização.
precisa

Respostas:

8

PARA DISPOSITIVO ROOTED (copiado da resposta de Mansour nesta postagem )

Caixa BradyBound . É um modelador / limitador de velocidade de download em todo o sistema. Algumas coisas a serem observadas:

  • O aplicativo requer acesso root.
  • Ele funciona descartando pacotes usando iptables. Isso desperdiça algum tráfego - quanto depende do tipo de tráfego (por exemplo, downloads de longa execução, navegação na web).
  • A medição da taxa é feita pelo número de pacotes em vez de bytes, para que o limite de velocidade não seja preciso.
  • Isso limita apenas o tráfego TCP (não faz sentido descartar pacotes UDP).

Observe também que sou o autor deste aplicativo.

Edição nº 1:

Explicação:

Os dados são divididos em pequenas partes, chamadas pacotes, a serem transmitidas pela rede.

Pode ser transmitido usando TCP (Transmission Control Protocol) ou UDP (User Datagram Protocol)

Vamos dar um exemplo:

Suponha que você seja o servidor e eu sou o host e desejo fazer o download de um arquivo. Primeiro, enviarei uma solicitação, após o que você processará e, em vez de enviar o arquivo inteiro, dividirá o arquivo grande em pacotes pequenos.

Agora, cada pacote criado conterá informações como IP de origem (seu) e IP de destino (meu), juntamente com alguns dados adicionais (número de sequência, tamanho dos dados, tempo de vida, etc.)

Você vai enviar esses pacotes e eles podem me alcançar através de roteadores. Não é necessário que todos os pacotes tenham que chegar até mim pela mesma rota. Eles podem vir até mim através de diferentes rotas disponíveis.

Quando eles me alcançam, o TCP / UDP aparece em cena.

Se você usou o TCP para transmissão, quando um pacote chega até mim, uma confirmação informando que o pacote chegou até mim é enviada de volta para você.

Este recurso está ausente no UDP. Se você usou o UDP, diferentemente do TCP, ele não envia confirmações para você. Isso significa que você, como servidor, não tem idéia se os pacotes estão chegando ou não. No caso de se perder na transmissão, se perde para sempre.

Descartando pacotes

Descartar pacotes significa descartar pacotes. Então, basicamente, quando eu largar o pacote enviado por você, uma confirmação será enviada a você (no caso do TCP) de que o pacote foi perdido na transmissão; portanto, você precisará enviá-lo novamente.

Dessa maneira, desperdiça tráfego e limita a velocidade ao mesmo tempo em que recebo o arquivo inteiro.

Se eu soltar pacotes UDP, não receberei o arquivo inteiro. Essa é a razão pela qual o aplicativo não controla o tráfego UDP.

E sim, o privilégio root é obrigatório, pois o iptable pode ser acessado apenas com acesso de superusuário.

Ash-Ishh ..
fonte
É possível limitar a velocidade de download sozinho, não o upload?
Rakki s
Parece difícil controlar apenas o Downloading Speed ​​... mas tentarei atualizar a resposta assim que encontrar uma maneira de fazê-lo.
Ash-Ishh ..
É completamente impossível fazer o aplicativo funcionar também em dispositivos não-enraizados? você disse que a queda de pacotes usando o iptables desperdiça algum tráfego, o que você quer dizer com desperdícios? Eu sei que o limite de velocidade não será exatamente preciso, mas ainda preciso que ele seja bastante preciso, digamos 10% de desvio. o que você quer dizer com "isso limita apenas o tráfego TCP (não pacotes UDP)"?, desculpe, não sei o que são TCP e UDP.
Rakki s
0

Se você estiver no mac os x, poderá usar o "Network Link Conditioner".

Você pode instalá-lo no xcode em:

Xcode> Open Developer Tool> Mais ferramentas de desenvolvedor

Ele abrirá uma página da Web de recursos da Apple (pode ser necessário fazer login). Na lista de recursos, procure as mais recentes "Hardware IO Tools" e faça o download. Em seguida, instale o "Network Link Conditioner", ele adicionará uma opção no seu painel de preferências do mac.

A idéia é colocar o seu Mac na Ethernet. Compartilhe sua conexão no wifi. Limite o tráfego com o Network Link Conditionner. E conecte seu android no seu mac wifi.

editar: parece que o squid-cache suporta a otimização da rede. http://www.tldp.org/HOWTO/Bandwidth-Limiting-HOWTO/index.html

HiroKenshin
fonte
0

Você pode controlar a largura de banda com o seu roteador (se for compatível).


fonte