Linuxネットワークインターフェイスで帯域幅を調整する方法


回答:


32

netemのiprouteによって制御されるカーネルモジュール。

Netemをカーネルでコンパイルする必要があります。

Networking -->
   Networking Options -->
     QoS and/or fair queuing -->
        Network emulator

netemモジュールがロードされると、iprouteのtcで次のようなことができます。

tc qdisc add dev  tap0 root netem delay 50ms loss 50% 

(50%のパケット損失、50ミリ秒の追加遅延)


はい、これは確かにこれらのことのための非常に良いモジュールです。私は、誰もが...今まで、この答えを信じることができない

これは何年もの間すべてのディストリビューションで標準であったため、ローカル(localhost)でサーバーをテストするために使用します。、および"LO TCのqdiscデルDEVルート"それを削除するには:20msのを追加するには"0 netem遅延20ミリ秒TCのqdisc DEV LOルートハンドル1を追加し、"遅延
pixelbeat

1
クイックノート:カーネルモジュールはsch_netemです。通常、手動でロードする必要はありません。必要に応じて自動的にロードされます。
sleske


私のバージョンのnetem(Ubuntu 13.10)には、次のオプションを使用して帯域幅を制限するオプションもありrateますtc qdisc add dev lo root handle 1:0 netem delay 10ms rate 1mbit limit 1000lo(localhostへのアクセス用)などの一部のデバイスでは、キューの長さも設定する必要があることに注意してくださいifconfig lo txqueuelen 1000。参照してくださいserverfault.com/a/394949/76090
z0r

27

クライアント側ですか?

トリクルはあなたがしたいことをすべきです。Ubuntu(またはDebian、私は思う)を実行している場合は、でインストールしてsudo apt-get install trickleから実行できます。trickle -s -d 10 -u 10 firefox(または、しばらく使用していません)firefoxを実行し、ダウンロードとアップロードの速度を1秒あたり10キロバイトに制限します。


このヒントをありがとう。何らかの理由で、Firefoxではトリクルは機能しませんが、google-chromeでは正常に機能しました。(Ubuntu 9.10 64ビット)
トム

6
トリクルは、TCP転送用の標準ライブラリ関数のリンク呼び出しをインターセプトすることで機能します-コンパイル時にアプリにこれらの関数が静的にリンクされている場合、これは機能しません。
デビッドスピレット

16

私は、ubuntuの「wondershaper」と呼ばれるツールを使用して、ネットワークで利用可能なすべての帯域幅を自分のボックスが消費しないようにする方法を見つけました。他のlinux destrosにも存在することを願っています。次のコマンドを使用して、LinuxホームPCが消費できる帯域幅を制限できます。

sudo wondershaper eth0 1000 200

これにより、ダウンロード制限が1000キロビットに制限され、アップロードが200キロビットに制限されます。詳細/オプションについては、wondershaperのmanページを参照してください。


1
これは、OPが探しているものとはまったく異なります(意図的に接続を劣化させることではなく、帯域幅を節約することについてです)が、それでも知っておくと良いでしょう。
sleske

1
ところで:これwondershaperはDebian のパッケージです。
sleske

これにより、オフィスで帯域幅が飽和する問題が発生し、中断できなかった支援がありました。これを2つの簡単な行で修正できました:#apt-get install wondershaper then#wondershaper eth0 9999999 500ありがとうございます!
orange80

4
wondershaperにはいくつかの数学の問題があるように見えます。1Mb / sのアップ/ダウンパスを取得するために、1024ではなく28096を使用することになりました。これが発生した理由はわかりません。
ボートコーダー

リセットするには、次を使用します。sudo wondershaper clear eth0
LéoLam

8

NISTは、NistNetと呼ばれるネットワークシミュレータを作成します。

http://snad.ncsl.nist.gov/nistnet/(リンクは死んでいるようです)

http://cs.ecs.baylor.edu/~donahoo/tools/nistnet/

NistNetを使用すると、選択した通信リンクをエミュレートするルーターを作成できます。

最も簡単な操作では、2つのネットワーク間に2つのNICがあるボックスにそれを配置します。

たとえば、衛星リンクで動作する必要があるアプリケーションがありました。

データは、BIGレイテンシで2 Mbpsリンクを経由する可能性があります。制御は、同じ遅延で128kbpsリンクを経由する必要がありました。

NistNetは、すべてを128kbpsで動作させるのに役立ちました。

NistNetを使用すると、帯域幅だけでなく遅延もシミュレートでき、ビジーまたは信頼性の低いリンクをシミュレートして、パケットをドロップすることもできます。

任意の接続をシミュレートする場合は、帯域幅を制限するだけでなく、待ち時間も増やします。

パケットを断片化することも忘れないでください。偽のリンクに素敵な小さなMTUを設定できます。

IIRCにパケットジッタを追加すると、異常なパケットに対処できるかどうかがわかります。


NistNetは長い間更新されていませんか?IMO、これまでのところ最良の方法は、最近のすべてのカーネルにすでに存在するnetemモジュールです。

VMを使用して2つのNICを持つマシンをシミュレートできる場合があります。
スコット

リンクが動作しません
HASEN

リンクは私のために働きます。
トリプリー


3

たとえば、低速リンクでWebページをテストするために、ローカルにインストールされたsquidプロキシを使用して帯域幅を制限できます。

  1. ディストリビューションからsquidプロキシをインストールします—私のFedoraではのように簡単yum install squidでした。

  2. 以下を追加します/etc/squid/squid.conf

    delay_pools 1
    delay_class 1 1
    delay_access 1 allow all
    delay_parameters 1 16000/16000

    これにより、帯域幅が約128 kbps(16000 Bps)に制限されます。

  3. squidを開始します/etc/init.d/squid start

  4. プロキシサーバーlocalhostポートを使用するようにブラウザーを構成します3128



3

Debianリポジトリで「iprelay」という名前のip_relayについてはまだ誰も言及していません。トリクルのように呼び出しをインターセプトするのではなく、TCPプロキシとして機能し、プロキシ(Webブラウザーなど)を使用するか、ユーザー定義の宛先ポート(telnet、ssh、ftp、curl、など)。

設定はもう少し難しくなりますが、トリクルがうまくいかない場合によく機能します。


1
これはまさに私が探しているものです!どうもありがとう。下にスクロールして読み続けてよかったです。
ジェイR.レン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.