Jak zdiagnozować i wizualizować wysokie czasy pingowania na routerze Wi-Fi?

65

Widzę nieregularne, a czasem bardzo długie czasy pingowania do mojego routera Wi-Fi, który znajduje się w odległości jednego skoku. Pingowanie 192.168.1.1czasami powoduje opóźnienia rzędu 400–800 ms.

Jest wiele rzeczy do wypróbowania (oprogramowanie układowe, umiejscowienie routera, kanał AP itp.), Ale chciałbym zaatakować ten problem nieco bardziej metodycznie:

  • Po pierwsze, jak mogę wizualizować wydajność mojej sieci?
  • Jak zatem przeprowadzić analizę porównawczą wydajności danej konfiguracji, aby móc dokonać wiarygodnego porównania po wprowadzeniu zmian?
Paul Irish
źródło
Jakiego routera i / lub oprogramowania routera pokładowego używasz, jeśli nie jest to standardowa instalacja?
Jeff Clayton
@JeffClayton Linksys WRT54GSv2 (oldschool) z systemem Tomato (Shibby). Używany do uruchamiania DD-WRT, ale jego obsługa była błędna i myląca.
Paul Irish
1
Czy masz rzeczywisty problem, czy jest to kwestia czysto kosmetyczna? Routery Wi-Fi nie są na ogół zaprojektowane jako superszybkie urządzenia pingujące, mają prawdziwą pracę do wykonania.
David Schwartz
1
@DavidSchwartz powinniśmy być w stanie ukończyć pełny objazd do punktu dostępowego Wi-Fi w mniej niż 10ms, nie? Jeśli twoje opóźnienie wewnątrz Wi-Fi jest większe niż 500 ms, KAŻDY PAKIET, który wyciągasz z internetu / internetu, również cierpi z powodu tego opóźnienia. To zabójca.
Paul Irish
1
@PaulIrish Wszystko prawda, ale nie ma to nic wspólnego z czasami pingowania. Ping mierzy sumę opóźnienia sieci plus opóźnienie odpowiedzi ping. Routery SoHo WiFi nie są przeznaczone do efektywnego reagowania na pingi, więc nie zaleca się używania ping do mierzenia opóźnienia sieci.
David Schwartz,

Odpowiedzi:

78

Ta odpowiedź na błąd serwera zawiera dobre wskazówki na wysokim poziomie, co należy zrobić - zacznij od tego. Ten ostatni krok jest jednak naprawdę głupi: prawdopodobnie ty (to znaczy ja) nie chcesz inwestować w dedykowany sprzęt do tego ...

Poniżej znajduje się kilka dobrych narzędzi, najpierw do zrozumienia stanu łączności w lokalnej sieci Wi-Fi, a następnie do punktu końcowego w Internecie.

Narzędzia Wi-Fi

NetSpot (dla komputerów Mac)

Śledzi lokalne AP WiFI i zapewnia podstawowe dane, takie jak SNR, kanał, siła sygnału. Może także przeprowadzić podstawowe badanie terenu dla fizycznej przestrzeni wskazującej mocne strony i interferencję. W trybie wykrywania AP możesz również wykreślić siłę sygnału w czasie, umożliwiając testowanie umiejscowienia i dostosowanie możliwości interferencji. wprowadź opis zdjęcia tutaj wprowadź opis zdjęcia tutaj wprowadź opis zdjęcia tutaj

Test prędkości WiFi dla Androida

Bardzo pomocny. Na swoim komputerze uruchomisz prosty serwer python, a aplikacja może przetestować kilka scenariuszy, przekazując ci informacje zwrotne na temat prędkości w czasie rzeczywistym.

wprowadź opis zdjęcia tutaj

Wifi Analyzer , kolejna świetna aplikacja na Androida, ma kilka cennych widoków na to, jakie kanały WiFi AP są aktywne. Może być najlepszym darmowym narzędziem do wybierania kanału AP bez większego nakładu pracy.

iPerf

Dobrze szanowane narzędzie do zrozumienia wydajności sieci lokalnej. Potrzebujesz dwóch pól, jednego jako serwera, drugiego jako klienta. Możesz ustawić wiele parametrów, uruchomić test i zobaczyć wyniki dla przepustowości i fluktuacji. Perfer używam go z GUI jPerf do tworzenia wykresów wyników i poprawiania parametrów.

brew install iperf
iperf -s # on server, next one on client
iperf -c 192.168.1.XXX -P 1 -i 1 -p 5001 -f m -t 60

wprowadź opis zdjęcia tutaj

Zdrowie łączności z Internetem

mtr (połączone ping i traceroute)

Pinguje wszystkie twoje chmielowe traceroute. Dostarcza dane trendów. Szalony niesamowity.

brew install mtr
mtr 8.8.4.4

speedtest-cli

Wersja CLI wspólnej rzeczy ookla speedtest.net. Opiekun projektu oświadcza, że ​​nie jest spójny, ale mimo wszystko warto próbować ocenić duże różnice.

wget -O speedtest-cli https://raw.github.com/sivel/speedtest-cli/master/speedtest_cli.py
chmod +x speedtest-cli
speedtest-cli --list | head # and chose a top server (sorted by distance)
speedtest-cli --server 2761 # re-use the same server

NPAD : Ścieżka sieci i diagnostyka aplikacji

Automatyczny serwer diagnostyczny do rozwiązywania problemów z systemami końcowymi i problemami z siecią ostatniej mili. Po uruchomieniu zestawu testów wyświetla taką stronę podsumowania wyników . Zalecam skorzystanie z tego linku przekierowującego serwer NPAD, aby znaleźć najbliższy serwer NPAD (wszystkie są już dostępne) i użycie tej nazwy hosta do testów.

  wget http://netspeed.usc.edu:8000/diag-client.c
  cc diag-client.c -o diag-client
# ./diag-client <server_name> <port> <target_RTT> <target_data_rate_in_MB/S>
  ./diag-client ps.psc.xsede.org 8001 30 5

wprowadź opis zdjęcia tutaj


Moje osobiste wyniki:

Spędziłem dobre godziny, robiąc to wszystko, próbując różnych rzeczy (zmieniając oprogramowanie z DD-WRT na Tomato) i czytając. Okazuje się, że nie była to warstwa sieciowa, a stare dobre zakłócenia RF, głównie z Bluetooth! Miałem komputer, mysz i klawiaturę Bluetooth w odległości 5 stóp od routera. (I stary router nadal działa na częstotliwości 2,4 Ghz, gdy się ze sobą ścierają).

W tym celu w pełni wykorzystałem test prędkości Wi-Fi dla Androida , uruchamiając go regularnie podczas przenoszenia rzeczy w mieszkaniu. Ponieważ raportuje aktualizacje co około 200 ms, wyraźnie komunikował, kiedy zakłócenia zrzucały moje pakiety.

Zdecydowanie polecam przeczytanie przewodnika Common Sources of Interference od Metageek. (Sprawiają również, że InSSIDer i inne narzędzia analizy Wi-Fi wydają się dobre.)

wprowadź opis zdjęcia tutaj

Jednym z narzędzi, których nie miałem, był miernik analizy widma fizycznego. Telefony i laptopy mogą wykrywać tylko punkty dostępowe Wi-Fi, ale nie mogą wykryć zakłóceń spowodowanych przez Bluetooth lub inne technologie oparte na RF. Metageek ma w tej przestrzeni kilka fajnych rozwiązań ( Wi-Spy i inSSIDer Office ) i mam nadzieję, że pojawią się kolejne narzędzia, takie jak AirShark .

Paul Irish
źródło
To są piękne narzędzia, które aktualizują moje notatki.
Jeff Clayton
Kolejne „szybkie i brudne” narzędzie, które jest nieocenione, ponieważ jego przenośny to Wifi Analyzer dla urządzeń z Androidem.
davidgo,
Zawsze. Wspomniałem krótko o analizatorze WiFi; może to być najlepsze narzędzie do zrozumienia zakłóceń kanału AP, choć w moim przypadku nie było to problemem. To powiedziawszy, to naprawdę dobrze zrobione.
Paul Irish
Świetna lista, dzięki. Inną rzeczą, którą zawsze należy wypróbować, jest sprawdzenie, co dzieje się bez wifi. Kiedyś miałem coś, co uważałem za problem z Wi-Fi, ale podłączenie bezpośrednio do kabla zasilającego Wi-Fi AP i uruchomienie iPerf ujawniło Bad Cable jako prawdziwego winowajcę!
Ryan Dlugosz
1
Hmmmm Jest mało prawdopodobne, aby Bluetooth powodował rodzaj opisywanych zakłóceń. Zwykły wzorzec przeskoku AFS pozwoli uniknąć typowego sygnału Wi-Fi 20 MHz w paśmie 2,4 GHz. Nie prowadziłeś kanałów 40 MHz, prawda?
alfwatt
4

Jak zauważono w moim komentarzu powyżej: Narzędzia często używane do diagnozowania problemów z Wi-Fi mogą faktycznie powodować ten problem. Podczas skanowania w poszukiwaniu sieci Wi-Fi radio musi wyjść z kanału, zwykle mówi AP, aby buforował dla niego ramki, aby mógł się „przespać”, a następnie przełącza kanały na skanowanie.

Dodatkowo, iOS i OS X od czasu wprowadzenia AirDrop, wyłączy radio Wi-Fi z kanału, aby szukać innych usług AirDrop, a ponieważ Yosemite będzie okresowo wyłączał kanał, aby obsługiwać przekazywanie połączeń.

alfwatt
źródło
1
Świetna uwaga - w przeszłości zauważyłem ten problem za pomocą InSSIDer - miło jest go wyjaśnić.
Nick
3

Więc miałem te fluktuacje ping Wi-Fi na routerze.

PING 192.168.0.1 (192.168.0.1): 56 data bytes
64 bytes from 192.168.0.1: icmp_seq=0 ttl=63 time=2.334 ms
64 bytes from 192.168.0.1: icmp_seq=1 ttl=63 time=1.813 ms
64 bytes from 192.168.0.1: icmp_seq=2 ttl=63 time=2749.664 ms
64 bytes from 192.168.0.1: icmp_seq=3 ttl=63 time=1748.912 ms
64 bytes from 192.168.0.1: icmp_seq=4 ttl=63 time=748.162 ms
64 bytes from 192.168.0.1: icmp_seq=5 ttl=63 time=1.796 ms
64 bytes from 192.168.0.1: icmp_seq=6 ttl=63 time=1.806 ms
64 bytes from 192.168.0.1: icmp_seq=7 ttl=63 time=1.991 ms
64 bytes from 192.168.0.1: icmp_seq=8 ttl=63 time=1.797 ms
64 bytes from 192.168.0.1: icmp_seq=9 ttl=63 time=1.832 ms
64 bytes from 192.168.0.1: icmp_seq=10 ttl=63 time=1.713 ms
64 bytes from 192.168.0.1: icmp_seq=11 ttl=63 time=1.819 ms
64 bytes from 192.168.0.1: icmp_seq=12 ttl=63 time=1.616 ms
64 bytes from 192.168.0.1: icmp_seq=13 ttl=63 time=1.748 ms
64 bytes from 192.168.0.1: icmp_seq=14 ttl=63 time=1.677 ms
64 bytes from 192.168.0.1: icmp_seq=15 ttl=63 time=3427.213 ms
64 bytes from 192.168.0.1: icmp_seq=16 ttl=63 time=2426.371 ms
64 bytes from 192.168.0.1: icmp_seq=17 ttl=63 time=1425.634 ms
64 bytes from 192.168.0.1: icmp_seq=18 ttl=63 time=424.834 ms
64 bytes from 192.168.0.1: icmp_seq=19 ttl=63 time=1.829 ms
64 bytes from 192.168.0.1: icmp_seq=20 ttl=63 time=1.691 ms
64 bytes from 192.168.0.1: icmp_seq=21 ttl=63 time=2.038 ms
64 bytes from 192.168.0.1: icmp_seq=22 ttl=63 time=1.679 ms
^C--- 192.168.0.1 ping statistics ---
23 packets transmitted, 23 packets received, 0% packet loss
round-trip min/avg/max/stddev = 1.616/564.346/3427.213/1015.102 ms

Zmieniłem router (z TL-WR743ND na DIR-815), wypróbowałem kilka adapterów USB Wi-Fi (głównie TP-LINK, choć myślę, że miałem problem również z D-Link DWA-160), przeszedłem z 2,5 GHz na 5GHz i przeszukiwał kanały. Brak szczęścia, problem nadal występował.

Dopóki nie zauważyłem, że kiedy wykonuję test prędkości sieci lub uruchamiam klienta bittorrent, ping jest w porządku. Zmienia się tylko, gdy sieć jest bezczynna.

Może to być problem z Windows 7 lub coś z moimi adapterami TP-LINK, ale kiedy trochę obciążam Wi-Fi, fluktuacja znika, a sieć działa dobrze.

Do tej pory stworzyłem mały program Rust, aby utrzymać moją sieć Wi-Fi.

// Need a constant wifi load in order not to have the ping drops.
fn wifi_load() {
  // This *might* be useful if the router suddenly supports Keep-Alive.
  // Not the case with DIR-815 though, we'll keep making new connections to it.
  let config = hyper::client::pool::Config {max_idle: 1};

  let client = hyper::client::Client::with_pool_config (config);
  loop {
    let url = "http://192.168.0.1/css/init.css";
    if let Err (err) = client.get (url) .send() {
      log! ("wifi_load] Error fetching {}: {}", url, err);
      sleep (Duration::from_secs (9));}
    sleep (Duration::from_millis (100));}} 
ArtemGr
źródło