Wie kann ich die WLAN-Datengeschwindigkeit auf meinem Android-Gerät begrenzen / drosseln?

9

Ich teste eine Android-Anwendung und muss verstehen, wie sich die App bei unterschiedlichen Internetgeschwindigkeiten verhält. Ein Beispiel für einen Testfall ist: 1. Stellen Sie die maximale Bandbreite auf 20 KBit / s ein und überprüfen Sie, wie es funktioniert. 2. Stellen Sie die maximale Bandbreite auf 50 KBit / s ein und überprüfen Sie, wie es funktioniert ... usw.

Das Problem ist - ich habe keine Ahnung, wie ich den Verkehr begrenzen soll.

Ich benutze WiFi und Charles Proxy . Ich benutze Charles, um zu überprüfen, wie die App reagiert. Leider kann ich mit Charles nicht drosseln - aus irgendeinem Grund wirken sich die Charles-Grenzwerte überhaupt nicht auf meine App aus.

Kann mir jemand bei diesem Problem helfen? Haben Sie Ideen, wie Sie die Bandbreite begrenzen können?

Danke im Voraus.

Max
quelle
Klingt so, als wären Sie besser dran, wenn Sie einen anderen Proxy verwenden, der die Drosselung unterstützt.
GAThrawn

Antworten:

8

FÜR ROOTED DEVICE (kopiert von Mansours Antwort auf diesen Beitrag )

Kasse BradyBound . Es ist ein systemweiter Shaper / Limiter für die Download-Geschwindigkeit. Einige Dinge zu beachten:

  • Die App benötigt Root-Zugriff.
  • Es funktioniert, indem Pakete mit verworfen werden iptables. Dies verschwendet etwas Verkehr - wie viel hängt von der Art des Verkehrs ab (z. B. lang laufender Download, Surfen im Internet).
  • Die Ratenmessung erfolgt nach Anzahl der Pakete anstelle von Bytes, sodass die Geschwindigkeitsbegrenzung nicht genau ist.
  • Dies begrenzt nur den TCP-Verkehr (es macht keinen Sinn, UDP-Pakete zu verwerfen).

Beachten Sie auch, dass ich der Autor dieser App bin.

Edit # 1:

Erläuterung:

Daten werden in kleine Teile unterteilt, die als Pakete bezeichnet werden und über das Netzwerk übertragen werden sollen.

Es kann mit TCP (Transmission Control Protocol) oder UDP (User Datagram Protocol) übertragen werden.

Nehmen wir ein Beispiel:

Angenommen, Sie sind der Server und ich bin der Host, und ich möchte eine Datei herunterladen. Daher sende ich Ihnen zuerst eine Anfrage, die Sie bearbeiten. Statt die gesamte Datei zu senden, teilen Sie die große Datei in auf kleine Pakete.

Jetzt enthält jedes erstellte Paket Informationen wie die Quell-IP (Ihre) und die Ziel-IP (meine) sowie einige zusätzliche Daten (Sequenznummer, Datengröße, Lebensdauer usw.).

Sie werden diese Pakete senden und sie können mich über Router erreichen. Es ist nicht erforderlich, dass alle Pakete auf demselben Weg zu mir kommen. Sie können über verschiedene verfügbare Routen zu mir kommen.

Wenn sie mich erreichen, kommt TCP / UDP ins Bild.

Wenn Sie TCP für die Übertragung verwendet haben und ein Paket mich erreicht, wird eine Bestätigung an Sie zurückgesendet, dass das Paket mich erreicht hat.

Diese Funktion fehlt in UDP. Wenn Sie im Gegensatz zu TCP UDP verwendet haben, werden Ihnen keine Bestätigungen gesendet. Das bedeutet, dass Sie als Server keine Ahnung haben, ob Pakete mich erreichen oder nicht. Falls es bei der Übertragung verloren geht, ist es für immer verloren.

Pakete verwerfen

Das Verwerfen von Paketen bedeutet das Verwerfen von Paketen. Wenn ich also das von Ihnen gesendete Paket verwerfe, wird Ihnen (im Fall von TCP) eine Bestätigung gesendet, dass das Paket bei der Übertragung verloren gegangen ist, sodass Sie es erneut senden müssen.

Auf diese Weise wird Datenverkehr verschwendet und die Geschwindigkeit begrenzt, während ich die gesamte Datei erhalte.

Wenn ich UDP-Pakete verwerfe, erhalte ich nicht die gesamte Datei. Aus diesem Grund steuert die App den UDP-Verkehr nicht.

Und ja, Root-Rechte sind ein Muss, da auf iptable nur mit Superuser-Zugriff zugegriffen werden kann.

Ash-Ishh ..
quelle
Ist es möglich, die Download-Geschwindigkeit allein zu begrenzen und nicht hochzuladen?
Rakkis
Es scheint schwierig zu sein, nur die Download-Geschwindigkeit zu steuern ... aber ich werde versuchen, die Antwort zu aktualisieren, sobald ich einen Weg finde, dies zu tun.
Ash-Ishh ..
Ist es völlig unmöglich, die App auch auf nicht gerooteten Geräten zum Laufen zu bringen? Sie sagten, dass das Verwerfen von Paketen mit iptables etwas Verkehr verschwendet. Was meinen Sie mit Verschwendung? Ich weiß, dass das Tempolimit nicht genau ist, aber ich brauche es trotzdem, um ziemlich genau zu sein, sagen wir 10% Abweichung. Was meinst du mit "dies begrenzt nur den TCP-Verkehr (nicht UDP-Pakete)"? Entschuldigung, ich weiß nicht, was TCP und UDP sind.
Rakkis
0

Wenn Sie unter Mac OS X sind, können Sie "Network Link Conditioner" verwenden.

Sie können es in xcode installieren von:

Xcode> Entwicklertool öffnen> Weitere Entwicklertools

Es wird eine Ressourcen-Webseite von Apple geöffnet (möglicherweise müssen Sie sich anmelden). Suchen Sie in der Ressourcenliste nach den neuesten "Hardware-E / A-Tools" und laden Sie sie herunter. Installieren Sie dann "Network Link Conditioner". Es wird eine Option in Ihrem Mac-Einstellungsbereich hinzugefügt.

Die Idee ist, Ihren Mac auf Ethernet zu bringen. Teilen Sie die Verbindung über WLAN. Begrenzen Sie den Datenverkehr mit Network Link Conditionner. Und verbinden Sie Ihr Android auf Ihrem Mac WiFi.

Bearbeiten: Es scheint, dass Squid-Cache die Netzwerkdrosselung unterstützt. http://www.tldp.org/HOWTO/Bandwidth-Limiting-HOWTO/index.html

HiroKenshin
quelle
0

Sie können die Bandbreite mit Ihrem Router steuern (sofern dieser dies unterstützt).


quelle