为什么大多数操作系统都对 Wifi 普遍采用“扫描/选择/连接”模型?

为什么大多数操作系统都对 Wifi 普遍采用“扫描/选择/连接”模型?

昨天在 Unix-Linux 论坛上提出了一个问题关于如何以不太不稳定的方式将 Linux 笔记本电脑连接到我的个人 IPhone 热点。除了我自己的解决方法

但在这里,我想从更理论的层面提出这个问题。我熟悉的所有操作系统,主要是各种版本的 Linux 以及 Windows,都使用我所说的“扫描/选择/连接”模型来建立 WiFi 连接。所有这些系统的用户界面都以某种方式将可用的 Wifi 网络列表(从扫描过程中编译而来)显示在屏幕上,邀请用户从中进行选择,然后提示输入凭证(密码),如果验证通过,则允许并建立连接。这无疑是绝大多数 WiFi 连接用户交互的理想最佳点。

但是,请考虑一下 iPhone 个人热点用例。用户拥有一部 iPhone 和一台运行某些操作系统(比如 Linux,但也可以是 Windows)的笔记本电脑。在没有 Wi-Fi 的环境中,用户经常需要使用 iPhone 作为笔记本电脑的互联网提供商。

在这个用例中,用户拥有这两台设备。他们知道他们的 iPhone 热点的 ID 和密码。应该可以编写某种 shell 脚本(或 Windows 中的批处理文件),提供这两个数据项,并告诉他们的系统将其网络从它试图指向的任何网络(如果没有 wifi 则会失败)切换到用户知道在附近并且正在运行的 iPhone。在这种情况下,扫描应该不是必要的,而且会使整个过程更加令人沮丧。在我的场景中,连接尝试将成功或失败并相应地报告。

我在互联网上搜索过针对此用例的普遍接受的答案,但没有找到任何权威的答案。我不知道为什么不。有人能为我解释一下为什么这个问题一般不发表,或者告诉我一个可以解答这个问题的地方吗?

一个相关的问题是:如果 iPhone 热点没有出现在尝试连接的计算机的扫描列表中,那么尝试任何此类脚本是否一定会失败?

答案1

这是可能的,但仍然需要扫描,因为计算机必须找出哪个频率网络可用。

例如,NetworkManager 将每个 Wi-Fi 网络保存为“连接配置文件”,您可以随时激活它,例如使用nmcli con up <name>。但无论何时这样做,它仍然需要搜索所有信道以查找提供该 SSID 的任何接入点 - 其中可能有多个,并且/或者它们可能具有与上次不同的功能。(您的热点每次启用时都会找到一个新信道,因此这不是计算机可以记住。)

可能不过,您仍可以实现更快连接的目标,因为 NetworkManager 会先断开与旧网络的连接,然后再寻找新网络。通常,当您在某个特定频道上积极使用网络时,Wi-Fi 适配器不能过于积极地扫描其他频道上的网络,因为它无法在此期间发送/接收数据(例如,请参阅游戏玩家的各种帖子,询问如何禁用后台扫描,因为它们会导致意外延迟)——并且它需要一次检查很多频道。这至少是可用网络在列表中显示缓慢的原因之一。(话虽如此,在当前版本的 GNOME 中打开网络列表确实会触发立即扫描——但“nmcli”等效项不会。)

相关内容