Je teste une application Android et j'ai besoin de comprendre comment l'application se comporte à différentes vitesses Internet. Un exemple de scénario de test est le suivant: 1. définissez la bande passante maximale à 20 kbit / s et vérifiez son fonctionnement; 2. définissez la bande passante maximale à 50 kbps et vérifiez comment cela fonctionne ... etc.
Le problème est - je ne sais pas comment limiter le trafic.
J'utilise le WiFi et Charles Proxy . J'utilise Charles pour vérifier comment l'application réagit. Malheureusement, je ne parviens pas à accélérer en utilisant Charles - pour une raison quelconque, les limites Charles n'affectent pas du tout mon application.
Quoi qu'il en soit, quelqu'un peut-il m'aider avec ce problème? Avez-vous des idées sur la façon de limiter la bande passante?
Merci d'avance.
Réponses:
POUR L'APPAREIL ENRACINÉ (copié de la réponse de Mansour sur ce post )
Édition n ° 1:
Explication:
Les données sont divisées en petites parties appelées paquets à transmettre sur le réseau.
Il peut être transmis via TCP (Transmission Control Protocol) ou UDP (User Datagram Protocol)
Prenons un exemple:
Supposons que vous soyez le serveur et que je suis l'hôte et que je souhaite télécharger un fichier, donc je vais d'abord vous envoyer une demande pour cela, après quoi vous traiterez, et au lieu d'envoyer le fichier entier, vous diviserez le gros fichier en petits paquets.
Désormais, chaque paquet créé contiendra des informations telles que l'adresse IP source (la vôtre) et l'adresse IP de destination (la mienne), ainsi que des données supplémentaires (numéro de séquence, taille des données, durée de vie, etc.)
Vous enverrez ces paquets et ils pourront me joindre via des routeurs. Il n'est pas nécessaire que tous les paquets me parviennent par le même chemin. Ils peuvent me rejoindre via différents itinéraires disponibles.
Quand ils m'atteignent, TCP / UDP entre en image.
Si vous avez utilisé TCP pour la transmission, lorsqu'un paquet me parvient, un accusé de réception indiquant que le paquet m'est parvenu vous est renvoyé.
Cette fonctionnalité fait défaut dans UDP. Si vous avez utilisé UDP, contrairement à TCP, il ne vous envoie pas d'accusé de réception. Cela signifie que vous, en tant que serveur, n'avez aucune idée si les paquets me parviennent ou non. En cas de perte de transmission, elle est perdue pour toujours.
Suppression de paquets
La suppression de paquets signifie la suppression des paquets. Donc, fondamentalement, lorsque je laisserai tomber le paquet que vous avez envoyé, un accusé de réception vous sera envoyé (dans le cas de TCP) que le paquet a été perdu lors de la transmission, vous devrez donc le renvoyer.
De cette façon, cela gaspille du trafic et limite la vitesse en même temps que j'obtiens tout le fichier.
Si je laisse tomber les paquets UDP, je ne recevrai pas le fichier entier. C'est la raison pour laquelle l'application ne contrôle pas le trafic UDP.
Et oui, le privilège root est un must, car iptable est accessible uniquement avec un accès superutilisateur.
la source
Si vous êtes sous mac os x, vous pouvez utiliser "Network Link Conditioner".
Vous pouvez l'installer dans xcode à partir de:
Xcode> Open Developer Tool> Autres outils de développement
Il ouvrira une page Web de ressources d'Apple (vous devrez peut-être vous connecter). Dans la liste des ressources, recherchez les derniers "Hardware IO Tools" et téléchargez-les. Ensuite, installez "Network Link Conditioner", il ajoutera une option dans votre panneau de préférences mac.
L'idée est d'obtenir votre Mac sur Ethernet. Partagez sa connexion sur wifi. Limitez le trafic avec Network Link Conditionner. Et connectez votre Android sur votre mac wifi.
edit: il semble que la limitation du réseau de support de squid-cache. http://www.tldp.org/HOWTO/Bandwidth-Limiting-HOWTO/index.html
la source
Vous pouvez contrôler la bande passante avec votre routeur (s'il le prend en charge).
la source