Symulowanie wolnego połączenia z Internetem

188

Wiem, że to dziwne pytanie. Ponieważ zwykle tworzę aplikacje na podstawie „założenia”, że wszyscy użytkownicy mają wolne połączenie z Internetem. Ale czy ktoś uważa, że ​​istnieje sposób na programową symulację wolnego połączenia internetowego, dzięki czemu mogę „zobaczyć”, jak aplikacja działa przy różnych „prędkościach połączenia”?

Nie martwię się o to, który język jest używany. I nie szukam próbek kodu ani nic, po prostu interesuje mnie logika.

Kara
źródło

Odpowiedzi:

109

Jeśli korzystasz z systemu Windows, skrzypek jest doskonałym narzędziem. Ma ustawienie symulujące szybkość modemu, a dla kogoś, kto chce mieć większą kontrolę, ma wtyczkę, która dodaje opóźnienie do każdego żądania .

Wolę używać takiego narzędzia niż wstawianie kodu opóźnienia w mojej aplikacji, ponieważ jest to o wiele bardziej realistyczna symulacja, a także nie zmuszanie mnie do projektowania lub kodowania rzeczywistych bitów. Najlepszy kod to kod, którego nie muszę pisać.

DODANO : Ten artykuł na blogu Pavla Doncheva na temat technologii oprogramowania pokazuje, jak tworzyć niestandardowe symulowane prędkości: Ograniczanie prędkości połączenia internetowego za pomocą Fiddlera .

Philip Rieck
źródło
6
Cześć, napisałem mały przewodnik na temat symulacji wolnego połączenia internetowego, które może się przydać: developertipoftheday.com/2010/12/… - pełne ujawnienie - to mój własny blog, ale na wszelki wypadek pomaga, bo jestem cały w rozpowszechnianiu dobre słowo skrzypka :-)
Alex KeySmith
Problem w tym podejściu polega na tym, że symulacja opóźnienia nie jest dokładna, działa na niewłaściwym poziomie protokołu, więc nie można poprawnie zasymulować wolnego startu.
Sam Saffron,
@SamSaffron, Przykro mi, że wykopałem stary post w ten sposób, ale czy znasz jakieś inne narzędzia, które pomagają w symulacji powolnych startów?
Anish Ramaswamy,
@AnishRam najlepiej założyć dummynet / ipfw, który jest dostarczany z bsd i rodziną, freebsd, osx itp. Barkingiguana.com/2009/12/04/…
Sam Saffron
@AnishRam Zobacz także netem linuxfoundation.org/collaborate/workgroups/networking/netem może symulować wiele warunków za pomocą iproute2.
Philip Rieck
154

Począwszy od Chrome 38 możesz to zrobić bez żadnych wtyczek. Po prostu kliknij sprawdź element (lub F12skrót), a następnie kliknij „przełącz mod urządzenia”, wprowadź opis zdjęcia tutaja zobaczysz coś takiego:

wprowadź opis zdjęcia tutaj

Wśród wielu innych funkcji pozwala symulować określone połączenie internetowe (3G, GPRS)

PS dla osób, które próbują ograniczyć prędkość wysyłania. Niestety w chwili obecnej nie jest to możliwe.

PS2 teraz nie musisz nic przełączać. Panel dławienia jest dostępny bezpośrednio z panelu sieci.wprowadź opis zdjęcia tutaj

Pamiętaj, że klikając opcję Bez ograniczania można utworzyć niestandardowe opcje ograniczania.

wprowadź opis zdjęcia tutaj

Salvador Dali
źródło
2
Teraz ograniczanie przepustowości Chrome Dev Tools ogranicza zarówno pobieranie, jak i wysyłanie. Ale ogranicza go tylko do bieżącej strony w Chrome, więc nie można jej używać do testowania strony w innych przeglądarkach. Aby to zrobić, musisz użyć innych narzędzi, takich jak Fiddler.
Leonid Wasilew
3
Warto wspomnieć, że obecnie WebSockets nie są ograniczane w ten sposób: bugs.chromium.org/p/chromium/issues/detail?id=423246
mseddon
Ograniczanie przesyłania nie działało w kilku wersjach Chrome, w tym najnowszej (70.0). Jest raport o błędzie na trackerze .
Matt
Z mojego doświadczenia wynika, że ​​najczęstszą przyczyną spowolnienia sieci jest niestabilny DNS usługodawców kablowych, który nie jest w stanie rozwiązać problemów z serwerami reklam lub CDN. Czasami cała strona pozostaje pusta, dopóki próba ich rozwiązania nie powiedzie się lub upłynie limit czasu. Czy Chrome może to zasymulować?
StackOverthrow
45

Google zaleca :

Stin
źródło
1
Network Link Conditioner jest utrzymywany przez Apple (więc jest stabilny i niezawodny), ALE dotyczy tylko symulatora Xcode.
Ben Wheeler,
4
@BenWheeler Próbowałem tego ostatnio, z pewnością został zastosowany w
całym
2
Mogę potwierdzić, że Network Link Conditioner jest rzeczywiście stosowany do całego stosu sieciowego.
Fred Vollmer,
14

Na maszynach z systemem Linux możesz używać wondershaper

apt-get install wondershaper

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

{down} i {up} są przepustowością w kpbs

Na przykład jeśli chcesz ograniczyć przepustowość interfejsu eth1 do łącza w górę 256 kb / s i łącza w dół 128 kb / s,

$ sudo wondershaper eth1 256 128

Aby usunąć limit,

$ sudo wondershaper clear eth1 
Anonimowy Dziobak
źródło
13

Korzystałem z http://www.netlimiter.com/ i działa bardzo dobrze. Nie tylko ogranicza prędkość dla pojedynczych procesów, ale także pokazuje rzeczywiste prędkości transferu.

Piotr Müller
źródło
Większość innych narzędzi zapewnia kontrolę przepustowości poprzez sztuczne opóźnienie, co nie wydaje się mieć zastosowania w przypadku netlimitera, co jest dobrą rzeczą. Jednak ostatecznie jest to narzędzie komercyjne (z wersją próbną) i dostępne tylko w systemie Windows.
Aleksander Stelmaczonek
6

Istnieją serwery proxy TCP, takie jak iprelay i Sloppy, które kształtują szerokość pasma, aby symulować wolne połączenia. Możesz także kształtować szerokość pasma i symulować utratę pakietów za pomocą narzędzi do filtrowania adresów IP, takich jak ipfw i iptables.

Hobbs
źródło
Dziękuję, przyjrzę się iprelay i Sloppy Joe.
Dzięki, ipfw działa świetnie. Oto krótki przewodnik, który widziałem, który był pomocny: barkingiguana.com/2009/12/04/…
Eric Nguyen
4

Możesz wypróbować Dummynet , który może symulować ograniczenia kolejek i przepustowości, opóźnienia, straty pakietów i efekty wielościeżkowe

tszming
źródło
4

Użyj internetowego serwera proxy do debugowania z funkcjami dławienia, takimi jak Charles lub Fiddler .

Znajdziesz je ogólnie przydatne do tworzenia stron internetowych. Główną różnicą jest to, że Charles jest oprogramowaniem shareware, podczas gdy Fiddler jest bezpłatny.

Ben M.
źródło
Uruchamiasz go jako serwer proxy. Przeglądarka automatycznie się z nią łączy i przesyła żądania do aplikacji internetowej.
Ben M
W przypadku Fiddlera oba tryby działają wewnątrz / na zewnątrz przeglądarki.
Ken D
4

Ponadto, aby zasymulować wolne połączenie na niektórych * nixach, możesz spróbować użyć ipfw . Więcej informacji znajduje się w odpowiedzi Bena Newmana na to pytanie Quora

Ehtesh Choudhury
źródło
2

Użyj narzędzia takiego jak TCPMon . Może sfałszować wolne połączenie.

Zasadniczo żądasz dokładnie tego samego i przekazuje dokładnie to samo żądanie do prawdziwego serwera, a następnie opóźnia odpowiedź tylko o ustawioną liczbę bajtów.

pickypg
źródło
2

Możesz użyć NetEm (emulacji sieci) jako serwera proxy do emulacji wielu charakterystyk sieci (prędkość, opóźnienie, utrata pakietów itp.). Kontroluje sieć za pomocą pakietu iproute2 i jest włączony w jądrze większości dystrybucji Linuksa.

Jest kontrolowany przez aplikację tcwiersza poleceń (z pakietu iproute2 ), ale istnieją również GUI interfejsu sieciowego dla NetEm, na przykład PHPnetemGUI2 .

Zaletą jest to, że, jak napisałem, może emulować nie tylko różne prędkości sieci, ale także, na przykład, utratę pakietów, duplikację i / lub uszkodzenie, losowe lub określone opóźnienie itp., Dzięki czemu możesz emulować różne słabo działające sieci.

W przypadku Twojej aplikacji jest to całkowicie przezroczyste, możesz skonfigurować system operacyjny do korzystania z serwera proxy NetEm, aby wszystkie połączenia z tego komputera przechodziły przez NetEm. Możesz też skonfigurować tylko aplikację, aby używała jej jako serwera proxy.

Używam go do testowania wydajności aplikacji na Androida w różnych emulowanych sieciach o niskiej wydajności.

David Ferenczy Rogožan
źródło
1

Mac OSX od 10.10 ma aplikację o nazwie Murus Firewall , która działa jako GUI dla pf, zastępując ipfw.

Działa bardzo dobrze do ograniczania przepustowości w całym systemie lub w domenie. Po prostu mogłem go użyć, aby przesunąć prędkość pobierania między 300 Kb / s a ​​30 Mb / s, aby sprawdzić, jak dostosowuje się odtwarzacz wideo strumieniowego.

Ben Wheeler
źródło
0

Istnieje również inne narzędzie o nazwie WIPFW - http://wipfw.sourceforge.net/

To trochę stara szkoła, ale możesz jej użyć do symulacji wolniejszego połączenia. Jest oparty na systemie Windows, a narzędzie pozwala administratorowi monitorować, na przykład, jaki ruch router otrzymuje z określonej maszyny lub jaki ruch WWW przesyła na przykład.

Deano
źródło
0

Aktualizacja tego (9 lat po zapytaniu), ponieważ nie znalazłem odpowiedzi, której szukałem:

Firefox ma również wstępne ustawienia ograniczania prędkości połączenia. Znajdź je na karcie Monitor sieci narzędzi programistycznych. Domyślnie jest to „Brak ograniczania”.

Najwolniejszy jest GPRS ( prędkość pobierania: 50 Kb / s, prędkość wysyłania: 20 Kb / s, minimalne opóźnienie (ms): 500 ), od „dobrych” i „zwykłych” 2G, 3G i 4G do DSL i WiFi ( prędkość pobierania: 30 Mb / s, przesyłanie prędkość: 15 Mb / s, minimalne opóźnienie (ms): 2 ).

Więcej w dokumentach Dev Tools .

lazysoundsystem
źródło
0

W systemie Linux przydatna może być następująca lista dokumentów:

Osobiście, chociaż Dummynet jest dobry, uważam, że NetEm jest najbardziej wszechstronny w moich przypadkach użycia; Zazwyczaj interesuję się efektem opóźnień, a nie przepustowością (tj. Problemami z połączeniem Wi-Fi), i bardzo łatwo jest emulować przypadkową utratę / uszkodzenie pakietu itp. Jest również bardzo dostępny i darmowy (w przeciwieństwie do sprzętowej Linktropy ).

Na marginesie, dla Windows Clumsy jest niesamowity. Chciałbym również dodać, że (w odniesieniu do stron internetowych) ograniczanie przeglądarki nie jest dokładną metodą emulacji rzeczywistych problemów z siecią (myślę, że „TKK” skomentował kilka powodów, dla których powyżej).

Mam nadzieję, że to komuś pomoże!

Eugene
źródło
0

Jedna wspólna sprawa kształtowania jednego połączenia TCP może być rzeczywiście montowane z dwoma parami socati cpipeUNIX sposób jak poniżej:

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

To symuluje połączenie z przepustowości około 300 KB / s ze swojej służby na :5000i do około 10kB / s, a Słuchacze dotyczące :5555połączeń przychodzących. Zastrzeżenie : Należy pamiętać, że to za-gra , więc każdego połączenia TCP pobiera tę kwotę.

Objaśnienie: Zewnętrzny (lewy) socatnasłuchuje z podanymi opcjami :5555jako serwer rozwidlający. Pierwsze cpipepolecenie w SYSTEM:...opcji ogranicza następnie dane, które trafiły do gniazda: 5555 (i wychodzą z pierwszego zewnętrznego socat) do maksymalnie 10 kB / s. Te dane są następnie przekazywane za pomocą innego, socatktóry łączy się localhost:5000(w którym usługa, którą chcesz zwolnić, powinna nasłuchiwać). Dane z localhost:5000 są następnie umieszczane po prawej stroniecpipe polecenia, które (przy podanych wartościach) dławi je do około 300 kB / s.

Opcja -ngrdocpipe to ważne. Powoduje, że cpipe odczytuje niepotrzebnie odczyt z deskryptora pliku wejściowego. W przeciwnym razie możesz utknąć z danymi w buforach, które nie są przekazywane i czekają na odpowiedź.

Korzystanie z bardziej popularnego buffernarzędzia zamiastcpipeMożliwe jest również .

(Kredyty: Jest to oparte na przepisie „podwójnej koszulki” autorstwa Christophe Loor z socatdokumentacji)

na nie
źródło