Jak ograniczyć przepustowość interfejsu sieciowego Linux?

Odpowiedzi:

32

Netem moduł jądra, kontrolowane przez iproute.

Musisz skompilować Netem z jądrem:

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

Po załadowaniu modułu netem, tc iproute pozwala na takie rzeczy jak:

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

(50% utrata pakietów, dodatkowe opóźnienie 50 ms)

bortzmeyer
źródło
Tak, to naprawdę bardzo dobry moduł do tych rzeczy. Nie mogę uwierzyć, że nikt dotąd nie odpowiedział na to ...
Używam tego do testowania serwerów lokalnie (na localhost), ponieważ jest to standard na wszystkich dystrybucjach od lat. Aby dodać opóźnienie 20 ms „tc qdisc dodaj uchwyt lo dev root 1: 0 opóźnienie netem 20 ms”, a aby go usunąć „tc qdisc del dev lo root”
pixelbeat
1
Szybka uwaga: moduł jądra to sch_netem. Zasadniczo nie ma potrzeby ładowania go ręcznie, w razie potrzeby będzie on ładowany automatycznie.
sleske
Moja wersja z netem (Ubuntu 13.10) ma również możliwość ograniczenia pasma za pomocą rateopcji: tc qdisc add dev lo root handle 1:0 netem delay 10ms rate 1mbit limit 1000. Należy pamiętać, że w przypadku niektórych urządzeń, takich jak lo(dostępu localhost), trzeba ustawić długość kolejki, a także: ifconfig lo txqueuelen 1000. Zobacz serverfault.com/a/394949/76090
z0r
27

Po stronie klienta, prawda?

strużka powinna robić, co chcesz. Jeśli używasz Ubuntu (lub Debiana, myślę), możesz go zainstalować za pomocą sudo apt-get install trickle, a następnie uruchomić. trickle -s -d 10 -u 10 firefox(a przynajmniej nie używałem go od jakiegoś czasu) uruchamiałoby firefoxa, ograniczając jego prędkość pobierania i wysyłania do 10 kilobajtów na sekundę.

Bernard
źródło
Dzięki za tę wskazówkę. Z jakiegoś powodu wyciek nie działałby dla mnie z Firefox, ale działał dobrze z Google-Chrome. (Ubuntu 9.10 64bit)
Tom
6
funkcja trickle polega na przechwytywaniu połączeń w standardowych funkcjach bibliotecznych do przesyłania TCP - jeśli aplikacja ma te funkcje połączone statycznie w czasie kompilacji, to nie może działać.
David Spillett,
16

Znalazłem sposób na uniknięcie zjedzenia przez moją skrzynkę całej przepustowości dostępnej w sieci za pomocą narzędzia o nazwie „wondershaper” w Ubuntu. Mam nadzieję, że istnieje on również w innych systemach Linux. Mogę ograniczyć przepustowość, którą może zużywać mój domowy komputer z systemem Linux, używając następującego polecenia.

sudo wondershaper eth0 1000 200

Ogranicza to limit pobierania do 1000 kilobitów i uplaod do 200 kilobitów. Więcej informacji / opcji można znaleźć na stronach podręcznika Wondershaper.

złupić
źródło
1
Nie jest to dokładnie to, czego szuka OP (chodzi o zachowanie pasma, a nie o celową degradację połączenia), ale nadal warto o tym wiedzieć.
sleske,
1
BTW: To pakiet wondershaperw Debianie.
sleske,
To bujanie b / c mieliśmy problemy w biurze z nasyceniem przepustowości, istniało wsparcie, którego nie mogłem przerwać, i byłem w stanie naprawić to w dwóch prostych liniach: # apt-get install wondershaper następnie # wondershaper eth0 9999999 500 dzięki jeszcze raz!
orange80
4
Wondershaper wydaje się mieć jednak pewne problemy matematyczne. Aby uzyskać ścieżkę w górę / w dół 1 Mb / s, ostatecznie użyliśmy 28096 zamiast 1024. Nie mam jednak pojęcia, dlaczego tak się stało.
Boatcoder
Aby zresetować, użyj:sudo wondershaper clear eth0
Léo Lam
8

NIST tworzy symulator sieci o nazwie NistNet.

http://snad.ncsl.nist.gov/nistnet/ (link wydaje się martwy)

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

NistNet pozwala ci stworzyć router, który będzie emulował wybrany przez ciebie link komunikacyjny.

Dla najprostszej operacji masz go na pudełku z dwoma kartami sieciowymi pomiędzy dwiema sieciami.

Na przykład miałem aplikację, która musiała działać przez łącze satelitarne.

Dane mogą przechodzić przez łącze 2 Mb / s z dużym opóźnieniem. Kontrola musiała przejść przez łącze 128 kb / s, z tym samym opóźnieniem.

NistNet pomógł sprawić, by wszystko działało na 128kbps.

Korzystając z NistNet mogłem symulować nie tylko przepustowość, ale także opóźnienie, a także upuszcza pakiety dla ciebie, symulując zajęte lub zawodne łącze.

Jeśli chcesz zasymulować połączenie abitracyjne, nie ograniczaj tylko przepustowości, zwiększ także opóźnienie.

Nie zapomnij też rozdrobnić pakietów. Możesz ustawić ładne małe MTU na fałszywym łączu.

Dodanie jittera IIRC pozwoli ci dowiedzieć się, czy możesz poradzić sobie z pakietami poza kolejnością.

Tim Williscroft
źródło
NistNet nie jest aktualizowany przez długi czas, prawda? IMO, jak dotąd najlepszym sposobem jest moduł netem, który już istnieje we wszystkich najnowszych jądrach.
Może być możliwe symulowanie komputera z 2 kartami sieciowymi przy użyciu maszyny wirtualnej.
Scott
link nie działa
hasen
Link działa dla mnie.
tripleee
4

W przeszłości osobiście korzystałem z Wondershaper , choć napisano to dla odwrotnego przypadku - w pełni wykorzystując połączenie ADSL.

Będę jednak musiał spróbować innych wymienionych tutaj.

Thomas Vander Stichele
źródło
3

Możesz użyć lokalnie zainstalowanego serwera proxy kałamarnicy, aby ograniczyć przepustowość, na przykład w celu przetestowania strony internetowej na wolnym łączu:

  1. Zainstaluj squid proxy z twojej dystrybucji - na mojej Fedorze było to tak proste, jak yum install squid.

  2. Dodaj następujące elementy do /etc/squid/squid.conf:

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

    Ograniczy to przepustowość do około 128 kb / s (16000 B / s).

  3. Zacznij kalmary :/etc/init.d/squid start

  4. Skonfiguruj przeglądarkę, aby korzystała z localhostportu serwera proxy 3128.

Tometzky
źródło
3

Nikt jeszcze nie wspomniał o ip_relay , o nazwie „iprelay” w repozytoriach Debiana. Działa jako proxy TCP, zamiast przechwytywać połączenia tak, jak działa trickle i będzie działać z dowolną aplikacją, która może korzystać z proxy (np. Przeglądarki internetowej) lub zaakceptować port docelowy zdefiniowany przez użytkownika (telnet, ssh, ftp, curl, i tak dalej ).

Jest nieco trudniejszy do skonfigurowania, ale często działa w sytuacjach, w których nie jest to możliwe.

CodeGnome
źródło
1
To jest dokładnie to, czego szukam! Wielkie dzięki. Cieszę się, że przewinąłem w dół i czytałem dalej.
Jay R. Wren