什么原因导致无线网络中 ARP 响应数据包丢失?

什么原因导致无线网络中 ARP 响应数据包丢失?

我的局域网(LAN)中有一个无线接入点(AP)网络。

网络中的某些 PC 可以从网络中的其他 PC/设备获得 ping 响应,但其他 PC/设备则不能。我还没有找到可靠的模式,但简而言之,可能是这样的:

假设我们有一台计算机 Alice、一个 Wifi AP Bob 和另一个 Wifi AP/设备 Charlie。

Alice 可以 ping 通 Bob,Bob 可以 ping 通 Charlie,但是 Alice 无法 ping 通 Charlie。(“ping”表示能够获得 ping 响应)我已经禁用所有防火墙,并允许所有 ICMP 响应。

在Wireshark和tcpdump的帮助下,我推断出Alice发出的ARP请求(操作码1)数据包能够到达预定目的地Charlie,而Charlie发回的ARP响应(操作码2)数据包未能到达Alice。

哪些技术缺陷可能导致此类错误?

我该如何调试这种情况?

假设我使用 OpenWRT,所以我有一些程序控制,我该如何解决这个问题?

有趣的是,当我更改 Windows 8 PC 的名称时,这个问题得到了纠正。不确定这是否是事后诸葛亮的情况。

更新:AP/设备/PC 位于同一子网,使用桥接模式链接。

答案1

虽然我对 OpenWRT 的高级配置不是很熟悉(这是我的极客项目待办事项),但我的第一条建议是确保您没有在“Bob”上进行 NAT。如果 Alice 在 WAP 的 LAN 端,而 Charlie 在 WAN 端,那么 Alice 可以 ping Charlie,但反之则不行。这就是 NAT 提供的固有防火墙。

为了避免这种情况,您的所有 AP 都必须以某种形式的“桥接”模式或“接入点”模式运行。这意味着该设备或多或少充当数据包转发器 - 它不进行任何路由或数据包检查。在较便宜的路由器上实现此目的的最简单方法是禁用路由器中的 DHCP 服务器,然后将其中一个 LAN 端口连接到您的网络(同时确保路由器的 LAN IP 不会与您的实际网关冲突)。您将让 WAN 端口悬空。如果路由器抱怨(大多数不会,但有些会),请将 Internet 连接设置为静态 IP,并使用 223.255.255.254 之类的地址,子网掩码为 255.255.255.252,网关为 223.255.255.253。(琐事:这是最小可能大小的最后一个 C 类子网。)

另一种可能性是子网掩码不匹配。同一网络上的每台计算机都需要配置相同的子网掩码(当然还要位于同一实际网络中)。计算机使用子网掩码不仅确定 IP 广播地址,还确定是否应由网络堆栈处理收到的广播数据包(即,如果广播数据包的 IP 超出设备上配置的地址和子网掩码,许多设备将忽略该数据包。)

希望这至少能有所帮助。

答案2

什么原因导致无线网络中 ARP 响应数据包丢失?

没什么。如果我们目睹了正确的丢包,就没有理由优先丢弃它们。在存在故障的通信线路的情况下,ARP 数据包与 UDP、TCP 等没有什么不同。但是,由于您没有声称线路很慢,因此没有理由怀疑真正的丢包。

数据包无法到达预期目标的原因是它们被错误路由。但是,您指出,神奇消失的数据包是 ARP 数据包,它们不需要适当的路由,因为它们会自发填充其所属的整个子网。

因此,这些电脑(很可能)是两个不同子网的成员。ARP 数据包不会跨越网关,而它们之所以已丢弃它们会填满自己的子网,找不到响应者,然后消失,而不会穿过分隔两个不同子网的网关。

如果您使用名称而不是 IP 地址,那么属于两个独立子网的情况就会被掩盖。如果您使用 IP 地址,您会立即意识到这两台 PC 位于不同的子网中。因此我提出了上述问题。

您能解决这个问题吗?当然可以。您必须确定无法到达的子网的网关(我们称之为 G2),允许来自较大 LAN 的连接进入,然后指示整个 LAN 的网关(G1、紧跟调制解调器后面的网关或 ADSL 路由器,以其中一个为准)到此子网的路由不是通过其本身(G1),而是通过 G2。

相关内容