WiFi Direct 技术如何支撑 NetShare 的网络共享
什么是 WiFi Direct
WiFi Direct 是 WiFi Alliance 从 2010 年开始推广的一套协议,让两台或多台设备不经过中间路由器直接建立点对点的无线连接。它的典型应用场景包括:Android Beam 文件传输、WiDi 屏幕镜像、游戏对战、近场打印等。Android 4.0(Ice Cream Sandwich)开始原生支持,iOS 上对应的技术叫 AirDrop。
在底层,WiFi Direct 不是一个新的物理层协议,它跑在标准的 802.11 之上。设备之间通过 P2P Group 来组织角色:
- Group Owner(GO):组主人,相当于一个"虚拟路由器",负责分配 IP 地址、维护网络拓扑
- Client(P2P Client):普通客户端,发现 GO 后请求加入 P2P 网络
一个典型的 WiFi Direct 会话流程:
- 设备发现:设备通过 Wi-Fi Direct 的服务发现协议(基于 mDNS 和 DNS-SD)找到附近支持 P2P 的设备
- 角色协商:通过 P2P Group Owner Negotiation 确定谁当 GO、谁当 Client
- 握手认证:WPA2-Personal 加密握手,GO 生成随机密码
- IP 分配:GO 通过内置 DHCP 服务器给 Client 分配 192.168.49.x 网段的地址
- 数据传输:P2P 网络内直接通信,不经过外网
WiFi Direct 和系统热点的关系
WiFi Direct 组主人和系统热点在某些场景下看起来很像——都是广播一个 SSID,其他设备扫描后连接。但它们在 Android 系统内部走的是完全不同的代码路径:
| 维度 | 系统热点 | WiFi Direct GO |
|---|---|---|
| 创建入口 | WifiManager.setWifiApEnabled() | WifiP2pManager.createGroup() |
| API 可见性 | 隐藏 API,Android 12+ 白名单 | 公开 API,任何应用可调 |
| 默认网段 | 192.168.43.x | 192.168.49.x |
| 运营商感知 | 是(Carrier Config 管控) | 否(不属于 tethering API) |
| 加密方式 | WPA2/WPA3-Personal | WPA2-Personal |
NetShare 利用的就是这个 API 可见性差异——WifiP2pManager 从头到尾都是 Google 公开给第三方应用的,不受运营商配置的任何影响。
接收端设备的连接体验
当 NetShare 成为 Group Owner 后,其他设备扫描 WiFi 时会看到一个普通的 WiFi 网络(SSID 和密码由 NetShare 界面展示),连接过程和连任何家庭路由器完全一样,只是:
- 连上之后,Android 的 WiFi Direct 框架负责管理这个 P2P 会话
- 如果设备原生支持 WiFi Direct(所有现代 Android、iOS 都支持),连接几乎是自动的
- 如果需要手动加入,扫到 SSID 后输入密码就行
这也是为什么 NetShare 能在不做任何设备适配的情况下兼容如此广泛的接收端——从 Windows 笔记本到 Switch 游戏机,只要能连 WiFi 就能扫描到它。
关键限制
WiFi Direct 有几个内在的限制决定了 NetShare 的边界:
- 单频段:P2P Group 只能在一个频段运行(2.4GHz 或 5GHz),无法同时双频
- 设备上限:标准 WiFi Direct 规范支持最多 255 个设备,但 Android 实现里 Group Owner 实际支持的并发 Client 通常在 10-20 个左右,具体取决于芯片组
- 电池消耗:GO 角色的 WiFi 芯片持续处于高功耗发射状态,比普通使用耗电快 3-5 倍
- 信号范围:和手机 WiFi 发射功率相同,一般在开阔环境 15-30 米,有墙的话 5-10 米