我在 Raspberry Pi 上安装了 RaspBMC,在 Window 笔记本电脑上安装了 XBMC,在我的 Android 设备上安装了 UPnPlay。Raspberry Pi 始终处于开启状态,旨在充当系统的服务器。
涉及的 IP 地址:
192.168.0.18:树莓派
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:
在这篇文章的指导下,我运行/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 确实会发出一组NOTIFY
数据包,但非常不频繁(这条记录持续了将近 20 分钟,并且只发出了两个集群)。我相信ARP
数据包如此处所述,这意味着某些设备缺少网络上其他设备的 MAC 地址。尽管这可能令人担忧(某些设备不止一次要求相同的地址 - 为什么他们“忘记”这个?),也许更令人担忧的是这些数据包的发送频率很低,以及即使它们被发送的事实,网络上的客户端仍然没有拿起 RPi。
所以,总结一下:
RPi 正在发送
NOTIFY
数据包,但非常罕见。有没有办法控制这个?即使 RPi 发出
NOTIFY
数据包(在正常的事件过程中,而不是在启动时),网络上的客户端也不会发现它的存在。RPi 似乎没有响应
M-SEARCH
从其他设备发送的数据包。