У меня есть приложение для потокового видео, которое отлично работает в моем офисе, но с треском проваливается на месте клиента. Симптом заключается в том, что каждые пару секунд я прекращаю прием пакетов UDP на 2 секунды, затем поток возобновляется, как будто ничего не происходит.
Я запустил http://www.pingtest.net/ на месте клиента, и он вернулся отлично. Нет отброшенных пакетов и низкая задержка. Единственное различие, которое я заметил между нашими двумя местоположениями, состоит в том, что ping google.ca
тайм-аут в их местоположении, но работает в моем.
Как проверить, блокирует ли сеть, в которой я нахожусь, входящие пакеты UDP? Есть ли способ для меня, чтобы изолировать, кто отбрасывает пакеты?
networking
udp
Гили
источник
источник
Ответы:
Вы можете попытаться установить соединение UDP с
netcat
.На машине A вне сети потребителя запустите:
Обратите внимание,
-u
который инструктирует netcat использовать UDP. (Также имейте вnetcat
виду , что существуют разные версии , для которых параметр будет нужен-p
или нет; приведены варианты для двух наиболее распространенных (?), Оба включены в Debian.)На потребительском месте:
nc -u [addr of machine A] 1234
.Попробуйте отправить текст, или, что еще лучше, используйте каналы, чтобы отправить файл между обоими местоположениями, а затем выполните diff.
источник
-l
«It is an error to use this option in conjunction with the -p, -s, or -z options.
», поэтому я исправил команду на ту, которую протестировал на работу. Кроме того, я изменил «ip» на «addr», потому что имена хостов также могут использоваться и в некотором смысле являются «адресом».addr
противip
. Но теперь с вашей командой я получаю сообщение об ошибке:listen needs -p arg
(Я также проверил мои команды, приведенные в ответе;)
). Существуют различные nc, если вы дадите более подробную информацию, такую как nc version и / или ваш дистрибутив, я добавлю примечание к своему ответу.nc
это символическая ссылка,/bin/nc -> /etc/alternatives/nc -> /bin/nc.openbsd
предоставляемая пакетом Debiannetcat-openbsd
. Моя локальная машина с Ubuntu также имеетnc.openbsd
по умолчанию. Ни один из них не примет-l -p
. Я также установилncat
на обе машины изnmap
пакета Ubuntu / Debian. Вкл. старая машина Debianncat
отказывается-l -p
, ноncat
в Ubuntu принимает оба пути, хотя версия Debian должна быть древней, поскольку у нее досадно нет--sctp
возможности: - /nc
вариант? Я заметил, что есть также иnetcat-traditional
пакет, но я не пробовал.netcat-traditional
(v 1.10-38), так как он поставляется с Debian. Спасибо за подсказку, теперь я включил оба варианта в ответ.на стороне сервера установите сервер UPD с
на стороне клиента проверьте соединение UDP с
источник
Эти
netcat
команды в ответе МРЕТ являются полезными для диагностических целей, но я дополняющая этот ответ с другим подходом к вашей основной проблеме.Возможно, стоит приложить ваше приложение к SCTP или даже к TCP. Я действительно нашел этот вопрос, потому что я искал, как отклонить входящие пакеты UDP от пользователей, использующих больше, чем их доля нисходящей линии связи, когда он перегружен, потому что в отличие от SCTP и TCP, UDP не имеет контроля перегрузки, что очень затрудняет определение приоритетов нисходящей линии связи. движение.
И SCTP, и TCP имеют контроль над перегрузкой и прекрасно работают с QoS, но SCTP имеет дополнительное преимущество по сравнению с TCP, которое было разработано для потоковых приложений в реальном времени, что делает его хорошей заменой как для TCP, так и для UDP. По сути, SCTP является лучшим из двух наиболее распространенных транспортных протоколов.
Не может быть плохой идеей иметь запасной вариант, а не полагаться только на UDP. Даже если вы используете только TCP, вы можете сказать, что он работает, может быть, не совсем оптимально.
источник