Як визначити, чи мережа скидає UDP-пакети?


8

У мене є додаток для потокового відео, яке працює в моєму кабінеті, але не працює на місці клієнта. Симптом полягає в тому, що кожні пару секунд я припиняю отримувати пакети UDP на 2 секунди, тоді потік поновлюється так, ніби нічого не так.

Я побіг http://www.pingtest.net/ за місцем розташування клієнта, і він повернувся відмінно. Відсутні пакети та низька затримка. Єдина відмінність, яку я помітив між нашими двома локаціями, полягає в тому, що ping google.caтайм-аут у їх місці розташування, але працює в моєму.

Як перевірити, чи є мережа, на якій я перебуваю на блоки вхідних пакетів UDP? Чи є спосіб я виділити, хто скидає пакети?


Мені звучить проблема брандмауера. Чи є у вас програмні або апаратні брандмауери?
Пітто

Ви не можете запитати клієнта, для чого встановлена ​​їх мережна конфігурація?
Рамхаунд

@Ramhound, в ідеалі ні. Мені не хочеться копатися в налаштуваннях маршрутизатора потенційного клієнта щоразу, коли я хочу демонструвати свій продукт :)
Gili

2
Хлопці, будь ласка, поясніть свої негативні голоси, інакше я не можу відповісти.
Гілі

Відповіді:


4

Ви можете спробувати встановити з'єднання UDP netcat.

На машині A за межами мережі споживача запустіть:

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

Зверніть увагу, -uщо вказує netcat використовувати UDP. (А також пам’ятайте, що існують різні версії netcat, для яких потрібен буде -pпараметр чи ні; наведені варіанти для двох найпоширеніших (?), Обох включених у Debian.)

На споживчому місці: nc -u [addr of machine A] 1234.

Спробуйте надіслати надіслати текст або ще краще використати труби, щоб надіслати файл між обома місцями, а потім зробіть різницю.


Ваша віддалена команда для мене не відповідає. На сторінці написано слово -l" It is an error to use this option in conjunction with the -p, -s, or -z options.", тому я виправив команду до тієї, яку я перевірив для роботи. Крім того, я змінив 'ip' на 'addr', оскільки імена хостів також можна використовувати, і в певному сенсі є 'адресою'.
Джеймс Хей

@JamesHaigh: Я згоден з вами по addrпорівнянні ipточці. Але тепер з вашою командою я отримую помилку: listen needs -p arg(Я перевіряв свої команди, наведені у відповіді, теж ;)). Там є різні nc, якщо ви дасте більше деталей, таких як версія nc та / або ваш дистрибутив, я додам записку до своєї відповіді.
mpy

О так, прикро, що вони не сумісні! :-( Ок, так що моя віддалена машина Debian. Команда за замовчуванням ncє символьною посиланням, що /bin/nc -> /etc/alternatives/nc -> /bin/nc.openbsdнадається пакетом Debian netcat-openbsd. Моя локальна машина Ubuntu також nc.openbsdза замовчуванням не приймає жодного -l -p. Я також встановив ncatна обох машинах nmapпакет Ubuntu / Debian. Увімкнено старша машина Debian ncatвідмовляється -l -p, але ncatUbuntu приймає обидва способи. Хоча версія Debian повинна бути давньою, оскільки вона дратує не має --sctpможливості.: - /
Джеймс Хей

Ps Який ваш дистрибутив та ncваріант? Я помічаю, що є і netcat-traditionalпакет ' ', але я цього не пробував.
Джеймс Хей

@JamesHaigh: Я дійсно використовую netcat-traditional(v 1.10-38), оскільки він постачається з debian. Дякую за вашу підказку, я включив зараз у відповідь обидва варіанти.
mpy

13

на стороні сервера, встановіть сервер UPD з

iperf -s -u

на стороні клієнта перевірте з'єднання UDP

iperf -u -c <IP Address of Server>

1
Це справжня відповідь. Це вимагає наявності доступу до сервера з іншого боку. Але це дає вам зворотній зв'язок з втратою пакетів. І ви також можете використовувати його тестову пропускну здатність TCP.
DragonFax

0

The netcat команди у відповіді мре є корисними для діагностичних цілей, але я доповнює цей відповідь з іншим підходом до вашої основної проблеми.

Можливо, варто змусити вашу програму повернутися до SCTP або навіть до TCP. Я фактично знайшов це питання, тому що шукав, як відхилити вхідні пакети UDP від ​​користувачів, які використовують більше, ніж їх частку низхідній лінії зв'язку, коли вона перевантажена, тому що, на відміну від SCTP і TCP, UDP не контролює перевантаження, що ускладнює пріоритетність пріоритетної низхідній лінії зв'язку трафік.

І SCTP, і TCP мають контроль перевантаженості і чудово грають з QoS, але SCTP має додаткову перевагу перед TCP тим, що він був розроблений для потокових програм у режимі реального часу, що робить його гарною заміною для обох TCP і для UDP. Фактично, SCTP є найкращим з двох найпоширеніших транспортних протоколів.

Не може бути поганою ідеєю відмовитись, ніж покладатися тільки на UDP. Навіть якщо ви лише повернетесь до TCP, то, принаймні, ви можете сказати, що це працює, можливо, просто не оптимально.


0

На стороні сервера

iperf -u -p <port> -s

На стороні клієнта

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

Переконайтеся, що порт доступний на брандмауері. Це дасть такий звіт ua після тестування

[ 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%)
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.