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権限は必須です。