Jak wykryć, czy sieć upuszcza pakiety UDP?

8

Mam aplikację do przesyłania strumieniowego wideo, która działa dobrze w moim biurze, ale kończy się niepowodzeniem w lokalizacji klienta. Objawem jest to, że co kilka sekund przestaję odbierać pakiety UDP na 2 sekundy, a następnie strumień wznawia się, jakby nic się nie stało.

Uruchomiłem http://www.pingtest.net/ w lokalizacji klienta i wróciło doskonale. Brak upuszczonych pakietów i małe opóźnienie. Jedyną różnicą, jaką zauważyłem między naszymi dwoma lokalizacjami, jest przekroczenie ping google.calimitu czasu w ich lokalizacji, ale działa ono w mojej.

Jak sprawdzić, czy sieć działa na blokach przychodzących pakietów UDP? Czy jest jakiś sposób, aby wyodrębnić, kto upuszcza pakiety?

Gili
źródło
Brzmi jak problem z zaporą ogniową. Czy masz zapory programowe lub sprzętowe?
Pitto,
Nie możesz zapytać klienta, jaka jest jego konfiguracja sieci?
Ramhound
@Ramhound, najlepiej nie. Nie chcę zagłębiać się w ustawienia routera potencjalnego klienta za każdym razem, gdy chcę demonstrować mój produkt :)
Gili
2
Chłopaki, proszę wyjaśnić swoje negatywne głosy, w przeciwnym razie nie mogę odpowiedzieć.
Gili

Odpowiedzi:

4

Możesz spróbować nawiązać połączenie UDP netcat.

Na komputerze A poza siecią klienta uruchom:

nc -u -l -p 1234            # if using netcat-traditional
nc -u -l 1234               # if using netcat-openbsd (as pointed out by @JamesHaigh)

Zwróć uwagę, -uktóry instruuje netcat, aby używał UDP. (Należy również pamiętać, że istnieją różne wersje netcat, które będą wymagały -pparametru lub nie; podane są warianty dwóch najbardziej powszechnych (?), Oba zawarte w Debianie).

Na miejscu konsumentów: nc -u [addr of machine A] 1234.

Spróbuj wysłać tekst, a jeszcze lepiej użyj potoków, aby wysłać plik między obiema lokalizacjami, a następnie zrób różnicę.

mpy
źródło
Twoje zdalne polecenie kończy się dla mnie niepowodzeniem. Strona podręcznika mówi -l„, It is an error to use this option in conjunction with the -p, -s, or -z options.”, więc poprawiłem polecenie do testowanego do pracy. Zmieniłem też „ip” na „addr”, ponieważ można także używać nazw hostów i są one w pewnym sensie „adresami”.
James Haigh
@JamesHaigh: Zgadzam się z wami na addrvs. ippunkcie. Ale teraz z twoim poleceniem pojawia się błąd: listen needs -p arg(Przetestowałem również moje polecenia podane w odpowiedzi ;)). Istnieją różne nc, jeśli podasz więcej szczegółów, takich jak wersja nc i / lub dystrybucja, dodam notatkę do mojej odpowiedzi.
mpy
No tak, szkoda, że ​​nie są wzajemnie kompatybilne! :-( Ok, więc mój zdalny komputer to Debian. Domyślne ncpolecenie to symlink /bin/nc -> /etc/alternatives/nc -> /bin/nc.openbsddostarczone przez pakiet Debian netcat-openbsd. Mój lokalny komputer Ubuntu również nc.openbsddomyślnie. Żadna z nich nie zaakceptuje -l -p. Zainstalowałem również ncatna obu komputerach nmappakiet Ubuntu / Debian. starsza maszyna Debiana, ncatodmawia -l -p, ale ncatna Ubuntu akceptuje oba sposoby. Chociaż wersja Debiana musi być starożytna, ponieważ irytująco nie ma takiej --sctpopcji: - /
James Haigh
Ps Jaka jest twoja dystrybucja i ncwariant? Zauważam, że jest też netcat-traditionalpakiet „ ”, ale nie próbowałem tego.
James Haigh
@JamesHaigh: Rzeczywiście używam netcat-traditional(wersja 1.10-38), ponieważ jest dostarczany z Debianem. Dzięki za podpowiedź, w odpowiedzi umieściłem teraz oba warianty.
mpy
13

po stronie serwera, załóż serwer UPD za pomocą

iperf -s -u

po stronie klienta sprawdź połączenie UDP za pomocą

iperf -u -c <IP Address of Server>
ckarrie
źródło
1
To jest prawdziwa odpowiedź. Wymaga dostępu do serwera po drugiej stronie. Ale zapewnia bezpośrednie informacje zwrotne na temat utraty pakietów. Możesz także użyć go do przetestowania przepustowości TCP.
DragonFax,
0

Do netcatpolecenia w odpowiedzi MPY są użyteczne do celów diagnostycznych, ale mam uzupełniając tę odpowiedź z innym podejściem do swojej podstawowej problemu.

Może być warto sprawić, że aplikacja spadnie do SCTP , a nawet TCP. Znalazłem to pytanie, ponieważ szukałem sposobu odrzucania przychodzących pakietów UDP od użytkowników używających więcej niż ich części łącza w dół, gdy jest on przeciążony, ponieważ w przeciwieństwie do SCTP i TCP, UDP nie ma kontroli przeciążenia, co bardzo utrudnia ustalenie priorytetu łącza w dół ruch drogowy.

Zarówno SCTP, jak i TCP mają kontrolę nad przeciążeniami i ładnie działają z QoS, ale SCTP ma dodatkową zaletę w stosunku do TCP, ponieważ został zaprojektowany do aplikacji do przesyłania strumieniowego w czasie rzeczywistym, dzięki czemu jest dobrym zamiennikiem zarówno TCP, jak i UDP. W efekcie SCTP jest najlepszym z dwóch najpopularniejszych protokołów transportowych.

Nie może być złym pomysłem mieć awarię zamiast polegać tylko na UDP. Nawet jeśli cofniesz się tylko do TCP, możesz przynajmniej powiedzieć, że działa, może po prostu nie optymalnie.

James Haigh
źródło
0

Do użytku na serwerze

iperf -u -p <port> -s

Po stronie klienta

iperf -u -p <port> -c <domain or ip>

Upewnij się, że port jest dozwolony w zaporze. To da taki raport po teście

[ ID] Interval       Transfer     Bandwidth        Jitter   Lost/Total Datagrams

[  1]  0.0-10.0 sec  1.25 MBytes  1.05 Mbits/sec   3.722 ms    1/  893 (0.11%)
Diluszan
źródło