Задержка обнаружения UPnP

У меня установлен RaspBMC на Raspberry Pi, XBMC на ноутбуке с Windows и UPnPlay на моем устройстве Android. Raspberry Pi всегда включен и предназначен для работы в качестве сервера для системы.

Задействованные IP-адреса:

  • 192.168.0.18: РПи

  • 192.168.0.13: Ноутбук

  • 192.168.0.1: Маршрутизатор

Когда я подключаю Android-устройство к WiFi и включаю UPnPlay или запускаю XBMC на ноутбуке, раньше была бы задержка в 5-10 минут, прежде чем Raspberry Pi появится в списке устройств. Однако в течение последних нескольких недель Pi вообще не появляется, если я не перезагружаю его во время работы других служб (XBMC или UPnPlay). Я могу подключиться к Pi по ssh и sftp и без проблем получить доступ к веб-интерфейсу RaspBMC с обоих устройств.

Возможно ли, что сообщения об обнаружении/объявлении сети UPnP каким-то образом теряются или блокируются? Как бы я расследовал это? Мои познания в сети ограничены переадресацией портов.

Я открыт для предложений альтернативных протоколов UPnP — это простой первый протокол, с которым я столкнулся, и он отлично работал в моей предыдущей настройке (XBMC на рабочем столе, отправляющий медиафайлы на Apple TV).


РЕДАКТИРОВАТЬ:

Некоторый анализ с помощью Wireshark на ноутбуке показывает, что ноутбук ведет себя так, как и ожидалось — отправляет пакеты M-SEARCH и NOTIFY через регулярные промежутки времени через SSDP на 239.255.255.250 (который, как я полагаю, является многоадресным адресом). Однако RPi не только не отвечает на эти пакеты одноадресными пакетами (как предполагает Википедия), но и не отправляет никаких пакетов SSDP, кроме как при загрузке.

Я очень новичок в Wireshark и анализе сети в целом, но я был бы очень признателен за любые рекомендации или советы, которые вы можете дать.

Фильтр Wireshark, который я использовал, был «(udp.dstport == 1900 или ip.addr == 192.168.0.18) и !(ip.src == 192.168.0.1)», где 192.168.0.18 — это адрес моего RPi. это правильно, но, как я уже сказал, я очень новичок в Wireshark - пожалуйста, поправьте меня, если я ошибся! В частности, я предположил, что многоадресный ответ RPi на M-SEARCH будет иметь ip.src = 192.168.0.18, но я не уверен в этом (предположительно это может быть 192.168.0.1 или 239.255.255.250).


РЕДАКТИРОВАТЬ 2:

Руководствуясь этим сообщением, я запустил /sbin/route -n и получил следующий результат.

pi@raspbmc:~$ /sbin/route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.0.1     0.0.0.0         UG    0      0        0 eth0
192.168.0.0     0.0.0.0         255.255.255.0   U     0      0        0 eth0

Я не знаю, как это интерпретировать, но, судя по другим комментариям в связанной ветке, здесь отсутствует запись для многоадресной рассылки. Опять же, следуя этому совету из связанной ветки, я запустил sudo route add -net 239.0.0.0 netmask 255.0.0.0 eth0, добавил это в /etc/rc.local и перезапустил RPi, однако Pi по-прежнему не отображается в списке сетевых устройств для клиентов UPnP. Я также пытался использовать 239.255.255.250 в качестве многоадресного адреса (см. Редактировать 1 выше), что дало ошибку route: netmask doesn't match route address.

Опять же, руководствуясь связанным сообщением, я запустил установленный tshark и запустил sudo tshark -i et0 multicast | grep 192.168.0.18 (я добавил grep, так как видел большой трафик между другими устройствами в сети).

Вот результат.

RPi действительно отправляет кластер из 8_ пакетов, но очень редко (эта запись охватывает почти 20 минут, и отправляется только два кластера). Я полагаю, что пакеты ARP описаны здесь, подразумевая, что на некоторых устройствах отсутствуют MAC-адреса для других устройств в сети. Хотя это потенциально вызывает беспокойство (некоторые устройства запрашивают один и тот же адрес более одного раза — почему они «забывают» об этом?), возможно, более тревожными являются нерегулярность отправки этих пакетов и тот факт, что даже при их отправке , клиенты в сети по-прежнему не подхватывают RPi.

Итак, резюмируя:

  • RPi отправляет NOTIFY пакетов, но очень редко. Есть ли способ контролировать это?

  • Даже когда RPi отправляет NOTIFY пакетов (в обычном порядке, а не при загрузке), клиенты в сети не узнают о его существовании.

  • Похоже, что RPi не отвечает на M-SEARCH пакетов, отправленных с других устройств.


person scubbo    schedule 03.12.2012    source источник
comment
Что происходит, когда вы сначала включаете Android или Windows, а только потом RasPi? Ваш RaspBMC появляется сразу?   -  person Pavel Zdenek    schedule 04.12.2012
comment
Хороший вопрос, я забыл проверить это! Да, перезапуск RPi надежно приводит к его появлению в списке устройств UPnP. Однако, если я закрою и снова открою клиентские приложения, RPi исчезнет из списка.   -  person scubbo    schedule 04.12.2012
comment
Я уже начал писать для вас руководство по устранению неполадок, но я все еще не могу поверить, что автор RaspBMC упустил из виду что-то столь же важное. Когда вы пробуждаете Pi, а ЗАТЕМ перезапускаете/запускаете снова другой узел (XBMC/UPnPlay), сразу ли всплывает Pi? Возможно ли, что ОС Pi (я думаю, какой-то Linux) каким-то образом частично переводит свой сетевой интерфейс в спящий режим, когда он не используется? Обнаружение UPnP работает через многоадресный UDP, который не так распространен.   -  person Pavel Zdenek    schedule 04.12.2012
comment
Частичный спящий режим сетевого интерфейса был моим предположением, но вызывает недоумение тот факт, что он мгновенно реагирует на ssh и sftp. Я ничего не знаю о многоадресном UDP, поэтому не могу комментировать, боюсь. Не дома банкомат - как вернусь проверю.   -  person scubbo    schedule 04.12.2012
comment
ssh и sftp являются одноадресными и, скорее всего, TCP. Другими словами, то, что Pi OS может быть более правильным в обращении.   -  person Pavel Zdenek    schedule 04.12.2012
comment
Интересно, спасибо. Я продолжу расследование, когда буду дома.   -  person scubbo    schedule 04.12.2012
comment
Спасибо за вашу помощь и совет. Я установил, что RPi не отправляет пакеты NOTIFY и не отвечает на пакеты M-SEARCH ноутбука, как должно быть. Я направил вопрос на форумы RaspBMC, так как они, вероятно, смогут дать более специализированный совет.   -  person scubbo    schedule 05.12.2012
comment
Ну, это было именно то, что я уже начал писать в качестве средства устранения неполадок для вас, чтобы проверить наличие этих пакетов. Но потом подумал, эй, это абсолютно базовая часть UPnP, честно говоря, это должно работать для общедоступного продукта ... очевидно, я был неправ.   -  person Pavel Zdenek    schedule 05.12.2012
comment
Думаю, я все равно опубликую средство устранения неполадок, независимо от того, примете вы его или нет. Это может быть полезно для тех, кто ищет соответствующие знания.   -  person Pavel Zdenek    schedule 05.12.2012


Ответы (2)


Возможно ли, что сообщения об обнаружении/объявлении сети UPnP каким-то образом теряются или блокируются?

Потерял, точно нет. Заблокировано, возможно, в том смысле, что вообще не отправляется из-за неправильной реализации разговорного многоадресного UDP, в любом узле UPnP. Я регулярно наблюдаю подобное поведение RaspBMC в сертифицированных домашних развлекательных устройствах.

Любой узел, подключающийся к сети UPnP, должен рекламировать себя: отправить многоадресный (то есть на адрес 239.255.255.250) UDP-пакет с содержимым, очень похожим на HTTP, но действие NOTIFY. Эта часть RaspBMC работает хорошо, поэтому я попросил другой тестовый сценарий.

Затем тот же узел может опционально обнаружить сеть: снова отправить многоадресный пакет UDP с действием M-SEARCH, но, в отличие от NOTIFY, он фактически ожидает одноадресных ответов от других узлов UPnP. RaspBMC как медиасерверу не нужно этого делать, потому что ему не нужно знать другие узлы. Но другим узлам необходимо знать о серверах в сети, и некоторые вещи могут быть неверными:

  • XBMC/UPnPlay не отправляет это многоадресное обнаружение (маловероятно, вы сказали, что XBMC раньше работал на вас)
  • RaspBMC задыхается и не отправляет ожидаемый одноадресный ответ при первом обнаружении, только несколько позже
  • XBMC/UPnPlay не понимает отправленный ответ RaspBMC и отбрасывает его

Как бы я расследовал это?

На своем ноутбуке с Windows установите DeviceSpy из Intel UPnP Developer Tools. Он неизменно считается наиболее надежной реализацией контрольной точки UPnP. Если ваш RasPi не появляется сразу, это проблема RaspBMC. Либо он вообще не отправил одноадресный ответ, либо ответ неверен.

Если он появится, запустите Device Sniffer из того же набора инструментов. Запустите XBMC или UPnPPlay и наблюдайте за многоадресным трафиком обнаружения UPnP. Если есть M-SEARCH, исходящий от ожидаемого IP-адреса Windows или Android, но RaspBMC не появляется, то это проблема RaspBMC. К сожалению, инструмент не может перехватить одноадресный ответ от RaspBMC (если он есть)

В худшем случае установите Wireshark и отфильтруйте захват по IP-адресу RasPi. Он сообщит вам, отправил ли он одноадресный ответ или нет, и вы сможете увидеть содержимое.

person Pavel Zdenek    schedule 05.12.2012
comment
Спасибо за это прекрасное руководство по устранению неполадок! Я уже перешел к наихудшему сценарию в своем собственном расследовании и обнаружил, что с Wireshark немного сложно справиться - я также проверю другие ваши рекомендуемые инструменты. Хотя проблема еще не решена, я принимаю это как ответ, потому что сомневаюсь, что кто-то может дать какой-либо совет без глубоких знаний системы RaspBMC, и в благодарность за вашу тяжелую работу! - person scubbo; 05.12.2012
comment
Пожалуйста. И если вам действительно интересно, как работает UPnP, всегда есть UPnP. Документация форума, которая гораздо более удобочитаема, чем вы ожидаете от такого официального документа (например, по сравнению с RFC IETF). - person Pavel Zdenek; 05.12.2012
comment
Надеюсь, вы не возражаете, но я отменяю статус выбранного ответа для вашего ответа. Хотя это был очень полезный и информативный ответ, который я ценю, я до сих пор не решил проблему. Я надеюсь, что пометка этого вопроса как оставшегося без ответа привлечет больше внимания к проблеме. - person scubbo; 09.12.2012
comment
Хм, кажется, это причина, чтобы наконец-то получить свой собственный RPi :) Но я не успею за 6 дней :( В любом случае, все это похоже на неправильную настройку маршрутизации ОС RPi, а не конкретного программного обеспечения UPnP. УВЕДОМЛЯЙТЕ о частоте 15 минут Это нормально, может и настраивается в настройках RaspBMC, но нет необходимости делать это чаще - то есть в корректно работающей сети UPnP. - person Pavel Zdenek; 10.12.2012
comment
Просто в стороне: лучший фильтр WireShark, который я нашел, чтобы видеть только пакеты SSDP, это: (udp содержит HTTP/1.1) и ((udp содержит 0a:53:54:3a) или (udp содержит 0a:59 :54:3a)) Шестнадцатеричный код ST: и NT: в начале строки. - person Jesse Chisholm; 12.02.2014

Возможно, вы захотите попробовать отключить маршрутизатор от остальной сети (т. е. все остальные устройства могут видеть друг друга, но не через ваш маршрутизатор) — некоторые маршрутизаторы «мешают» трафику UPNP. Это скажет вам, сбрасывает ли ваш маршрутизатор или блокирует трафик UPnP. BT Homehub особенно виновны.

person alwi    schedule 18.07.2014