![ARP 请求未到达主机](https://linux22.com/image/1617864/ARP%20%E8%AF%B7%E6%B1%82%E6%9C%AA%E5%88%B0%E8%BE%BE%E4%B8%BB%E6%9C%BA.png)
我有一个相当基本的本地无线网络。我有一个 Ubuntu 媒体服务器/文件共享、一台台式电脑、一台笔记本电脑、手机和一台电视。自从我拥有服务器以来(至今已有 2-3 个月),我面临的问题是它每周有 1-2 次无法访问。我无法从任何一台机器 ping 它们,也无法访问资源(例如文件共享)。
我已经排除故障一段时间了,我确保端口是开放的,服务正在运行,等等。此外,它通常可以连续 3-4 天完美运行,所以我怀疑它是否有任何“静态”配置(例如,端口 22 没有对 ssh 开放)
我终于找到了重现方法和“修复方法”。如果笔记本电脑脱离网络,服务器通常无法访问。(例如,进入睡眠状态或移动设备上的 wifi 关闭)如果我登录服务器并 ping 笔记本电脑,那么笔记本电脑将再次开始看到服务器。
这一点,以及有些机器可以看到服务器,而有些机器看不到服务器的事实同时,让我想到它可能与 ARP 有关。我尝试在笔记本电脑无法访问服务器且服务器不在表中时在笔记本电脑上打印 ARP 表。当我从服务器 ping 笔记本电脑时,笔记本电脑的本地 ARP 缓存得到更新,服务器的 IP 出现,并且一切开始正常工作(直到下一次睡眠)。
现在,我开始查看网络流量。我在笔记本电脑上安装了 WireShark,我可以看到笔记本电脑不断向服务器发送 ARP 请求(可能是因为映射了文件共享),但没有回复。我使用tcpdump
服务器查看了传入的 ARP 请求,我可以看到它从路由器和我的台式机收到了一些请求,但是没有任何从笔记本电脑。(为了测试,我禁用了防火墙)
因此本质上,笔记本电脑发送 ARP 请求但没有得到任何响应,并且服务器看不到来自笔记本电脑的任何请求。
我在这些例子中提到了笔记本电脑,但它对于移动设备或网络上的其他设备的工作方式是一样的。
更多信息:
- 单个 LAN 域,无桥接,没有什么复杂的。
- 不幸的是,ISP 提供的路由器很简单。我没有做任何 NAT 或任何“高级”操作。我想我唯一更改的路由器设置是在故障排除期间延长了 DHCP 租约。
- 服务器有两个网络适配器,一个以太网和一个无线,但我只使用无线。(由于某些限制,路由器位于壁橱中,因此任何设备都无法有线连接。)
- 路由器有 2.4GHz 和 5GHz,我将这两种频率都用于少数设备,但谁在查看服务器以及谁在同一频率上之间没有关联。
- 服务器硬件是我的旧台式电脑,2-3 个月前我把它改造成了服务器。以前当它是 PC 时(Windows 7),我没有遇到任何问题
对于我来说,整个网络都是未知的领域,我以前从来没有做过这样的事情,而且现在我不知道如何进展或应该检查或更改什么。
您是否知道如何进一步解决此问题或可能存在什么问题?
答案1
在 Wi-Fi 上,广播被视为多播的一种特殊情况,所有多播的处理方式都与单播不同。这种额外的复杂性很容易实现错误,因此有缺陷的实现通常会破坏多播处理。由于 ARP 是广播的,这些错误可能会破坏 ARP。它们还会破坏基于多播的发现协议,例如 IETF ZeroConf(又名 Apple Bonjour、mDNS)和 Microsoft 现已弃用的 LLMNR。
最常见的错误是处理多播必须使用与单播不同的密码的情况。当启用多个密码套件时会发生这种情况。例如,许多 AP 愚蠢地默认使用“WPA2 混合模式”,这意味着 WPA2(AES-CCMP)和原始 WPA(TKIP)都已启用。原始 WPA 仅在 2003-2004 年左右对一小部分用户有用,并且从那时起就一直造成问题。因此,如果您在 AP(无线路由器)上以任何方式启用了原始 WPA(TKIP),请将其禁用。您想使用仅 WPA2(仅 AES-CCMP)。
第二个问题是对多播密钥轮换(又称组密钥轮换)处理不当。与 TKIP 不同,AES-CCMP 不需要组密钥轮换,因此如果您的 AP 允许您设置自动组密钥轮换间隔,请禁用它或将其设置为尽可能高(长)的间隔。
第三个问题是多播数据速率。多播在 802.11 层不被确认,因此它们必须以所有客户端都可以可靠接收的数据速率从 AP 传输。如果您的 AP 允许您设置多播速率,并且您将其设置得太高,则某些客户端可能无法可靠地接收多播,这意味着它们将无法可靠地接收 ARP 请求。因此,请确保您没有将多播速率设置得太高。