3 件硬件涉及:
- Netgear R7000 路由器配备 DD-WRT v24-sp2(08/15/14)kongac(24865M) - 它是双频的。
- 基于 Raspberry Pi 型号 B 的打印服务器,带有 Raspbian(Raspberry 版 Debian)。使用 ALFA AWUS050H USB 适配器连接到 WiFi(2.4GHz 频段),通过 USB 连接 HP LaserJet 3055 打印机。运行 CUPS 1.5.3 和 SANE。除此之外没有其他内容,Raspbian 安装简单。
- 台式机运行 Windows 8.1,配有 Asus PCE68U。连接到同一路由器上的 5GHz WiFi。实际上,我的所有其他设备(如笔记本电脑、手机等)都表现相同。
问题: 我无法从桌面连接打印服务器,除非我从打印服务器 ping 桌面。我通过 ssh 登录路由器,然后通过另一个 ssh 会话连接到打印服务器。当我 ping 桌面时,前 4-5 个数据包丢失,然后它开始工作。在我停止 ping 之后,它确实工作了几分钟。然后它又停止了,我再也无法连接到打印服务器。
CUPS 页面没有响应,ping 打印服务器时显示
来自 192.168.xxx.xxx 的回复:目标主机不可达。
有时(主要是当我尝试连接到 CUPS 页面或在 ping 时打印时):
请求超时。
可以随时从桌面和打印服务器 ping/联系路由器。
服务器上的 Dmesg 收到很多:
wlan0:将 TX 功率限制为 30(30 - 0)dBm,如 [路由器的 2.4GHz MAC] 所宣传的那样
但不是经常性的。有时是每 4 秒一次,有时是 10 分钟不响。在此期间 dmesg 中没有其他内容。
问题: 哪里出了问题?由于这看起来有点奇怪,而且似乎不一致(有时在 ping 后可以工作半小时,有时在 10 秒后停止),我将非常感激有关如何更深入地调查问题的任何建议。
笔记:
两个客户端(打印机服务器和桌面)都从同一个 DHCP 服务器(dhcp 范围之外的静态租约)获取网络设置。服务器上运行的是 dnsmasq。两者均在同一子网中获取 IP,网络掩码为 255.255.255.0。
答案1
这通常表示子网掩码不匹配。
为了使 PC 能够向打印机发送数据包,它需要打印机的 MAC 地址。这是通过 arp 请求完成的who has ip xx.xx.xx.xx
这将发送到本地网络的广播地址。如果打印机具有不同的子网掩码,并且 PC 子网掩码不包含打印机的 IP,则它可能看不到请求,因此 PC 看不到回复,因此无法获取打印机的 MAC。
当打印机 ping PC 时,它会发送 arp 请求,由于其子网掩码包含 PC,因此 PC 会以其 MAC 进行响应。但是,此时 PC 会将打印机的 MAC 地址添加到其 arp 表中,因此可以与 PC 进行通信。
过一会儿,PC 上的 ARP 条目将会过期,并且它将无法与打印机通信,直到再次发生传入通信。
答案2
似乎由于存在多个第 1 层媒体而导致了一些第 2 层隔离:发送到 MAC ff:ff:ff:ff:ff:ff 的无 ip 帧(例如在 ARP 请求中完成的)似乎并未跨越两个 WiFi 频段。
目前尚不清楚这两台主机最终如何交换数据;我猜想 Linux 系统正在遵循某种重定向,而 Windows 系统则忽略了这种重定向。 tcpdump -env
打印服务器上的重定向可能会揭示一些线索。在 arp -a
通信工作之前和期间的所有系统上,也可能有一些用处。每个主机上是否都显示一个条目?仅出于完整性考虑,可以将 ARP 表静态配置为临时解决方案,但我不建议在这里花费太多时间。
同样,也许ping 255.255.255.255
从 Windows 系统执行的操作可能会在此期间启动通信,因为这将发生在似乎正在工作的 IP 层上,并且echo-reply
打印机将暂时安装所需的任何 ARP 条目。
我对解决这个问题的一般建议包括检查和切换路由器上的接口桥接选项,以及启用proxy arp
功能,这可能有助于充分掩盖我怀疑存在于两个频段之间的网络碎片。 proxy arp
会让你的路由器响应who-has
对打印机 IP 的请求,这样你的 Windows 机器就知道它必须将打印机流量发送到路由器。无论如何,路由器都必须桥接两个频段之间的通信……