1. 前言

在前一篇博客中,我用 88x2bu 网卡在 Ubuntu 上成功开启了 Wi-Fi 热点,信号满格、SSID 可见——但手机就是连不上,密码正确却一直转圈。切换到 STA 模式连上外部热点后,又是另一种煎熬:连接成功,ping 百度却死活不通。起初以为是驱动有 Bug、内核版本不对,折腾一圈才发现——问题不在硬件,而在 7 层网络协议栈里几个不起眼的配置项。

当然,不是 OSI 7 层的每一层都会出问题。真正在实际场景中频繁踩坑的,往往集中在 3、4 层。这篇文章不会摊大饼式地罗列 7 层百科,而是从我的踩坑经历出发,配合 3 张 Mermaid 架构图(拓扑图、数据包流向图、分层决策树),把最常见的故障模式串联成一张可执行的排查地图。

如果你也在和 RTL8812BU / RTL8822BU 较劲或者遇到类似的Wi-Fi连接问题,希望这篇能帮你少走弯路。创作不易,恳请大家点赞、关注。谢谢!

1.1 典型症状

在Ubuntu系统中使用 Realtek 88x2bu 芯片组的USB Wi-Fi适配器创建Wi-Fi热点时,手机连接失败的几种表现形式:

编号 症状 根因可能性
1 手机完全搜索不到热点SSID 驱动不支持AP模式 / 信道问题
2 搜索到热点,输入密码后持续转圈 DHCP被防火墙拦截 / WPA握手失败
3 连接成功显示Wi-Fi图标,但无法上网 NAT未配置 / IP转发未开启
4 连接后立刻断开 电源管理 / 信号强度不足
5 连接成功,能ping通网关但无法访问外网 DNS配置错误 / 上游接口故障

2. 开发环境介绍

本系列的所有实验和踩坑均基于以下环境,后续会迁移到嵌入式 Jetson Nano 平台上继续折腾。

  • Host OS:Ubuntu 22.04 LTS (Jammy Jellyfish)
  • 内核版本:5.15.x(HWE 内核)
  • 网卡芯片:Realtek RTL8822BU(USB Vendor ID 0bda:b812
  • 网卡硬件:88x2bu USB Wi-Fi 适配器,双频 2.4GHz + 5GHz,2×2 MIMO
  • 后续迁移目标:NVIDIA Jetson Nano(ARM64,Linux-4.9内核)

3. 网络拓扑与数据流

3.1 典型拓扑

Ubuntu 主机内部

NAT 转换
IP 转发

上行链路

Wi-Fi 信号
2.4GHz / 5GHz

DHCP 请求 / DNS 查询

🌐 互联网 (Internet)

📡 eth0
有线网卡 / 上游接口

🖥️ Ubuntu 主机

📶 wlan0
88x2bu USB Wi-Fi 适配器
AP 模式

📱 手机
客户端设备

图解:上图展示了一个典型的「Ubuntu 做 Wi-Fi 热点」的网络拓扑。整个系统分为三个区域:

  • 外部互联网:通过 eth0(有线网卡或另一块 Wi-Fi)连接到 Ubuntu 主机,作为热点的上游出口。
  • Ubuntu 主机内部:虚线框内是 Ubuntu 本机,插入了 88x2bu USB 网卡(wlan0),运行在 AP 模式hostapd 负责广播 Wi-Fi 信号,dnsmasq 负责给连入的手机分配 IP 地址和提供 DNS 服务。NAT 转换和 IP 转发打通了 wlan0 ↔ eth0 之间的数据通道。
  • 手机客户端:通过 Wi-Fi 信号连接到 wlan0,发送 DHCP 请求获取 IP,再通过 Ubuntu 主机的 NAT 访问外网。

重点理解:实线箭头()表示数据主动发送方向,虚线箭头(-.->)表示请求/响应回传路径。排查问题时,需要关注数据在每一跳是否被正确转发。

3.2 数据包流向(手机访问百度为例)

Wi-Fi 帧
L2 封装

IP 包
L3 处理

查路由表
L3 转发

以太网帧
L2 封装

公网路由

响应数据
原路返回

conntrack
反向 NAT

Wi-Fi 帧

Wi-Fi 帧

📱 手机
发送 HTTP 请求

📶 wlan0
Wi-Fi 帧接收
(802.11 解封装)

🔄 iptables NAT
源地址转换
(192.168.x.x → 公网IP)

🔀 路由决策
转发到上游接口

📡 eth0
发出数据包

🌐 互联网
百度服务器

理解这个数据流对排查问题至关重要:数据在任何一跳被阻断,都会表现为"无法连接"

图解:这个流程图展示了手机访问百度时,数据包在每一跳如何被逐层处理后送达互联网,以及响应数据如何原路返回。

出站路径(上行,实线箭头)

  1. 手机 → wlan0:HTTP 请求被封装为 Wi-Fi 帧(802.11 L2),通过无线信道发送到 88x2bu 网卡。
  2. wlan0 → iptables NAT:Wi-Fi 帧解封装为 IP 包,内核协议栈提取源地址 192.168.x.x,交给 NAT 模块做源地址转换,替换为 Ubuntu 主机的公网/上游 IP。
  3. iptables NAT → 路由决策:转换后的 IP 包查找路由表,决定从哪个接口发出(通常是默认路由指向的 eth0)。
  4. 路由决策 → eth0 → 互联网:IP 包封装为以太网帧,从上游接口发出,经公网路由到达百度服务器。

回程路径(下行,虚线箭头)
5. 互联网 → eth0 → conntrack:百度响应数据到达 eth0conntrack(连接跟踪模块)根据之前记录的 NAT 映射关系,找到对应的原始私有 IP。
6. conntrack → wlan0 → 手机:恢复目标 IP 为 192.168.x.x,封装为 Wi-Fi 帧发送给手机。

排查价值:如果某条边被阻断(例如 NAT 规则缺失导致第 2→3 步失败,或 UFW 拦截导致第 6→7 步回包丢失),对应的服务就会中断。追踪每一跳能快速定位故障点。

4. OSI 7层逐层分析

4.1 OSI 7层与Wi-Fi热点关系总览

在深入逐层分析之前,先建立全局视角——Wi-Fi热点是如何映射到OSI 7层模型的:

OSI层 层名称 Wi-Fi热点对应组件 核心作用 本章聚焦风险
L1 物理层 88x2bu芯片射频、天线、USB总线 电磁波信号的调制/解调、信道选择、发射功率 驱动不支持AP、供电不足、信道不可见
L2 数据链路层 802.11 MAC层、hostapd Beacn广播 帧封装、Beacon广播、Association关联、加密算法声明 TKIP被拒、Beacon未广播、PMF不兼容
L3 网络层 DHCP(dnsmasq)、NAT(iptables)、路由表 IP地址分配、私有/公网地址转换、转发路由 DHCP被拦截、ip_forward未开启、NAT缺失
L4 传输层 UFW防火墙、conntrack连接跟踪 UDP/TCP端口过滤、连接状态匹配 67/53端口被封、回包被丢弃
L5 会话层 Wi-Fi关联会话、PSM省电模式 连接维持、空闲断开、重连管理 关联超时、省电模式断开、max_sta限制
L6 表示层 EAPOL帧处理、WPA2密钥协商 PSK→PMK→PTK推导、MIC校验、GTK分发加密 驱动EAPOL Bug、4次握手失败
L7 应用层 dnsmasq DNS、Captive Portal检测 域名解析、网络可达性判断 DNS不可达、"无网络"误判

4.2 分层排查决策树

❌ 搜不到

✅ 能搜到

❌ 认证失败
反复提示密码

✅ 认证通过

❌ 一直转圈

✅ 获取到IP

❌ 无法上网

✅ 可以上网

❌ 频繁断开

✅ 稳定

🔍 手机连接热点失败

能搜到
SSID 吗?

L1 物理层
驱动 / 信道 / 供电

输入密码后
能通过认证吗?

L2/L6 链路层+表示层
加密协商 / WPA握手

能获取到
IP 地址吗?

L3/L4 网络层+传输层
DHCP被拦截 / NAT缺失

能访问
互联网吗?

L7 应用层
DNS / Captive Portal

连接稳定吗?

L5 会话层
电源管理 / 信号

✅ 问题解决!


5. 小结

回到前言中提到的那两个问题——“AP 模式下手机搜得到热点却一直转圈”和”STA 模式下连上外部热点却 ping 不通百度”——它们恰好对应了决策树中两条不同的排查路径:

问题 对应OSI层级 问题初步分析
AP 模式:手机连不上,一直「正在获取 IP」 L3/L4层 UFW 防火墙拦截 DHCP OFFER(L4)
STA 模式:连上外部热点,ping 百度不通 L7层 DNS 解析失败(L7)
在下一期我会带大家如何一步步分析这两个问题,感谢阅读!
Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐