Come limitare la larghezza di banda su un'interfaccia di rete Linux?


Risposte:


32

Il modulo del kernel netem , controllato da iproute.

Devi compilare Netem con il kernel:

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

Una volta caricato il modulo netem, iproute's tc ti consente cose come:

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

(Perdita di pacchetti del 50%, ritardo aggiuntivo di 50 ms)


Sì, questo è davvero un ottimo modulo per queste cose. Non riesco a credere che nessuno abbia risposto a questa domanda fino ad ora ...

Lo uso per testare i server localmente (su localhost) poiché è stato standard su tutte le distribuzioni per anni. Per aggiungere un ritardo di 20 ms "tc qdisc aggiungi dev lo root handle 1: 0 netem delay 20msec", e per rimuoverlo "tc qdisc del dev lo root"
pixelbeat

1
Nota veloce: il modulo del kernel è sch_netem. Generalmente non è necessario caricarlo manualmente, verrà caricato automaticamente secondo necessità.
sleske,


La mia versione di netem (Ubuntu 13.10) ha anche la possibilità di limitare la larghezza di banda utilizzando l' rateopzione di: tc qdisc add dev lo root handle 1:0 netem delay 10ms rate 1mbit limit 1000. Si noti che per alcuni dispositivi come lo(per l'accesso localhost), è necessario impostare la lunghezza della coda pure: ifconfig lo txqueuelen 1000. Vedi serverfault.com/a/394949/76090
z0r

27

Lato client, giusto?

il gocciolamento dovrebbe fare quello che vuoi. Se stai usando Ubuntu (o Debian, penso), puoi installarlo sudo apt-get install tricklee quindi eseguirlo. trickle -s -d 10 -u 10 firefox(o giù di lì, non l'ho usato da un po 'di tempo) avrebbe eseguito Firefox, limitando la sua velocità di download e upload a 10 kilobyte al secondo.


Grazie per questo suggerimento. Per qualche ragione il gocciolamento non funzionerebbe con me con Firefox, ma ha funzionato bene con Google Chrome. (Ubuntu 9.10 64 bit)
Tom,

6
Il trickle funziona intercettando le chiamate da collegare nelle funzioni di libreria standard per i trasferimenti TCP: se un'app ha queste funzioni collegate staticamente in fase di compilazione, questo non può funzionare.
David Spillett,

16

Ho trovato un modo per evitare che la mia scatola mangiasse tutta la larghezza di banda disponibile sulla rete usando uno strumento chiamato 'Wondershaper' in Ubuntu. Spero che esista anche in altre destinazioni Linux. Posso limitare la larghezza di banda di ciò che il mio pc di casa Linux può consumare usando il seguente comando.

sudo wondershaper eth0 1000 200

Ciò limita il limite di download a 1000 kilobit e il uplaod a 200 kilobit. Per ulteriori informazioni / opzioni, consultare le pagine man di Wondershaper.


1
Questo non è esattamente ciò che l'OP sta cercando (si tratta di preservare la banda, non di degradare intenzionalmente la connessione), ma comunque buono a sapersi.
sleske,

1
A proposito: è un pacchetto wondershaperin Debian.
sleske,

In questo b / c scosso abbiamo avuto problemi in ufficio con la saturazione della larghezza di banda, c'era un supporto che non potevo interrompere, e sono stato in grado di risolvere questo problema in due semplici righe: # apt-get install wondershaper quindi # wondershaper eth0 9999999 500 grazie ancora!
orange80,

4
Tuttavia Wondershaper sembra avere dei problemi di matematica. Per ottenere un percorso su / giù di 1 Mb / s, abbiamo finito per usare 28096 invece di 1024. Non ho idea del perché ciò sia accaduto.
boatcoder

Per ripristinare, utilizzare:sudo wondershaper clear eth0
Léo Lam

8

NIST crea un simulatore di rete chiamato NistNet.

http://snad.ncsl.nist.gov/nistnet/ (il link sembra morto)

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

NistNet ti consente di creare un router che emula un collegamento di comunicazione di tua scelta.

Per un funzionamento più semplice, è disponibile su una scatola con due schede NIC tra due reti.

Ad esempio, avevo un'applicazione che doveva funzionare su un collegamento satellitare.

I dati potrebbero passare attraverso un collegamento a 2 Mbps con latenza BIG. Il controllo doveva passare su un collegamento a 128 kbps, con la stessa latenza.

NistNet ha contribuito a far funzionare tutto a 128kbps.

Usando NistNet ho potuto simulare non solo la larghezza di banda, ma anche la latenza, e anche far cadere pacchetti per te, simulando un collegamento occupato o inaffidabile.

Se si desidera simulare una connessione abitraria, non limitarsi solo alla larghezza di banda, ma anche alla latenza.

Non dimenticare di frammentare i pacchetti. Puoi impostare dei piccoli MTU sul collegamento fasullo.

L'aggiunta di jitter di pacchetti IIRC ti consentirà di scoprire se riesci a far fronte a pacchetti fuori ordine.


NistNet non viene aggiornato da molto tempo, vero? IMO, il modo migliore di gran lunga è il modulo netem, che esiste già in tutti i kernel recenti.

Potrebbe essere possibile simulare una macchina con 2 schede di rete utilizzando una macchina virtuale.
Scott,

il link non funziona
hasen

Link funziona per me.
Tripleee

4

Ho usato personalmente Wondershaper in passato per questo, sebbene sia stato scritto per un caso d'uso opposto, sfruttando al massimo la tua connessione ADSL.

Dovrò provare gli altri citati qui però.


3

È possibile utilizzare il proxy squid installato localmente per limitare la larghezza di banda, ad esempio per testare una pagina Web su collegamento lento:

  1. Installa squid proxy dalla tua distribuzione - sul mio Fedora è stato facile come yum install squid.

  2. Aggiungi quanto segue a /etc/squid/squid.conf:

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

    Ciò limiterà la larghezza di banda a circa 128 kbps (16000 Bps).

  3. Inizia calamari :/etc/init.d/squid start

  4. Configura il tuo browser per utilizzare la localhostporta del server proxy 3128.



3

Nessuno ha ancora menzionato ip_relay , chiamato "iprelay" nei repository Debian. Funziona come un proxy TCP, piuttosto che intercettare le chiamate come fa il gocciolamento e funzionerà con qualsiasi applicazione che può usare un proxy (ad esempio un browser Web) o accettare una porta di destinazione definita dall'utente (telnet, ssh, ftp, curl, eccetera ).

È un po 'più difficile da configurare, ma spesso funziona in situazioni in cui il gocciolamento non lo farà.


1
Questo è esattamente per quello che sto cercando! Grazie enormi. Sono contento di averlo fatto scorrere verso il basso e ho continuato a leggere.
Jay R. Wren,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.