遅いインターネット接続のシミュレーション


188

これはちょっと変わった質問だと思います。私は通常、すべてのユーザーのインターネット接続が遅いという「前提」に基づいてアプリケーションを開発しています。しかし、遅いインターネット接続をプログラムでシミュレートする方法があると誰かが思っているので、さまざまな「接続速度」でアプリケーションがどのように動作するかを「確認」できますか?

私はどの言語が使われているのか心配していません。そして、私はコードサンプルなどを探すのではなく、その背後にあるロジックに興味があるだけです。

回答:


109

Windowsを実行している場合、fiddlerは優れたツールです。モデムの速度をシミュレートする設定があり、さらに制御が必要な人のために、各リクエストにレイテンシを追加するプラグインがあります

このようなツールを使用すると、アプリケーションにレイテンシコードを配置するよりもずっと現実的なシミュレーションになるため、実際のビットを設計したりコード化したりする必要がありません。最高のコードは、私が書く必要がないコードです。

追加:Pavel Donchevのブログ、Software Technologiesに関するこの記事は、カスタムのシミュレーション速度を作成する方法を示しています:Fiddlerでインターネット接続速度を制限する


6
こんにちは私は役に立つかもしれない遅いインターネット接続のシミュレーションに関する小さなガイドを書きました:developertipoftheday.com/2010/12/…-完全な開示-これは私自身のブログですが、私がすべての人のために役立つので、念のためフィドラーの良い言葉:-)
Alex KeySmith

このフィドラーアプローチの問題は、レイテンシシミュレーションが正確ではなく、間違ったプロトコルレベルで動作するため、スロースタートを適切にシミュレーションできないことです。
サムサフラン2012年

@SamSaffron、このような古い投稿を掘り下げて申し訳ありませんが、スロースタートのシミュレーションに役立つ他のツールを知っていますか?
アニッシュラマスワミー2013

@AnishRam最善の策はDUMMYNET / ipfwのを使用することであるBSDや家族、FreeBSDの、と船OSXなどbarkingiguana.com/2009/12/04/...
サムサフラン

@AnishRamまた、netem linuxfoundation.org/collaborate/workgroups/networking/netemを参照すると、iproute2を使用して一連の条件をシミュレートできます。
Philip Rieck 2013

154

Chrome 38以降、プラグインなしでこれを行うことができます。要素の検査(またはF12ホットキー)をクリックし、[デバイスのmodの切り替え]をクリックするここに画像の説明を入力してくださいと、次のように表示されます。

ここに画像の説明を入力してください

他の多くの機能の中で、特定のインターネット接続(3G、GPRS)をシミュレートできます

アップロード速度を制限しようとする人のためのPS。悲しいことに、現時点ではそれは不可能です。

PS2では、何も切り替える必要はありません。スロットルパネルは、ネットワークパネルから直接使用できます。ここに画像の説明を入力してください

[ スロットルなし ]をクリックすると、カスタムスロットルオプションを作成できることに注意してください。

ここに画像の説明を入力してください


2
Chrome Dev Toolsスロットリングにより、ダウンロードとアップロードの両方の速度が制限されるようになりました。ただし、Chromeの現在のページでのみ制限されるため、他のブラウザでページをテストするために使用することはできません。そのためには、Fiddlerなどの他のツールを使用する必要があります。
Leonid Vasilev

3
現在、WebSocketはこのように抑制されていないことに言及する価値があります:bugs.chromium.org/p/chromium/issues/detail
id=

アップロードスロットリングは、最新バージョン(70.0)を含むChromeのかなりのバージョンで機能しません。トラッカーにバグレポートがあります。
マット

私の経験では、Webの速度低下の最大の原因は、ケーブルISPの不安定なDNSが広告サーバーまたはCDNを解決できないことです。解決の試みが成功するかタイムアウトするまで、ページ全体が空白のままになることがあります。Chromeはこれをシミュレートできますか?
StackOverthrow

45

1
ネットワークリンクコンディショナーはアップルによって維持されているため(安定していて信頼性があります)、Xcodeのシミュレーターにのみ適用されます。
ベンウィーラー

4
@BenWheelerが最近試してみたところ、ローカルホストも
含めて

2
Network Link Conditionerが実際にネットワークスタック全体に適用されていることを確認できます。
Fred Vollmer 2017

14

Linuxマシンでは使用できます wondershaper

apt-get install wondershaper

$ sudo wondershaper {interface} {down} {up}

{down}と{up}は帯域幅(kbps)です

たとえば、インターフェースeth1の帯域幅をアップリンク256kbpsとダウンリンク128kbpsに制限したい場合は、

$ sudo wondershaper eth1 256 128

制限をクリアするには、

$ sudo wondershaper clear eth1 

13

私はhttp://www.netlimiter.com/を使用していて、それは非常にうまく機能しました。単一プロセスの速度を制限するだけでなく、実際の転送速度も表示します。


他のツールのほとんどは、人工制限による帯域幅制御を提供しますが、これはnetlimiterには当てはまらないようです。ただし、最終的には商用ツール(試用版付き)であり、Windowsでのみ使用できます。
Aleksander Stelmaczonek

6

iprelayやSloppyなどのTCPプロキシは、低速接続をシミュレートするために帯域幅シェーピングを実行します。ipfwやiptablesなどのIPフィルタリングツールを使用して、帯域幅シェーピングを実行し、パケット損失をシミュレートすることもできます。


ありがとう、iprelayとSloppy joeを調べます。

おかげで、ipfwは素晴らしい働きをします。ここで有用だったクイックガイドのIソーです:barkingiguana.com/2009/12/04/...
エリック・グエン

4

Dummynetを試すことができます。これは、キューと帯域幅の制限、遅延、パケット損失、およびマルチパス効果をシミュレートできます


4

CharlesやFiddlerなどのスロットル機能を備えたWebデバッグプロキシを使用する

あなたはそれらが一般的に有用なウェブ開発を見つけるでしょう。主な違いは、Charlesはシェアウェアであるのに対し、Fiddlerは無料です。


プロキシとして実行します。ブラウザは自動的にブラウザに接続し、リクエストをWebアプリに転送します。
ベンM

Fiddlerの場合、ブラウザーの内外で機能する両方のモードがあります。
ケンD

4

また、一部の* nixで低速接続をシミュレートするには、ipfwを使用してみてください。詳細については、このQuoraの質問に対するBen Newmanの回答を参照してください。


2

TCPMonなどのツールを使用する。遅い接続を偽造する可能性があります。

基本的には、まったく同じものを要求し、まったく同じ要求を実サーバーに転送し、設定されたバイト数だけで応答を遅延させます。


2

NetEm(ネットワークエミュレーション)プロキシサーバーとして使用して、多くのネットワーク特性(速度、遅延、パケット損失など)をエミュレートできますiproute2パッケージを使用してネットワークを制御し、ほとんどのLinuxディストリビューションのカーネルで有効になっています。

tcコマンドラインアプリケーション(iproute2パッケージから)によって制御されますが、NetEm用のいくつかのWebインターフェイスGUIもあります(例:PHPnetemGUI2)。

利点は、私が書いたように、さまざまなネットワーク速度だけでなく、たとえば、パケット損失、複製や破損、ランダムまたは定義された遅延などもエミュレートできるため、パフォーマンスの低いさまざまなネットワークをエミュレートできることです。

アプリケーションの場合は完全に透過的です。オペレーティングシステムを構成してNetEmプロキシサーバーを使用すると、そのマシンからのすべての接続がNetEmを経由するようになります。または、アプリケーションをプロキシとして使用するように構成することもできます。

私はこれを使用して、エミュレートされたさまざまなパフォーマンスの低いネットワークでAndroidアプリのパフォーマンスをテストしています。


1

10.10以降のMac OSXにはMurus Firewallというアプリがあり、ipfwの代わりにpfのGUIとして機能します。

これは、システム全体またはドメイン固有のスロットルに非常に適しています。私はそれを使用してダウンロード速度を300Kbpsと30Mbpsの間でスライドさせ、ストリーミングビデオプレーヤーがどのように調整されるかをテストすることができました。


0

WIPFWと呼ばれる別のツールもあります -http : //wipfw.sourceforge.net/

少し古い学校ですが、遅い接続をシミュレートするために使用できます。これはWindowsベースであり、管理者はこのツールを使用して、ルーターが特定のマシンから取得しているトラフィックの量や、転送しているWWWトラフィックの量などを監視できます。


0

私が探していた答えが言及されなかったので、これを(質問されてから9年後に)更新しました。

Firefoxには、接続速度を調整するためのプリセットもあります。これらは、開発者ツールの[ ネットワークモニター ]タブで見つけてください。デフォルトは「スロットルなし」です。

最も遅いのはGPRSダウンロード速度:50 Kbps、アップロード速度:20 Kbps、最小遅延(ms):500)で、「良好」および「通常」の2G、3G、4GからDSLおよびWiFiまでダウンロード速度:30Mbps、アップロード)速度:15Mbps、最小遅延(ms):2)。

詳細については、開発ツールのドキュメントをご覧ください。


0

Linuxの場合、次の論文リストが役立つ可能性があります。

個人的には、Dummynetは良いのですが、私のユースケースでNetEmが最も用途が広いと思います。私は通常、帯域幅ではなく遅延の影響(つまりWiFi接続の問題)に関心があり、ランダムなパケット損失/破損などをエミュレートするのは非常に簡単です。また、非常にアクセスしやすく、無料です(ハードウェアベースのリンクトロピーとは異なります))。

補足として、Windowsの場合、Clumsyは素晴らしいです。また、(ウェブサイトに関して)ブラウザスロットリングは実際のネットワークの問題をエミュレートする正確な方法ではないことも付け加えておきます(「TKK」が上記の理由のいくつかについてコメントしていると思います)。

これが誰かを助けることを願っています!


0

単一のTCP接続を成形する一つの一般的なケースでは、実際のデュアルペアから組み立てることができるsocatcpipe、このようなUNIX方式で:

socat TCP-LISTEN:5555,reuseaddr,reuseport,fork SYSTEM:'cpipe -ngr -b 1 -s 10 | socat - "TCP:localhost:5000" | cpipe -ngr -b 1 -s 300'

これは、約300KB /秒の帯域幅との接続をシミュレートからのあなたのサービスを:5000してまで約時を10kB / sであり、上のリッスン:5555着信接続用。警告:このことを注意接続ごとの個々のTCPコネクションそうで、この金額を取得します。

説明:外側(左)socatは、指定さ:5555れたオプションを使用してフォーキングサーバーとしてリッスンします。次にcpipeSYSTEM:...オプションの最初のコマンドは、ソケット:5555に送信されたデータ(および最初のアウターsocatから送信されたデータ)を最大10kByte / sにスロットルします。次に、そのデータは、socat接続する別のサーバーを使用して転送しlocalhost:5000ます(減速したいサービスがリッスンしている必要があります)。からの データlocalhost:5000は、適切なcpipeコマンドに入力され、(指定された値で)約300kB / sに調整されます。

オプション-ngrにはcpipe重要です。これにより、cpipeは入力ファイル記述子から欲張らずに読み取ります。そうしないと、転送されず、応答を待機していないバッファー内のデータでスタックする可能性があります。

buffer代わりに、より一般的なツールを使用することcpipeも可能です。

(クレジット:これは、socatドキュメントのChristophe Loorによる「ダブルティー」レシピに基づいています)

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