我最近刚刚安装了 Ubuntu 20.04(全新安装,从 Windows 双启动),但 Wi-Fi 一直断线。之前在 Windows 和家里的其他电脑上都很稳定,所以我不认为这是路由器或实际互联网连接的问题。
我尝试重新安装 Broadcom 驱动程序安装 Broadcom 无线驱动程序它推荐使用 bcmwl-kernel-source 驱动程序,但这并没有帮助解决问题。
我对 Linux 游戏还很陌生,所以如果有人能看一下链接的无线诊断脚本:https://paste.ubuntu.com/p/R4PMFVTvDT/
非常感谢您的帮助!
答案1
我从两周前就遇到过类似的情况,昨天(5 月 11 日)我找到了一个解决方案,到目前为止效果很好(双启动 Ubuntu 20.04/Windows,无线网卡 Broadcom 4325)。
令人惊讶的是,我的问题不是由于无线驱动程序或电源管理(前几天尝试了很多方法,但没有改善),而是与我的计算机在本地路由器上过期的 ARP 条目有关(ARP 代表地址解析协议,它对IP地址和MAC地址进行转换)。
简而言之(调查细节在本答案的末尾):
- 我的路由器的 ARP 条目超时时间为 20 分钟,
- 对于我的电脑来说,它一直在减少直到到期(这让我每 20 分钟就失去一次连接),
- 其他设备也一样,但这些设备会在到期前自动刷新。我捕获了网络,以了解这些设备的不同之处,发现当它们发送 ARP 请求时,它们的超时时间会刷新。
=> 出现了一个解决方案,我必须告诉我的电脑也这样做!(发送 ARP 请求)
解决方案的实施
为了发送 ARP 请求,我使用了阿尔平您可以从其包中安装:
sudo apt install arping
当你启动它时,它会提示必须以 root 身份运行,或者使用cap_net_raw功能。因为我不想以 root 身份启动它,所以我添加了此功能:
sudo setcap "cap_net_raw+ep" /usr/sbin/arping
我使用以下命令向我的路由器发送一个 ARP 请求(将 IP 地址替换为您相关的 IP 地址):
arping -c 1 192.168.1.1
然后我希望此命令每 15 分钟运行一次,以定期刷新 ARP 条目。这可以通过编辑文件来实现/etc/crontab:
sudo vi /etc/crontab
并在文件末尾添加此行:
*/15 * * * * <username> arping -c 1 192.168.1.1
这将使得每 15 分钟发送一次 ARP 请求。
详细调查流程
以下是我发现此问题的详细信息:
- 开发了一个小部件,用时间戳告诉我连接何时丢失以及何时恢复。
- 运行 tcpdump 捕获直到发生断开连接/重新连接(小部件的目的)。
- 在捕获中,发现问题时间附近的ARP消息。
- 查看了我的 pfSense 路由器的 ARP 表,发现我的电脑的超时条目一直在减少,直至到期;对于连接的其他设备,它也减少了,但在到期之前的某个时间点,它会重置为默认值(在我的情况下是 1200 秒)。
- 等到到期确认我观察到我的计算机上出现断开连接的症状(是)。
- 在路由器上进行 tcpdump 捕获,查看其他设备如何成功重置其超时:通过在超时之前发送 ARP 请求。
- 按照上述说明安装 arping,并向路由器发送测试 ARP 请求:它将我的过期超时重置为 1200 秒,胜利!\o/
最后,我不知道为什么在使用 Windows 时从未遇到过此问题。检查 ARP 表时,我看到条目也已过期,但随后立即重置为 20 分钟,我看不到网络断开连接。
您可能还想知道如何检查 ARP 表。如果您使用的是 pfSense 路由器,则可以在子菜单“诊断 > ARP 表”中找到它(要翻译成英文,我的菜单是法语的)。对于另一台设备,您必须检查其文档。
但最后,即使你无法检查 ARP 表,你仍然可以尝试插入该行/etc/crontab并运行几个小时/几天。如果您的问题没有再次出现,那么这就是问题所在 :-)
希望这可以帮助 !
答案2
我遇到了同样的问题。经过一番谷歌搜索,我在检查后找到了一些答案dmesg
。因此,运行后:
# dmesg -w
我发现这个消息错误:
wlan0: deauthenticated from c8:e7:xx:xx:xx:xx (Reason: 6=CLASS2_FRAME_FROM_NONAUTH_STA)
我发现错误的含义是Linux WiFi:取消认证的原因代码:
从未经身份验证的 STA 客户端接收的 2 类帧在经过身份验证之前尝试传输数据。
识别错误后,我需要了解为什么我的旧 MacBook White 会受到 AP 的干扰(连接在线,但没有数据包进/出)。
好吧,这个错误足以让我了解问题所在。这个错误与接入点的身份验证错误有关,之后我了解到我的 AP 正在“踢出”我的连接并拒绝来自 Wi-Fi 接口的数据包。
那么,让我们尝试一下。
如果我停止自动更改频道/频率,也许问题就解决了... 将我的 AP 配置更改为静态频道 (36) 并将频率更改为 (80Mhz) 后,Wi-Fi 接口停止掉线,问题就解决了(到目前为止一切顺利),因此使用 Broadcom (BCM4321) 的 Wi-Fi 连接不再不稳定。
我对这个错误有何理解?
我猜测固件在自动协商信道和频率后的身份验证方面存在一些代码问题,固件在连接真正完成与 AP 的“握手”之前发送身份验证请求。
我希望这个“解决方法”能帮助您解决问题。
答案3
我采纳了最上面的答案和评论,并通过将路由器的 IP 查找移到 cron 运行的脚本中对其进行了改进。这样,即使您使用多个不同的 wifi 网络,解决方案也能发挥作用。
将以下内容放入脚本中(即/home/<username>/bin/arping-router.bash
):
arping -c 1 `ip route show | grep -i 'default via'| awk '{print $3 }'` | head -n 2 | logger
这也会将该事件记录到系统日志中,以便您可以确认它正在运行。
您还需要执行以下操作:
chmod +x /home/<username>/bin/arping-router.bash
sudo apt install arping
sudo setcap "cap_net_raw+ep" /usr/sbin/arping
sudo vi /etc/crontab
# Add this to the end of the file:
*/15 * * * * <username> /home/<username>/bin/arping-router.bash
答案4
我也遇到了同样的问题,
为了修复,我重新加载了无线内核模块
sudo modprobe -r wl && sleep 5s && sudo modprobe -a wl