【发布时间】:2012-11-21 06:53:06
【问题描述】:
我在 Raspberry Pi 上安装了 RaspBMC,在 Window 笔记本电脑上安装了 XBMC,在我的 Android 设备上安装了 UPnPlay。 Raspberry Pi 始终处于开启状态,旨在充当系统的服务器。
涉及的 IP 地址:
192.168.0.18:RPi
192.168.0.13:笔记本电脑
192.168.0.1:路由器
当我将 Android 设备连接到 WiFi 并在笔记本电脑上打开 UPnPlay 或启动 XBMC 时,之前在 Raspberry Pi 出现在设备列表中之前会有 5-10 分钟的延迟。然而,在过去的几周里,Pi 根本没有出现,除非我在其他服务(XBMC 或 UPnPlay)正在运行时重新启动它。我可以 ssh 和 sftp 到 Pi,并且可以从两个设备访问 RaspBMC 的 Web 界面,没有任何问题。
UPnP 网络发现/通知消息是否可能会丢失或以某种方式被阻止?我将如何调查这个?我对网络的了解仅限于端口转发。
我愿意接受有关 UPnP 替代协议的建议 - 这是我遇到的第一个简单协议,并且在我之前的设置(桌面上的 XBMC 将媒体发送到 Apple TV)上运行良好。
编辑:
在笔记本电脑上使用 Wireshark 进行的一些分析表明,笔记本电脑的行为符合预期 - 通过 SSDP 定期向 239.255.255.250(我认为是多播地址)发送 M-SEARCH 和 NOTIFY 数据包。然而,RPi 不仅没有用单播数据包响应这些数据包(正如维基百科所建议的那样),而且它也没有发送任何 SSDP 数据包,除非在启动时。
我对 Wireshark 和一般网络分析非常陌生,但我非常感谢您提供的任何指导或建议。
我使用的 Wireshark 过滤器是“(udp.dstport == 1900 or ip.addr == 192.168.0.18) and !(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:
在this post的指导下运行/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
我不知道如何解释,但是,从链接线程中的其他 cmets 来看,这似乎缺少多播条目。同样,按照链接线程的建议,我运行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,因为我看到网络上其他设备之间的流量很大)。
Here 是输出。
RPi 确实发送了一组NOTIFY 数据包,但非常罕见(此记录持续了近 20 分钟,仅发送了两个集群)。我相信ARP 数据包与here 描述的一样,这意味着某些设备缺少网络上其他设备的 MAC 地址。尽管这可能令人担忧(某些设备不止一次要求相同的地址 - 为什么它们会“忘记”这个?),但可能更令人担忧的是这些数据包的发送频率不高,以及即使它们被发送的事实,网络上的客户端仍然没有获取 RPi。
所以,总结一下:
RPi 正在发送
NOTIFY数据包,但很少发送。有办法控制吗?即使 RPi 发出
NOTIFY数据包(在正常的事件过程中,而不是在启动时),网络上的客户端也不会发现它的存在。RPi 似乎没有响应从其他设备发送的
M-SEARCH数据包。
【问题讨论】:
-
先打开 Android 或 Windows,然后再打开 RasPi,会发生什么情况?你的 RaspBMC 会立即弹出吗?
-
好点,我忘记测试了!是的,重新启动 RPi 会可靠地使其出现在 UPnP 设备列表中。但是,如果我关闭并重新打开客户端应用程序,RPi 就会从列表中消失。
-
我已经开始为您编写故障排除方法,但我仍然无法相信 RaspBMC 作者会忽略一些重要的东西。当您“唤醒” Pi,然后重新启动/运行另一个节点(XBMC/UPnPlay)时,Pi 现在会立即弹出吗? Pi OS(我猜是一些Linux)在不使用时是否有可能以某种方式部分休眠其网络接口? UPnP 发现通过多播 UDP 工作,这并不常见。
-
部分网络接口休眠是我的猜测,但令人费解的是它会立即响应 ssh 和 sftp。我对多播 UDP 一无所知,所以恐怕不能在那里发表评论。不在家里的自动取款机 - 我一回来就测试。
-
嗯,这正是我已经开始为您编写的故障排除程序,以检查这些数据包是否存在。但后来想,嘿,这绝对是 UPnP 的基本部分,老实说,这应该适用于公共产品......我显然错了。
标签: upnp raspberry-pi xbmc