Wifi经常断连 - Ubuntu 20.04和Broadcom无线适配器

我最近刚安装了Ubuntu 20.04(干净安装,从Windows双启动),但是无线网络经常断开。之前在Windows和其他电脑上都很稳定,所以我不认为是路由器或实际的互联网连接有问题。
我尝试按照安装Broadcom无线驱动程序重新安装Broadcom驱动程序,建议使用bcmwl-kernel-source驱动程序,但这并没有解决问题。
我对Linux还不太熟悉,如果有人能帮忙查看一下链接的无线诊断脚本:https://paste.ubuntu.com/p/R4PMFVTvDT/ 非常感谢您的帮助!

我在22.04也遇到了同样的问题。通过手动选择2.4 GHz频段解决了它。它可能一直在尝试使用5 GHz频段而自己绊倒了。 - Kyle
10个回答

过去两个星期我也遇到了类似的情况,昨天(5月11日)我找到了一个解决方案,目前有效(双启动Ubuntu 20.04 / Windows,无线网卡Broadcom 4325)。

令人惊讶的是,我的问题并不是由于无线驱动程序或电源管理引起的(在之前的几天里尝试了很多方法,但没有改善),而是与我的计算机在本地路由器上的ARP条目过期有关(ARP代表地址解析协议,用于IP地址和MAC地址之间的转换)。

为了简洁起见(调查细节请参见本答案末尾):

  • 我的路由器的ARP条目超时时间为20分钟,
  • 对于我的计算机,它在逐渐减少直至过期(导致我每20分钟失去连接),
  • 对于其他设备也是如此,但它们的超时时间在过期之前会自动刷新。我进行了网络捕获以找出这些设备做了什么不同的事情,并发现它们发送ARP请求时超时时间会被刷新。

=> 出现了一个解决方案,我需要告诉我的计算机也这样做!(发送ARP请求)

解决方案的实施

发送ARP请求,我使用了arping,你可以从其软件包安装:
sudo apt install arping

当你启动它时,它会说它必须以 root 或具有 cap_net_raw 权限运行。 由于我不想以 root 启动它,所以我添加了该权限:

sudo setcap "cap_net_raw+ep" /usr/sbin/arping

我使用了以下命令向我的路由器发送一个ARP请求(请将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

这将使ARP请求每15分钟发送一次。

详细的调查过程

以下是我发现问题的更多细节:

  • 开发了一个小部件,用时间戳告诉我何时失去连接和何时恢复连接。
  • 运行tcpdump捕获,直到发生断开/重新连接(小部件的目的)。
  • 在捕获的数据中,发现了与问题时间相关的ARP消息。
  • 查看了我的pfSense路由器的ARP表,发现PC的超时条目一直在减少,直到过期;对于其他连接的设备,它们也会减少,但在某个时刻会重置为默认值(我这里是1200秒)。
  • 等待直到超时过期,以确认我在计算机上观察到了断开连接的症状(是的)。
  • 在路由器上进行tcpdump捕获,观察其他设备如何成功重置其超时:通过在超时之前发送ARP请求。
  • 按照上述说明安装arping,并向路由器发送了一个测试ARP请求:它将我的超时重置为1200秒,胜利!\o/
最后,我不知道为什么在使用Windows时从来没有遇到这个问题。 当检查ARP表时,我看到条目过期了,但立即被重置为20分钟,并且我看不到网络断开。
你可能还想知道如何检查ARP表。 如果你正在使用pfSense路由器,可以在子菜单“诊断> ARP表”中找到(要用英语翻译,我的菜单是法语)。 对于其他设备,你需要查看其文档。
但最后,即使你无法检查ARP表,你仍然可以尝试将该行插入到/etc/crontab中,并运行数小时/天。如果问题不再出现,那就是这个问题了 :-)
希望对你有帮助!

4好的回答。非常感谢。如果你运行 echo "*/15 * * * * \whoami` arping -c 1 `ip route show | grep -i 'default via'| awk '{print $3 }'`" |sudo tee -a /etc/crontab,配置行将自动附加到 /etc/crontab` 中,包括你的用户名和路由器IPv4地址。 - Yuri Sucupira

我遇到了同样的问题。在进行了一番谷歌搜索后,我通过检查 dmesg 找到了几个答案。所以,在运行以下命令之后:
# dmesg -w

我发现了这个错误信息:
wlan0: deauthenticated from c8:e7:xx:xx:xx:xx (Reason: 6=CLASS2_FRAME_FROM_NONAUTH_STA)

我在Linux WiFi: Deauthenticated Reason Codes中找到了错误的含义:

从未经认证的STA接收到类2帧 客户端在进行身份验证之前尝试传输数据。

在确定错误后,我需要了解为什么我的旧MacBook White会从我的AP中断(连接在线,但没有数据包进出)。
好吧,这个错误已经足够让我理解问题了。 这个错误是关于与接入点的身份验证错误,之后,我明白我的AP正在“踢”我的连接并拒绝来自Wi-Fi接口的数据包。
所以,让我们尝试一些东西。
也许如果我停止自动更改信道/频率,问题就解决了... 在将我的AP配置更改为静态信道(36)和频率(80Mhz)后,Wi-Fi接口停止掉线,问题解决了(目前为止还不错),因此使用Broadcom(BCM4321)的Wi-Fi连接不再不稳定。
我对这个错误有什么理解?
我猜固件在自动协商信道和频率后,认证方面存在一些代码问题,固件在连接真正完成与接入点的“握手”之前就发送了认证请求。
希望这个“解决方法”能帮助您解决问题。

谢谢这一步,尽管我看到的原因是1=未指定 :-( - Mike B

我采用了最佳答案和评论,并通过将路由器的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

根据检查您的日志,建议禁用wifi的电源管理,因为wl/b43驱动程序在这里描述, 然后编辑:/etc/NetworkManager/conf.d/default-wifi-powersave-on.conf
wifi.powersave = 2

[编辑] 在我的情况下,经过进一步测试发现,更改此参数使情况变得更糟,因为由于重复的WiFi扫描,WiFi的反弹越来越多...所以如果你有问题,不要使用这个(如果你使用wl驱动程序,你可能没有这个问题。在我的情况下,我使用b43)。

谢谢你查看我的日志。我刚刚尝试将此编辑应用到配置文件中。希望它能起作用。祝你修复无线网络问题一切顺利。再见。 - Yoomes Bond

我也遇到了同样的问题,
为了解决这个问题,我重新加载了无线内核模块。
sudo modprobe -r wl && sleep 5s && sudo modprobe -a wl

我遇到了同样的问题。我尝试了大部分那些复杂的解决方案,但都没有起作用。经过几个小时的调试,我发现问题出在使用了相同的SSID/网络来连接5GHz和2.47GHz频段,Ubuntu驱动程序无法正确处理这种情况。
你可以尝试访问路由器的IP地址(通常在标签上打印),然后将它们中的每一个更改为另一个SSID和信道。
更改SSID和信道取决于路由器的制造商,但以下是一个诺基亚路由器的示例操作指南:如何启用5GHz和2.4GHz的独立SSID
为2.4 GHz 设置一个单独的SSID:
(可以根据需要调整5 GHz 的过程。)

  • 使用无线连接或有线连接,通过网页浏览器连接到您的Nokia WiFi网络,链接地址可以是http://www.webgui.nokiawifi.com 或者 http://192.168.18.1/
  • 您将看到登录窗口。默认用户名为'admin'。默认密码在您的根Wi-Fi设备底部的贴纸上。
  • 登录后,点击顶部菜单中的"Network"。
  • 然后从左侧子菜单中选择"Wireless (2.4 GHz)"。

我也遇到了同样的问题。我有一张Broadcom 4313无线网卡,当它长时间下载大文件时,会断开连接。
到目前为止,以下方法解决了我的问题:

https://help.ubuntu.com/community/WifiDocs/Driver/bcm43xx

如果你需要一个快速指南,我建议通过先使用命令sudo modprobe -r drivernamegoeshere移除所有驱动程序,然后逐个添加它们,以查看哪个有效。
要获取驱动程序列表,请使用lsmod | grep cfg80211,然后逐个移除每个驱动程序,并使用sudo modprobe b43将其中一个(从b43开始)重新添加进去。到目前为止,这对我来说效果不错。

抱歉打扰了。在尝试了各种方法后,发现解决hp elitebook 640 g9在ubuntu上的问题似乎是更新BIOS。

我目前正在使用Ubuntu 20.04。由于一些问题,我使用了一个USB无线适配器,型号是https://www.tp-link.com/us/home-networking/usb-adapter/tl-wn823n/
由于我在Windows上双启动,并且这个无线适配器在那里正常工作,所以我期望它在Ubuntu上也能正常工作(更不用说网站上说它“兼容”Linux);然而,我的连接非常不稳定,经常断开。经过大量的研究和实验,包括构建backport-iwlwifi和内核库,改变wifi-power设置等方法,这些方法并没有真正解决我的问题。
事实证明,真正的问题出现在我的芯片组的KM驱动程序上,即RTL8xxxu。您可以通过检查您的KM驱动程序来确认。
sudo lshw -c network

查看配置。按照https://www.ravendevelopers.com/blog/2020/09/installing-wireless-usb-linux-rtl8xxxu-chipset上的步骤操作后,我的连接突然恢复了,并且非常稳定。所以如果上述方法不能解决你的问题,也许你可以安装另一个驱动程序来替换默认的驱动程序。

遇到了同样的问题。我觉得这与wifi-power-save-on功能有关。如果我关闭它,Wi-Fi接口就会进入飞行模式,也就是根本没有Wi-Fi...真是好极了。
所以,最简单和愚蠢的解决办法就是在后台运行无休止地ping路由器。这就足够让Wi-Fi保持活跃。