![無線網路中 ARP 回應資料包遺失的原因是什麼?](https://rvso.com/image/1452882/%E7%84%A1%E7%B7%9A%E7%B6%B2%E8%B7%AF%E4%B8%AD%20ARP%20%E5%9B%9E%E6%87%89%E8%B3%87%E6%96%99%E5%8C%85%E9%81%BA%E5%A4%B1%E7%9A%84%E5%8E%9F%E5%9B%A0%E6%98%AF%E4%BB%80%E9%BA%BC%EF%BC%9F.png)
我的區域網路 (LAN) 中有一個無線存取點 (AP) 網路。
網路中的某些 PC 可以從網路中的其他一些 PC/裝置獲得 ping 回應,但其他一些 PC/裝置則無法獲得 ping 回應。我還沒有找到可靠的模式,但簡而言之,它可能是這樣的:
假設我們有一台電腦 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 的廣播封包超出設備上配置的位址和子網路掩碼,許多設備將忽略該封包。)
希望這至少有幫助。
答案2
無線網路中 ARP 回應資料包遺失的原因是什麼?
沒有什麼。如果我們看到正確的資料包丟棄,那麼它們就沒有理由被優先丟棄。在通訊線路故障的情況下,ARP 封包與 UDP、TCP 等沒有什麼不同。但是,由於您沒有聲稱線路速度很慢,因此沒有真正的理由懷疑真正的資料包遺失。
資料包無法到達預期目標的原因是它們的路由錯誤。然而,您已經指出,神奇地消失的封包是 ARP 封包,它們不需要正確的路由,因為它們會自發性地填充它們所屬的整個子網路。
因此,這些電腦(很可能)是兩個不同子網路的成員。 ARP 封包不跨網關,原因之一是掉落是他們填滿了自己的子網,找不到響應者,然後消失而沒有穿過兩個不同子網的網關。
也就是說,如果您使用名稱而不是 IP 位址,則屬於兩個獨立子網路的部分將被封鎖。如果您使用 IP 位址,您會立即意識到兩台電腦位於不同的子網路中。因此我提出了上面的問題。
你能解決這個問題嗎?當然可以。您必須識別無法到達的子網路的網關(我們稱之為 G2),允許來自較大 LAN 的連接,然後指示整個 LAN 的網關(G1,緊鄰數據機後面的網關,或您的ADSL 路由器(以哪一個為準))到該子網路的路由不是透過其本身(G1),而是透過G2。