为什么电脑上的程序可以要求你的无线网卡列出附近的网络?

通信网络

648人已加入

描述

现在大家的电子设备基本上都用上了Wi-Fi 、蓝牙,线设备也越来越流行,再也不用面对杂乱无章的线缆,这似乎是一件好事,但无线也带来了一个又一个的问题,本文作者曾经是一个无线的倡导者,本文作者分析了无线存在的各种问题,说明了为什么他已经“叛变”,重回有线阵营,他说,对wifi、蓝牙和相关协议了解得越多,他就越相信,无线往往比有线更糟糕。

我曾经是一个反对各种线缆的斗士。我讨厌杂乱无章的电线,而且我还有不自觉地咬耳机线的坏习惯。但当我遇到一个又一个无线带来的棘手错误时,尤其是在这段远程工作期间,我的观念改变了,对wifi、蓝牙和相关协议了解得越多,我就越相信,无线往往比有线更糟糕。

举个例子:大多数人,当他们的视频通话出现卡顿时,都会怪他们的互联网服务提供商。这是可以理解的,因为大多数互联网服务提供商都是价格过高的寡头垄断者,他们的软件很难用,客户服务也很糟糕。然而,当我每次我帮助别人搞清楚他们的网络连接问题的源头,罪魁祸首往往都是他们的wifi。而通常情况下,最简单的解决方法就是接根网线。

Wifi(还有蓝牙等)通过让你觉得 “它就是好用 ”来骗你。但如果你调查一下,你往往会发现,无线链接是在降级的状态下运行的,就像CPU的降频,其性能比同等的有线链接差很多。由于这种降级是悄无声息发生的,所以看上去往往不是无线的问题,相反,你很可能会得出结论,是你的设备/软件/自己的问题。

我一次又一次地看到人们解决一些与无线相关的问题,然后说:“哇,我不知道这能好多少!”

最近,我终于怒气冲冲地把办公桌上的所有无线设备都换成了有线设备。虽然我不得不在线缆管理上投入一些资金(并努力克服我咀嚼耳机线的习惯),但我能够达到和无线几乎同样的整洁程度,而且可靠性、质量和速度都要好得多。我再也不用担心我的设备无法配对、电池耗尽,或者在直播演讲时出现卡顿,大大降低了设备带来的痛苦。

管理我桌上的线缆。

下面的线缆管理较少。

为了说明我所说的痛苦程度,下面我将介绍我在处理无线协议上遇到的一些微妙的、难以察觉的但却很严重的问题。如果你觉得我说的有道理,你也可以试一下放弃无线,你也可以弄清楚你是否已经成为无线陷阱的受害者。

Wifi

干扰。如果多个无线网络在同一个 “频道”(无线电频段)上运行,它们的传输可能会相互干扰。当这种情况发生时,你的设备需要重新发送相同的信息,这将使你的wifi速度变慢。

你可能认为这可以通过让路由器自动找出最不容易受到干扰的信道来解决,但很多路由器似乎在这方面做的相当糟糕。(另外,旧的2.4GHz wifi协议只允许使用三个不重叠的信道)。

这意味着在密集的地区(如公寓楼),路由器经常会选择一个不好的信道,最后互相干扰。如果你的路由器或设备遇到干扰,它没有办法通知你,所以只有当你知道你的路由器 “应该 ”有多快,并注意到它比较慢时,你才会知道。

死角。如果你离路由器太远,你的电脑可能无法稳定地接收到路由器发送的信号。多远是 “太远 ”也受到很多因素的影响,包括墙壁或天花板。除非你很了解无线电波如何与建筑材料相互作用,否则很难预测你的死角在哪里。

最糟糕的是,许多死角并不是完全死的:你的电脑和路由器会在放弃之前多次尝试重传每个数据包,而且往往最终会通过。如果这就是你遇到的情况,这就不是死角,这是一个 “慢区”,这里能连上网,但非常不稳定。

当然,除非你密切关注你的网络性能统计,以及它们与你的空间位置的关系,否则你永远不会注意到一个慢区。如果你注意到了什么,那就是有时你的网络会随机地比其他时候更糟糕。

轮询(Polling)。电脑上的任何程序都可以要求你的无线网卡列出附近的网络。这将导致它进入 “轮询模式”,在这种模式下,它花费较少的时间传输数据,而更多的时间接收路由器广播他们的网络信息(路由器不能在同一时间传输和接收)。因此,它会导致突然爆发的网络延迟,例如,会导致你的视频通话卡顿或停止几秒钟。

大多数程序员没有意识到无线网络轮询会影响网络性能,所以他们要求操作系统疯狂地进行轮询。我已经被这种情况折磨过很多次了。

最恶劣的例子,是当我注意到我的视频通话有时卡顿有着奇怪的规律频率。下面是我追查罪魁祸首的曲折过程:

我每隔一秒就给Ping的路由器一次,持续大约10分钟,然后把输出结果用Excel绘制出来,确认慢速ping的间隔正好是30秒。这让我猜测可能是软件问题。

我在Facebook上求助,有人推荐启用macOS无线调试日志。

我启用了调试日志,并注意到几个应用程序,当我打开它们时,程序会请求网络扫描,有时与增加的ping延迟相关。

把范围缩小到这几个应用后,我在AskDifferent(苹果相关的问答社区)上询问如何阻止这些软件这样做。

在AskDifferent上有人将问题追踪到Qt上,Qt是一个制作用户界面的软件框架,被数百万用户的应用所使用。

Qt包含了一个组件,它每隔30秒就会对网络进行一次轮询,每30秒就会导致几乎所有使用网络的Qt应用降低你的wifi性能。

已经有多个关于这个问题的bug报告,其中一个被工程师标记为 “已解决”,因为他们允许用户使用一个环境变量来禁用轮询。

当然,这是一个没啥用的 “解决方案”,因为大多数用户不会意识到他们的wifi降级了;意识到的用户也不会意识到这是Qt的错;哪怕你找到了问题所在,仍然很难在谷歌上找到合适的修复方法(更不用说实现它了,除非你会编程)。

这种行为是如此的对用户不友好,而 “解决方案 ”又是如此的可笑,似乎很可能是Qt的开发者们没有意识到问题的严重性,我猜它毁掉了大约一百万人的视频通话体验,因为,它影响了已经被下载了7500万次的qBittorrent。这一百万人中的大多数人可能还没有足够的技术来弄清楚如何 “将QT_BEARER_POLL_TIMEOUT环境变量设置为-1”。(幸运的是,在2017年,在最初的bug报告三年后,他们终于意识到他们应该停止轮询并以正确的方式修复bug)。

Qt是最严重的问题,但它不是唯一的问题。即使是macOS也有一个bug,当你打开Spotlight时,同样的事情也会发生(我经常在视频通话时这样做,如果有人让我看一个特定的文件,或者如果我想去在视频通话的时候去开个网页)。我不得不通过禁用Spotlight结果类型来解决这个问题,直到我发现是哪一个类型导致了这个问题。所以看来连苹果自己的开发者都没有意识到wifi轮询是一种危害。

蓝牙音频

高延迟。大多数蓝牙耳机都有150-300ms的延迟(我的电脑从网络接收音频到耳机发出声音之间的时间)。这意味着,如果我和纽约的朋友聊天,音频数据从他们到我的电脑需要50ms,而从我的电脑到我的耳朵需要200ms-4倍的时间。由于高延迟破坏了谈话的自然流程,我希望尽可能地消除延迟。

如果蓝牙耳机支持正确的 “编解码器”,比如 “AptX低延迟”,就有可能实现低延迟的蓝牙耳机。当然,除了理论上支持编解码器外,它们还得同意你的电脑使用它,这有时会失败(检查正在使用的编解码器的选项埋藏在各种隐藏的菜单和设置中)。

低质量。与编解码器问题有关,许多蓝牙设备在关闭麦克风时,会播放高质量的音频,但在打开麦克风时,就会降格为低质量得多的音频。如果你有一个蓝牙耳机,你可以自己测试一下:用它播放音乐,然后打开你的麦克风设置到显示麦克风输入音量的页面。你可能会听到音频被切断一秒钟,然后以较低的质量返回。即使是你可能期望的高端设备也会发生这种情况,比如我的Airpods Pro + 2018年的Macbook Air)。

蓝牙的其他问题

蓝牙bug。尽管现在几乎所有的电脑都内置了蓝牙,但许多蓝牙配件还附带了使用不同协议的专有适配器。(例如Jabra耳机、这款耳机麦克风。)这些适配器显然使用了不同形式的无线传输,因为蓝牙耗电量大,增加了延迟,而且可靠性较低。

例如,在我的Mac的内置蓝牙上,我的鼠标(罗技MX Master)显示出明显的卡顿,跳动,而不是平滑移动。我在三台不同的Mac上都遇到过这种情况,所以这似乎很可能是一个软件问题。当我切换到使用罗技的适配器时,卡顿就消失了。

同样,当连接到 Mac 蓝牙时,我的 Jabra Evolve 75 耳机会经常出现麦克风或声音音量降低的情况。它(大多数情况下)在自己的适配器上工作正常。

我不知道该把这些问题归咎于Jabra/Logitech还是苹果(或蓝牙标准机构)。但无论如何,当设备制造商放弃蓝牙,转而使用其他需要每个设备配备一个适配器的协议时,我们知道蓝牙已经失败了。

蓝牙最初的目标是将不同的无线设备统一在一个无线电和协议中,就像哈拉尔蓝牙王(蓝牙这个名称的来源)统一丹麦,终结海盗时代一样。然而在现实中,我最近不得不买了一个USB集线器,只为我的键盘、鼠标、耳机和麦克风的适配器。

可靠性。即使是专有适配器,无线设备的可靠性也远不如有线设备。例如,我在上文中写道,我的罗技MX Master在切换到专有适配器后工作正常,但这并不完全正确:它工作了一段时间,然后有一天,它又开始无缘无故地卡顿。那一天,我终于下定决心,扔掉了桌子上的无线设备。

我遇到的其他蓝牙bug,需要我每周取消配对和重新配对几次。例如,我的AirPods有时会 “不同步”,这样一个耳机比另一个提前几毫秒播放音频,造成一种奇怪和非常令人不愉快的回声效果。

干扰。可靠性差的一个可能原因是蓝牙和2.4GHz wifi会相互干扰。就像wifi的干扰一样,如果你的设备遇到干扰,永远不会得到设备的警告;你只会感受到突然的卡顿。

充电。这不是蓝牙本身的错,但使用太多无线设备的一个缺点是,它真的很烦人,要记住让设备全部充电。我往往在关键的时候没电了,例如在视频通话时。

结论

这些问题大多有几个共同点。

不是完全不能用,而是体验不好。这意味着我没有立即注意到问题的存在。

更加复杂的是,我不知道这个设备 “应该 ”如何工作,所以我花了很长时间才注意到它处于降级的状态。

即使我意识到了问题,也很难或不可能解决它,因为我不知道正确的方法(或者解决方法不存在)。

我希望我的设备是可预测的,具有一致的性能。无线协议本质上更复杂(因为许多设备共享同一网络空间),并且有更多不同的出问题的方式,所以它们比有线更难预测。对我来说,无线带来的便利性往往不值得付出这种代价。

我还是会在明显值得的情况下使用无线设备,例如,我的笔记本电脑用wifi,因为需要拿着它到处走,我的手机用无线充电器,因为我并不追求充电速度。但对于严肃的工作来说,我会花时间去摆弄电缆布线,给所有东西接上线。

这让我想知道,如果我们把目前花在无线上的10%的精力,投入到巧妙的有线解决方案上,世界会是什么样子。我敢打赌,很多依赖无线的活动,比如视频通话、游戏等,会变得更加愉快。
       责任编辑:pj

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分