AndroidデバイスでWiFiデータ速度を制限/スロットルする方法は?


9

私はAndroidアプリケーションをテストしていますが、さまざまなインターネット速度でのアプリケーションの動作を理解する必要があります。テストケースの例は次のとおりです。1.最大帯域幅を20kbpsに設定し、その動作を確認します。2.最大帯域幅を50kbpsに設定し、それがどのように機能するかを確認します...など

問題は-トラフィックを制限する方法がわかりません。

WiFiとCharles Proxyを使用しています。Charlesを使用して、アプリの反応を確認します。残念ながら、チャールズを使用してスロットルすることはできません-何らかの理由でチャールズの制限がアプリにまったく影響しません。

とにかく、誰かがこの問題を手伝ってくれる?帯域幅を制限する方法について何かアイデアはありますか?

前もって感謝します。


スロットルをサポートする別のプロキシを使用した方がよいように思えます。
GAThrawn 2013年

回答:


8

ROOTED DEVICEこの投稿のMansourの回答からコピー)

チェックアウトBradyBound。システム全体のダウンロード速度シェーパー/リミッターです。注意すべきいくつかのこと:

  • アプリにはルートアクセスが必要です。
  • を使用してパケットをドロップすることで機能しますiptables。これは一部のトラフィックを浪費します-どの程度がトラフィックのタイプに依存するか(例えば、長時間実行されるダウンロード、Webブラウジング)。
  • 速度測定は、バイトではなくパケット数で行われるため、速度制限は正確ではありません。
  • これはTCPトラフィックのみを制限します(UDPパケットをドロップしても意味がありません)。

また、私はこのアプリの作成者です。

編集#1:

説明:

データは、パケットと呼ばれる小さな部分に分割され、ネットワークを介して送信されます。

TCP(Transmission Control Protocol)またはUDP(User Datagram Protocol)を使用して送信できます。

例を見てみましょう:

あなたがサーバーであり、私がホストであり、ファイルをダウンロードしたいので、最初にそのリクエストを送信し、その後処理します。ファイル全体を送信する代わりに、大きなファイルを小さなパケット。

これで、作成された各パケットには、送信元IP(yours)や宛先IP(mine)などの情報と、いくつかの追加データ(シーケンス番号、データサイズ、存続時間など)が含まれます。

あなたはそれらのパケットを送信し、それらはルーターを介して私に到達することができます。 すべてのパケットが同じルートを経由して届く必要はありません。彼らは別の利用可能なルートを介して私に来ることができます。

彼らが私に届くと、TCP / UDPが登場します。

送信にTCPを使用した場合、パケットが私に届くと、パケットが私に届いたことを示す確認応答が返送されます。

この機能はUDPには欠けています。TCPとは異なり、UDPを使用している場合は、確認応答を送信しません。つまり、サーバーとして、パケットが私に届いているかどうかがわかりません。伝送で失われた場合、それは永久に失われます。

パケットのドロップ

パケットをドロップすると、パケットが破棄されます。したがって、基本的には、あなたが送信したパケットをドロップすると、パケットが送信中に失われたことの確認が送信されます(TCPの場合)。そのため、もう一度送信する必要があります。

このようにして、ファイル全体を取得すると同時にトラフィックを浪費し、速度を制限します。

UDPパケットをドロップすると、ファイル全体を受信できなくなります。これが、アプリがUDPトラフィックを制御しない理由です。

そして、はい、スーパーユーザーアクセスでのみiptableにアクセスできるため、root権限は必須です。


アップロードではなくダウンロード速度のみを制限することは可能ですか?
rakkiの2015

ダウンロード速度のみを制御することは難しいようです...しかし、私はそれを行う方法を見つけるとすぐに答えを更新しようとします。
Ash-Ishh .. 2015

ルート権限を取得していないデバイスでもアプリを機能させることは完全に不可能ですか?iptablesを使用してパケットをドロップするとトラフィックが無駄になるとおっしゃっていましたが、無駄とはどういう意味ですか?速度制限が正確ではないことはわかっていますが、それでもかなり正確である必要があります。10%の偏差としましょう。「これはTCPトラフィックのみを制限する(UDPパケットではない)」とはどういう意味ですか?申し訳ありませんが、TCPとUDPが何であるかわかりません。
rakkiの2015

0

Mac OS Xを使用している場合は、「ネットワークリンクコンディショナー」を使用できます。

あなたはそれをxcodeにインストールすることができます:

Xcode> Open Developer Tool>その他の開発者ツール

アップルからリソースのWebページが開きます(ログインが必要な場合があります)。リソースリストで、最新の「ハードウェアIOツール」を検索してダウンロードします。次に、「ネットワークリンクコンディショナー」をインストールすると、Macの設定ペインにオプションが追加されます。

アイデアはあなたのMacをイーサネットに接続することです。wifiで接続を共有します。ネットワークリンクコンディショナーでトラフィックを制限します。そして、あなたのアンドロイドをあなたのマックwifiに接続してください。

編集:それはイカキャッシュサポートネットワークスロットルのようです。 http://www.tldp.org/HOWTO/Bandwidth-Limiting-HOWTO/index.html


0

ルーターで帯域幅を制御できます(サポートしている場合)。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.