Czy istnieje sposób na ograniczenie przepustowości karty sieciowej w systemie Linux? Chciałbym móc symulować dowolnie wolne połączenie.
Czy istnieje sposób na ograniczenie przepustowości karty sieciowej w systemie Linux? Chciałbym móc symulować dowolnie wolne połączenie.
Odpowiedzi:
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)
sch_netem
. Zasadniczo nie ma potrzeby ładowania go ręcznie, w razie potrzeby będzie on ładowany automatycznie.
rate
opcji: 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
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ę.
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.
wondershaper
w Debianie.
sudo wondershaper clear eth0
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ą.
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.
Możesz użyć lokalnie zainstalowanego serwera proxy kałamarnicy, aby ograniczyć przepustowość, na przykład w celu przetestowania strony internetowej na wolnym łączu:
Zainstaluj squid proxy z twojej dystrybucji - na mojej Fedorze było to tak proste, jak yum install squid
.
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).
Zacznij kalmary :/etc/init.d/squid start
Skonfiguruj przeglądarkę, aby korzystała z localhost
portu serwera proxy 3128
.
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.