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.ca
limitu 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?
networking
udp
Gili
źródło
źródło
Odpowiedzi:
Możesz spróbować nawiązać połączenie UDP
netcat
.Na komputerze A poza siecią klienta uruchom:
Zwróć uwagę,
-u
który instruuje netcat, aby używał UDP. (Należy również pamiętać, że istnieją różne wersjenetcat
, które będą wymagały-p
parametru 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ę.
źródło
-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”.addr
vs.ip
punkcie. 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.nc
polecenie to symlink/bin/nc -> /etc/alternatives/nc -> /bin/nc.openbsd
dostarczone przez pakiet Debiannetcat-openbsd
. Mój lokalny komputer Ubuntu równieżnc.openbsd
domyślnie. Żadna z nich nie zaakceptuje-l -p
. Zainstalowałem równieżncat
na obu komputerachnmap
pakiet Ubuntu / Debian. starsza maszyna Debiana,ncat
odmawia-l -p
, alencat
na Ubuntu akceptuje oba sposoby. Chociaż wersja Debiana musi być starożytna, ponieważ irytująco nie ma takiej--sctp
opcji: - /nc
wariant? Zauważam, że jest teżnetcat-traditional
pakiet „ ”, ale nie próbowałem tego.netcat-traditional
(wersja 1.10-38), ponieważ jest dostarczany z Debianem. Dzięki za podpowiedź, w odpowiedzi umieściłem teraz oba warianty.po stronie serwera, załóż serwer UPD za pomocą
po stronie klienta sprawdź połączenie UDP za pomocą
źródło
Do
netcat
polecenia 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.
źródło
Do użytku na serwerze
Po stronie klienta
Upewnij się, że port jest dozwolony w zaporze. To da taki raport po teście
źródło