Linux WiFi 模組使用及故障排查整理文檔
- 1. STA 模式下 WiFi 延時不穩定問題
- 解決方法:
- 2. Power Saving 機制說明
- 3. AP 模式下 WiFi 設置
- 4. RTL8821CS AP 模式下 Windows 客戶端異常斷開問題
- 問題描述
- 問題原因
- 解決方案
- 步驟 1:修改 dnsmasq 配置
- 步驟 2:重啟 dnsmasq 服務
- 步驟 3:Windows 客戶端釋放并更新 IP
- 步驟 4:Wireshark 抓包驗證
- 技術背景說明
- 附加建議
1. STA 模式下 WiFi 延時不穩定問題
當 WiFi 配置為 STA 模式并連接路由器后,Ping 路由器時發現數據傳輸延時不穩定。可通過以下方法解決:
解決方法:
-
關閉驅動中的低功耗模式
- 修改
Makefile
中配置:CONFIG_POWER_SAVING = n
- 修改
-
在開機時關閉 WiFi 的省電模式
- 添加開機執行命令:
iw wlan0 set power_save off
- 需要在 Buildroot 中啟用 iw 命令支持:
BR2_PACKAGE_IW=y
- 添加開機執行命令:
-
避免 WiFi 自動掃描引起的干擾
2. Power Saving 機制說明
參考 Arch Wiki: Wireless Power Saving
- 盡管某些 Atheros ath9k 單芯片(如 AR9280 以后)默認啟用動態省電,但部分設備(如 AR9285)仍可能出現省電未啟用的情況。
- 開啟省電可能會出現如下錯誤:
iw dev wlan0 set power_save on
3. AP 模式下 WiFi 設置
使用 hostapd
和 udhcpd
配置 WiFi 為 AP 模式,詳細教程參考:
- https://blog.csdn.net/wit_732/article/details/121038477
4. RTL8821CS AP 模式下 Windows 客戶端異常斷開問題
問題描述
- 在 Windows 平臺上使用 RTL8821CS 芯片 AP 模式時,TCP Socket 會異常斷開。
- Android 和 iOS 平臺表現正常。
- 使用 Wireshark 抓包發現:客戶端試圖請求一個非 DHCP 服務器分配的 IP 地址。
問題原因
Windows 客戶端可能保存舊 IP 地址并嘗試續租,而當前的 DHCP 服務器(dnsmasq)未曾分配過該 IP,導致請求失敗和連接中斷。
解決方案
步驟 1:修改 dnsmasq 配置
編輯 /etc/dnsmasq.conf
或相關目錄下配置文件,添加以下配置:
dhcp-authoritative
作用:將 dnsmasq 設為權威 DHCP 服務器,強制客戶端使用其分配的 IP。
步驟 2:重啟 dnsmasq 服務
sudo systemctl restart dnsmasq
# 或
sudo service dnsmasq restart
步驟 3:Windows 客戶端釋放并更新 IP
在 Windows 命令行中執行:
ipconfig /release
ipconfig /renew
確保獲取的 IP 屬于 DHCP 服務分配的子網。
步驟 4:Wireshark 抓包驗證
過濾條件:udp.port == 67 || udp.port == 68
確認:
- 客戶端請求舊 IP 時,服務器是否返回 NAK。
- 客戶端是否重新發起 DHCP Discover 并正確獲取 IP。
技術背景說明
-
DHCP 權威模式(dhcp-authoritative):
使服務器在遇到非法或未知 IP 請求時,返回 DHCP NAK,強制客戶端重新申請新 IP。 -
系統差異:
Android/iOS 更主動釋放舊 IP,而 Windows 更傾向于續租舊 IP,因此更依賴服務器的“權威性”。
附加建議
-
縮短租約時間(例如設置為 12 小時):
dhcp-lease-time=43200
-
設置靜態 IP 分配(對特定設備):
dhcp-host=MAC地址,IP地址
通過上述方法,可以有效解決 Windows 客戶端在 RTL8821CS AP 模式下 TCP Socket 異常斷開的問題。